プロが教える店舗&オフィスのセキュリティ対策術

エクセルで英数字を含む文字列から数字を抽出く
=1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0),COUNT(1*MID(A1,ROW($1:$9),1)))
小数点にも対応させるにはどうしたら良いでしょうか。

「AA0.45」→0.45
「0.65BB」→0.65
「CC0.85CC」→0.85

http://office.microsoft.com/ja-jp/excel-help/HA0 …
を参照しました

A 回答 (4件)

元の数式を活かすなら以下のような関数で数字の出ている部分の最後の位置を調べます。



=MAX(ISNUMBER(1*MID(A2,ROW($1:$9),1))*ROW($1:$9))

この左の文字列部分だけで、最初に数字が出てくる部分を調べ、MID関数でその後の文字数を十分大きな数字(例えば9)にすれば良いことになります(配列数式)。

=1*MID(LEFT(A2,MAX(ISNUMBER(1*MID(A2,ROW($1:$9),1))*ROW($1:$9))),MATCH(TRUE,ISNUMBER(1*MID(A2,ROW($1:$9),1)),0),9)
    • good
    • 0
この回答へのお礼

有難うございました。
助かりました。

お礼日時:2012/02/24 08:25

いきなり別解です。

(*^_^*)

添付図参照
B1: =MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890)),99)
  (これは普通の数式)

C1: {=IF(ISERR(B1*1),LEFT(B1,MATCH(TRUE,(MID(B1,ROW(INDIRECT("1:"&LEN(B1))),1))>="a",0)-1),B1)}
  (こちらは配列数式)
「エクセルで英数字の文字列から数字を抽出」の回答画像3
    • good
    • 0
この回答へのお礼

有難うございました。
助かりました。

お礼日時:2012/02/24 08:26

例です。


小数点の位置に注目です。

=MID(A1,FIND(".",A1,1)-1,4)
    • good
    • 0

こんばんは!


文字列の数値は必ず連続で一つだけ
(「AA0.45BC20」ように数値が複数場所)で存在しなくて、必ず小数点がある場合の一例です。

A1セルからデータがあるとして、表示したいセルに
=MID(A1,MATCH(TRUE,ISNUMBER(MID(A1,ROW($A$1:$A$20),1)*1),0),COUNT(MID(A1,ROW($A$1:$A$20),1)*1)+1)
これは配列数式になってしまいますので、Shift+Ctrlキーを押しながらEnterキーで確定!
この画面からコピー&ペーストする場合は
セルに貼り付け後、数式バー内で一度クリック!
編集可能になりますのでShift+Ctrlキーを押しながらEnterキーで確定!
数式の前後に{ }マークがはいり配列数式になります。
これをオートフィルで下へコピーではどうでしょうか?

もし、小数点以下がある数値・ない数値が混在する場合は
VBAになってしまいますが、一例です。
B列に表示するようにしてみました。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)


Sub test() 'この行から
Dim i, k As Long
Dim str, buf As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
buf = ""
For k = 1 To Len(Cells(i, 1))
str = StrConv(Mid(Cells(i, 1), k, 1), vbNarrow)
If str Like "[0-9 .]" Then
buf = buf & str
End If
Next k
Cells(i, 2) = buf
Next i
End Sub 'この行まで

※ すべての数値と小数点を表示してしまいますので数値は連続して一か所だけという前提です。

参考になりますかね?m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!