プロが教えるわが家の防犯対策術!

A1●●●●1111
A2××××××222222
A3■■■■■■■■■■■1234567890

上記のように文字列と数値が一続きになっているデータが各セルに入っています。
文字列+数値の順番は決まっていますが、それぞれの文字数は決まっていません。数値はマイナスの場合もあります。
また、境にカンマやスペースなどもないため、テキストファイルウィザードも使えません。
このデータから、数値のみを抽出する方法がありましたらご教示下さい。
よろしくお願いします。

A 回答 (4件)

マクロの一例です。



Sub test1()
  Dim i As Integer
  For i = 1 To Len(ActiveCell.Value)
    With ActiveCell.Characters(i, 1)
      If .Text = "-" Or .Text Like "[0-9]" Then
        MsgBox Right(ActiveCell.Value, Len(ActiveCell.Value) - i + 1)
        Exit For
      End If
    End With
  Next i
End Sub
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございました。
不勉強で申し訳ありませんが、マクロの知識がないためうまく使うことができませんでした。

お礼日時:2009/01/31 01:45

この課題は難しい問題です。


A経験をつんで、定石を覚えるしかない。考え付く人はよほどの人。
BまたはVBA(またはそれを使うユーザー関数)で各桁文字を数字かどうか判別して、マイナスや数字出現桁を探すプログラムを組むとか。
Bのほうが素直なロジックで考えてプログラムを組める。
ーー
Aは
例 A6に
去年の売上は-234567
関数は
=MID(A6,MIN(FIND({"-","0","1","2","3","4","5","6","7","8","9"},A6&"-0123456789")),10)
のようなものだ。
第3引数の10を具体的にしたければ、LEN(A6)から
上記MIN以下の式の値を引いた式にする。
全角数字なら半角数字やマイナスの部分を全角数字やマイナスに変える。
    • good
    • 0
この回答へのお礼

ありがとうございました。目的の結果を得ることができました。

お礼日時:2009/01/31 01:46

配列関数案です。


B列に
=IF(ISERROR(FIND("-",A1)),MID(A1,MIN(FIND(ROW(A$1:A$10)-1,A1&"1234567890")),10),MID(A1,FIND("-",A1),10))
Ctrl+Shift+Enter で決定、下へコピィします。
或いは、
別の列に(仮にF列に)
F
-
1
2
3
・・・
0
と検索用の文字を入れておいて、B1に
=MID(A1,MIN(FIND(F$1:F$10,A1&"1234567890-")),10)
Ctrl+Shift+Enterで決定、下へコピィ
などでは如何でしょうか。
    • good
    • 2
この回答へのお礼

ありがとうございました。目的の結果を得ることができました。

お礼日時:2009/01/31 01:47

No.3の方に似ていますが…。



=IF(ISERROR(FIND("-",A1))
,MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},ASC(A1)&"0123456789")),LEN(A1))
,MID(A1,FIND("-",A1),LEN(A1)))

(長くなってしまったので改行していますが、1行に入れてください)
これで数字部分の桁制限なく抜き出せるかと思います。
    • good
    • 3
この回答へのお礼

ありがとうございました。目的の結果を得ることができました。数字部分の桁制限がなくなりさらに有益な情報でした。

お礼日時:2009/01/31 01:48

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