忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBA】数値判定(IsNumeric)の使い方!計算エラーを未然に防ぐデータバリデーション

VBAで計算処理を行う際、変数の中身が数値ではないのに計算しようとすると「型が一致しません」というエラーが発生してしまいます。IsNumeric関数を使えば、対象のデータが数値として扱えるかどうかを事前に判定できるため、安全なプログラムを書くことが可能になります。

1. 基本文法:IsNumeric関数

引数に指定した値が、数値として認識できる場合は True、認識できない場合は False を返します。整数だけでなく、小数や「数値として解釈可能な文字列」も判定対象となります。

[ 構文 ]
IsNumeric( 判定したい値 )

2. 実践サンプル:データの数値判定

ポイント:文字列の「"123"」もTrueになる柔軟な判定

数値そのものはもちろん、計算可能なデータであれば True を返す特性を理解しておきましょう。

Sub Macro1()
  Debug.Print IsNumeric(1)        ' 結果: True (整数)
  Debug.Print IsNumeric(0.5)      ' 結果: True (小数)

  Dim str1 As String
  str1 = "aa"
  Debug.Print IsNumeric(str1)    ' 結果: False (アルファベット)
End Sub

3. 実行結果

イミディエイトウィンドウには、判定結果が論理値で表示されます。

True
True
False

4. エンジニアの視点:IsNumericの「癖」に注意

1. 意外な判定結果: IsNumeric は非常に柔軟です。例えば IsNumeric("1,234") や IsNumeric("&HFF")(16進数)も True を返します。厳密に「数字だけ」を許可したい場合は、他のチェックとの併用も検討しましょう。
2. 実務での活用法: ユーザーに入力させた値が数値でない場合に、「数値を入力してください」と警告(MsgBox)を出すガード句として使うのが一般的です。これにより、マクロが途中で落ちるという「いけいけ」でない状況を防げます。
3. データクリーニング: データベース(PostgreSQLやOracle等)へデータを移行する前の事前チェックとしても有効です。型エラーによるインポート失敗を防ぐために、VBA側で IsNumeric を使ってエラー行を抽出するロジックは非常に「理系」的で効率的です。


5. まとめ

「計算する前に、まず IsNumeric」。この習慣をつけるだけで、マクロの信頼性は飛躍的に向上します。外部から来る不確定なデータを扱う際こそ、この関数でデータの正当性をしっかりと見極めていきましょう。



PR