VBA Val 関数:数字を数値に変換する

はじめに

Excel VBA マクロの Val 関数から数字を数値に変換する方法を紹介します。

Val 関数は、文字列の先頭にある数字を数値に変換します。

123あいう なら 123 を返します。

変換できないときは 0 を返します。エラーは発生しません。

文字列を必ず数値に変換したいときに使用します。

文字列を数値に変換するには「文字列を変換する」をご覧ください。
  • 目次
    • Val 関数
    • 解説
    • 使用例

Val 関数

Val(文字列)
文字列を数値に変換します。

引数「文字列」文字列を指定します。
戻り値の型変換した数値に対応した数値型 (主に Double など)

解説

引数「文字列」の先頭にある数字を数値に変換します。

123あいう456 なら 123 を返します。数字以外の文字が見つかったときは、その後ろの数字は無視されます。

引数「文字列」に空白が含まれているときは、それを削除してから変換します。1 2 3 なら 123 を返します。

引数「文字列」の先頭が変換できない文字のときは 0 を返します。エラーは発生しません。

&HFF のように &H を付けた 16進数の文字列は変換できます。

\1001,234 のように「CInt 関数」では変換できる値でも、Val 関数は \, は数字ではないので、変換できません。

123 のような全角の数字も変換できません。

通常はどのような値でも Double 型に変換されます。

CInt 関数との違い

CInt 関数」を使用しても、文字列を数値型に変換できます。

Val 関数

  • 数値に変換できない値は 0 に変換します。エラーは発生しません。
  • 半角の数字だけ変換できます。
  • 空白を削除してから変換します。
  • "12あいう" のように先頭が数字なら、その数字を変換します。
  • "1,234" のようにカンマ区切りの数字は、カンマの前の数字を変換します。

CInt 関数

  • "123" のように、全角の数字を変換できます。
  • "1,234" のように、カンマ区切りの数字を変換できます。
  • "\123" のように、円マークが付いた数字を変換できます。
  • 空白や数字以外の文字列が含まれるときはエラーになります。

使用例

Dim d As Double
d = Val("123")
Debug.Print(d) ' 123

d = Val("123")
Debug.Print(d) ' 0

d = Val("1.5")
Debug.Print(d) ' 1.5

d = Val("2.5")
Debug.Print(d) ' 2.5

d = Val("\100") ' 円マーク
Debug.Print(d) ' 0

d = Val("1,000")
Debug.Print(d) ' 1

d = Val("あいう")
Debug.Print(d) ' 0

d = Val("あいう123")
Debug.Print(d) ' 0

d = Val("123あいう")
Debug.Print(d) ' 123

d = Val("1 0")
Debug.Print(d) ' 10

d = Val("1.5g")
Debug.Print(d) ' 1.5

d = Val("&HFF")
Debug.Print(d) ' 255

CInt 関数

CInt 関数」などは変換できないときにエラーが発生します。

Dim i As Integer
i = CInt("123")
Debug.Print(i)  ' 123

i = CInt("123")
Debug.Print(i)  ' 123

i = CInt("1.5")
Debug.Print(i)  ' 2

i = CInt("2.5")
Debug.Print(i)  ' 2

i = CInt("\100") ' 円マーク
Debug.Print(i)  ' 100

i = CInt("1,000")
Debug.Print(i)  ' 1000

i = CInt(True)
Debug.Print(i)  ' 1

i = CInt(Now)
Debug.Print(i)  ' 変換できる、IsNumeric 関数は False

i = CInt("2013/1/1") ' 型が一致しません

i = CInt("32768")    ' オーバーフロー

i = CInt("Tips")     ' 型が一致しません

i = CInt("1 0")      ' 型が一致しません

i = CInt("100円")    ' 型が一致しません

i = CInt("1.5g")     ' 型が一致しません