今回は指定した値や変数の中身が数値に変換できるかどうか判定する方法をご説明します。
タイトルでは「数値かどうか」と記載していますが、結果的に数値かどうか判定出来るという事です。
指定した値や変数の中身が数値に変換できるかどうか判定には「IsNumeric関数」を使用します。
また、IsNumeric関数は数値以外に一部の文字列も数値として許容するため、厳密に数値を判定したい場合は別の方法を選択する必要があります。
その他の判定する関数については以下の記事をご覧ください。
1.IsNumeric関数の使い方
指定した値や変数の中身が数値に変換できるかどうか判定には「IsNumeric関数」を使用します。
構文は次のように記述します。
IsNumeric(値)
「値」 は必須で、値や変数の中身が数値に変換できるか判定する値を指定します。
「値」で指定した値や変数がIntegerやDoubleなどの数値型に変換できる値なら「True」を、変換できない場合は「False」を返します。
指定する「値」は数値である必要はありません。
文字列としての「”123″」のような値でも数値として判定します。
数値以外を数値として判定してしまうケース
文頭でも記載していますが、IsNumeric関数は一部の文字も数値として判定します。
そのケースが次の通りです。
文字列 | 表記例 |
数式 | 10+10 |
数値と符号間の半角スペース | – 123 |
符号 | +123、123- |
桁表記 | 10e8 |
8進数表記 | &O123 |
16進数表記 | &H123 |
指数表記 | 123E-3 |
2.サンプルコード
いくつかのパターンのサンプルです。
文字列はFalseになります。
数式はTrueですが、文字列の数式はFalseになります。
Sub Sample1()
MsgBox IsNumeric(123) 'True:数値
MsgBox IsNumeric("123") 'True:文字列の数字
MsgBox IsNumeric(-123) 'True:符号
MsgBox IsNumeric("-123") 'True:符号付きの文字列の数字
MsgBox IsNumeric("- 123") 'True:符号と半角スペースの文字列
Dim MyStr As String
Dim MyInt As Integer
MyInt = 123
MyStr = "123"
MsgBox IsNumeric(MyInt) 'True:数値の変数
MsgBox IsNumeric(MyStr) 'True:数字の文字列の変数
MyStr = "ABC"
MsgBox IsNumeric(MyStr) 'False:文字の変数
MsgBox IsNumeric(10 * 10) 'True:計算式
MsgBox IsNumeric("10 * 10") 'False:文字列の計算式
End Sub