VBA IsNumeric 関数:数値に変換できるか判定する

はじめに

Excel VBA マクロの IsNumeric 関数から数値に変換できるか判定する方法を紹介します。

IsNumeric 関数は、指定した値が数値かどうかを判定します。

文字列の "123" や数値の 100 など、数値に変換できる値なら True を返します。

文字列を「CInt 関数」などで変換できるか判定したいときに使用します。

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

IsNumeric 関数

IsNumeric()
を数値型 (Integer など) に変換できるときは True を返します。それ以外のときは False を返します。

引数「値」判定したい値を指定します。
戻り値の型ブール型 (Boolean)

解説

引数「値」に「CInt 関数」などで数値に変換できる値を指定すると True を返します。変換できないときは False を返します。

引数「値」に日付型 (Date) を指定すると False を返します。ただし、「CInt 関数」などは日付型を数値に変換できます。

引数「値」に Boolean 型を指定すると、True は 1 に、False は 0 に変換できるため True を返します。

True を返すときだけ「CInt 関数」などで変換すると、エラーの発生を防げます。

Val 関数」なら、エラーが発生することなく変換できます。

使用例

数値に変換できるか判定する。

Dim b As Boolean

b = IsNumeric("123")
Debug.Print(b) ' True

b = IsNumeric("123")
Debug.Print(b) ' True

b = IsNumeric("1.5")
Debug.Print(b) ' True

b = IsNumeric("\100") ' 円マーク
Debug.Print(b) ' True

b = IsNumeric("1,000")
Debug.Print(b) ' True

b = IsNumeric(True)
Debug.Print(b) ' True

b = IsNumeric(Now)
Debug.Print(b) ' False、CInt 関数などで変換できる

b = IsNumeric("Tips")
Debug.Print(b) ' False

b = IsNumeric("100円")
Debug.Print(b) ' False

変換できるか判定

CInt 関数」を使用して、変換できるときだけ変換します。

Dim s As String
s = "123あいう"

Dim v As Variant
If IsNumeric(s) = True Then ' 変換できるときだけ数値にする
    v = CInt(s)
Else
    v = 0
End If

Val 関数

Val 関数」は変換できないときに 0 を返すため、判定する必要がありません。

Dim v As Variant
v = Val("123")
Debug.Print(v) ' 123

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

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