指定の文字列から数字だけを抜き出す汎用関数を紹介します。
Aパターン:文字列内の数字を全部を取ってくる
123みかん456りんご789 ⇒ 123456789
Bパターン:文字列内で最初に登場した数値部分を取ってくる
1,100円(税10%) ⇒ 1,100
↑の2パターンがありますので、目的にあった方をご覧ください。
お忙しい方は、ソースコードをコピーして、使い方のように呼び出すだけでOKです。
コードをしっかり読みたい方は、解説をどうぞ。
文字列内に登場する数字を全部を取ってくる関数
ソースコード
' 123みかん456りんご789 ⇒ 123456789 Function 文字列からすべての数字を取り出す(ByVal 元の文字列 As String) As String ' 全角を半角にして日本語の1、2、…も拾う 元の文字列 = StrConv(元の文字列, vbNarrow) ' 元の文字列を1文字ごとに数値か判定して返り値に取込 Dim 取り出す数値テキスト As String: 取り出す数値テキスト = "" Dim 第n文字 As String Dim n As Long For n = 1 To Len(元の文字列) 第n文字 = Mid(元の文字列, n, 1) ' 数値であれば返り値に追加 If 第n文字 Like "[0-9]" Then 取り出す数値テキスト = 取り出す数値テキスト & 第n文字 End If Next ' 1文字ずつ判定 文字列からすべての数字を取り出す = 取り出す数値テキスト End Function
使い方
文字列からすべての数字を取り出す("123みかん456りんご789") ' ← "123456789" が返る
文字列内で最初に登場した数値部分を取ってくる関数
ソースコード
' 1,100円(税10%) ⇒ 1,100 Function 文字列から最初に登場した数値部分を取り出す(ByVal 元の文字列 As String) As String ' 全角を半角にして日本語の1、2、…も拾う 元の文字列 = StrConv(元の文字列, vbNarrow) ' 元の文字列を1文字ごとに数値か判定して返り値に取込 Dim 取り出す数値テキスト As String: 取り出す数値テキスト = "" Dim is数字が登場済 As Boolean: is数字が登場済 = False Dim 第n文字 As String Dim n As Long For n = 1 To Len(元の文字列) 第n文字 = Mid(元の文字列, n, 1) ' 数字であれば返り値に加える If 第n文字 Like "[0-9]" Then 取り出す数値テキスト = 取り出す数値テキスト & 第n文字 is数字が登場済 = True ' 第1数字登場後であれば、カンマ、小数点も返り値に加える ElseIf is数字が登場済 And (第n文字 = "." Or 第n文字 = ",") Then 取り出す数値テキスト = 取り出す数値テキスト & 第n文字 ' 第1数字登場後に数字以外が来たらExit ElseIf is数字が登場済 Then Exit For End If Next ' 1文字ずつ判定 ' 完成テキストが数値の場合のみ返す(1.2.3のような複数の小数点があった場合は""を返す) If IsNumeric(取り出す数値テキスト) Then 文字列から最初に登場した数値部分を取り出す = 取り出す数値テキスト End If End Function
使い方
文字列から最初に登場した数値部分を取り出す("1,100円(税10%)") ' ← "1,100" が返る
解説
最初に注意事項ですが、両方の関数とも、数字を取り出しつつもString型で返します。
これは、LongやDoubleを返り値にしようとすると、どうしても0は必ず返るため、
「0があった」のか、「数字は無かった」のかが判定できなくなるためです。
""が返ったら数字なし、0が返ったら0が文字列内にあったと解釈してください。
いずれの場合も、IsNumericがFalseになってしまうような文字列は返しませんので、
Dim Long型の変数 as Long Long型の変数 = 文字列の内部から最初に登場した数値を取り出す("○○")
こうやってLongの変数に直接代入しても、これがエラーになることはありません。
※ もちろん桁が多すぎればオーバーフローは起こしますが
処理の中身については、
「元の文字列を1文字ずつ判定して、数字なら返り値に加えていく」だけです。
特別な関数などは使用しておりませんので、ここでズラズラ解説を書くより、
コメントを追いながらコードを読むほうがわかりやすそうですね。
If 第n文字 Like "[0-9]" Then
↑の部分を初めて見る方は、「Like演算子」でお勉強してください。
なお、Aパターンの「数字をすべて取ってくる」バージョンの関数は、
If 第n文字 Like "[0-9]" Then
↑これを
If 第n文字 Like "[0-9]" Or 第n文字 = "-" Then
↑こう書き替えることで、住所から「12-3-4」を取ってくるなど、
取ってくるテキストをアレンジできます。
というか、Likeの部分を書き換えれば、
数字に限らず好きな文字を取ってくる関数にアレンジできます。
活用してみてください。