VBAで数値かどうかを判定する(IsNumeric)

IsNumeric

IsNumeric関数は引数データが数値かどうかを判定します。

引数は数値型である必要はなく、”1.5″のように文字列でも数値として判定されます。

数値であればTrue、そうでなければFalseを返します。

IsNumeric関数は一部の文字も数字として許容するため、半角数字のみの厳格なチェックが必要な場合の方法についても後述しています。

構文

Function IsNumeric(Expression) As Boolean

Expression 判定したいデータを指定します。
戻り値
Boolean
数値であればTrue、そうでなければFalseを返します。

制限事項

IsNumeric関数は引数がある程度不正でも、数値として許容するところがあります。

例えば、”- 1.5″ のように符号と数字の間にスペースがあるような「これOKなの?」と思うようなものでもTrueを返します。

半角スペース(”- 123″)の他にも、前後の符号(”+123″、”-123″、”123+”、”123-“)、全角(”123”)、、桁表記(”10e8″)、8進数表記(&O123)、16進数表記(&H123)、など、これらは全てTrueが返ってきます。

そのため、意図しないチェック結果が返ってくることもありえます。

サンプルコード

単純なIsNumeric関数のサンプルと、変数を引数とするIsNumeric関数の2通りのサンプルです。

中段から最後の部分は、配列にいくつかの文字列を入れておき、それらをループでIsNumeric関数で数値かどうかを判定しています。

数値の場合とそうでない場合で出力内容のメッセージが変わります。

実行結果

上の関数を実行すると以下のように出力されます。

変換OK
True : 12345
True : 123
True : 10e8
True : &O123
True : &H123
True : \123,456.789
False: 123a

半角数字しか認めたくない場合

IsNumeric関数は上記の通り、許容範囲が広いところがあります。

しかし実際に数値判定をしたい場合には「半角数字だけかどうかを調べたい」という要件も出てくることがあります。

そういう場合にはIsNumeric関数ではなく、自分でチェックする関数を作るなどで対応することになります。

以下は半角数値だけかどうかを判定するIsNumericEx関数です。

ここでは半角数字のみかどうかを判定条件にしていますが、小数点、¥マーク、カンマ、なども含めたい場合は9行目の「[0-9]」を以下のように変えてください。

^や+$の部分は変更しません。

  1. 数字+小数点の場合 [0-9\.]
  2. 数字+小数点+カンマの場合 [0-9\.\,]
  3. 数字+¥+小数点+カンマの場合 [0-9\.\,\\」

正規表現のRegExpクラスを利用しているため、事前に参照設定が必要です。

VBAの画面でツールメニュー→参照設定のダイアログを開き、「Microsoft VBScript Regular Expressions 5.5」にチェックを付けることで正規表現のRegExpクラスが利用できるようになります。

使い方

IsNumericEx関数の使い方はIsNumeric関数と同じです。

上記サンプルコードの配列をそのまま使った使用例です。

実行結果

以下の通り、数字だけの文字列である”12345″のみがTrueを返します。

True : 12345
False: 123
False: 10e8
False: &O123
False: &H123
False: \123,456.789
False: 123a

関連記事

サブコンテンツ

このページの先頭へ