[[20160624114837]] 『MID関数 ある文字に続く数値を抽出したい』(KUMA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『MID関数 ある文字に続く数値を抽出したい』(KUMA)

一つのセルに複数でランダムの文字列があるとします。
その文字列から指定した文字列の後に続く数値を抽出したいです。
具体的な例

A1[G10G20X123.123T6Y456.0M50H50Z7.89]
A2[X= ]B2[123.123]
A3[Y= ]B3[456.0]
A4[Z= ]B4[7.89]

A1の文字列から
B2にXの数値、B3にYの数値、B4にZの数値
というような出力を目的としています。

=MID(A1,FIND("X",$A1)+1,文字数指定)
上式のようにMID関数を使って開始位置の指定はできるのですが、
数値の桁がランダムなので表示する文字数指定がうまくできません。

なにか良い方法があれば教えてください。
よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:WindowsXP >


 これ、456.0が456になってしまうのは構わないだろうか?
 それともきちんと456.0で抜き出さないとだめだろうか?
(ねむねむ) 2016/06/24(金) 12:23

ねむねむ様

ご回答ありがとうございます。
小数点以下の数字につきましては、0であれば表示は必要ありません。

(KUMA) 2016/06/24(金) 12:33


Gコードっぽいデータですね。X,Y,Z それぞれ2度は登場しないならば、以下でどうでしょうか。
(Y,ZはそれぞれFINDする文字列を変更)
 =LOOKUP(10^10,LEFT(MID($A$1,FIND("X",$A$1)+1,99),COLUMN($1:$1))*1)
(???) 2016/06/24(金) 13:35

???様

ご回答ありがとうございます。
まさにGコードでございます・・・。
思った通りに表示できました。
大変助かります。ありがとうございました。

追記:
仕組みを理解しようとエクセルにて式をバラしてみたのですが、
いまいち理解できないところがあるのでご教示ください

1、LOOKUP関数の検査値欄が10^10である理由がわかりません。

   単純に10の10乗ということでよろしいのでしょうか??
   試しに10^1でやると表示桁が一桁になってしまいます。
   これはどうしてですか?

2、なぜLEFT関数の文字数指定欄がCOLUMN($1:$1)なのか?

   整数の1に置き換えると表示桁数が1桁になってしまうのはどうしてですか?

以上になります。
ご回答お待ちしております。

(KUMA) 2016/06/24(金) 14:01


良い質問ですね! さすがエンジニアだなぁ、と思います。

(1)10^10な理由
対象の数値より確実に大きい値なら何でもOKです。LOOKUPでこれを探すと、一致はないので、一番大きかった値が残る、という動きを利用しています。
10^1 つまり10を指定すると、これ以下で一番大きい値になっちゃいます。

(2)COLUMN($1:$1)
これは1文字だけ抜き取っているように見えますが、配列の答えになるのです。
例えば、LEFT("123A",COLUMN($1:$1)) こう書くと、結果は、1 12 123 123A になります。
とはいえ、そのままイコールで見ると1番目、つまり1にしかなりません。INDEX関数で4番目を見ると、123A が得られます。

LOOKUPでは、この配列の中から値を探します。ちなみに、*1 とすることで、文字まで含んだ場合はエラーになります。LOOKUPはエラーのものは無視するので、結果、数字だけで構成された一番大きい値が得られる、という訳です。
(???) 2016/06/24(金) 16:19


 ちょっとお伺いしますが、A1の文字列中に「E」が含まれることはないんですかね?

 もしあるんだったら ↓ の文字列で「X」がどうなるか確認してみてください。

 G10G20X123.123E6Y456.0M50H50Z7.89
        ↑
      ココが「E」 

 とりあえず確認まで。
(笑) 2016/06/24(金) 16:59

すごい勉強になるスレです。
感謝します。

もしEがあったら、
123.123E+6

123123000
となってしまいますね。

(通りすがりです) 2016/06/24(金) 19:15


面倒ですが、
もしEがあったら、
元のデータのEの前に、
アポストロフィーつけたら上手くいきますね。
G10G20X123.123'E6Y456.0M50EH50Z7.89

(通りすがりです) 2016/06/24(金) 20:05


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.