はじめに
文字列に含まれる数値を取り出すには、Val関数を使うと便利です。
Val関数は、数値が見つからなかった場合、0を返します。また、最初に数値以外の文字を見つけた時点で終了するというルールがあります。
使い方を詳しく見ていきましょう。
Val関数の特徴
以下のような表を作って、Val関数がどのような結果を返すか実験してみました。

実験したコードは以下の通りです。B列の値をVal関数の引数として、結果をD列に出力しています。
Sub testVal()
Dim i As Long
For i = 4 To 11
Cells(i, "D") = Val(Cells(i, "B"))
Next i
End Sub
1,2行目はそのまま数値を返しています。
3行目の「A100」は、最初に文字が来ているので、その時点で 0 を返します。文字列内に数値が入っていれば良いわけでないので注意しましょう。
4行目は、先頭が数値で「円」が来るまでを数値として捉えています。5行目も同じように先頭の数値を「and」が来るまで取得して、「200」のみを返しています。「and」以降はキャンセルされます。
次の5行目は、「\500」となっているにも関わらず「500」を返しています。これは、「\500」と入力した時点でセルの初期設定が通貨に変更され、初期設定(通貨)+値(500)と自動変換されたためです。
6行目も同じく書式設定が通貨扱いになっているので「400」を返します。
もし、以下のように文字列変数として値を渡すと、返す値は 0 となります。
Sub testVal2()
Debug.Print Val("\500") '-> 0
Debug.Print Val("$400") '-> 0
End Sub
セルの値と変数の値では、結果が異なってきますので注意しましょう。
最後に日付ですが、先頭の年の部分「2025」が返りました。これは単に文字列として受け取った事が考えられますが、紛らわしいので通常はこのような使い方はしません。
日付から値を取得したい場合は、Year(),Month(),Day() を用いた方が良いでしょう。
Val関数はExcelVBAでよく使われる関数です。是非使い方をマスターしましょう。
コメント