VBAでセルの値やCSVデータを処理していると、「数値だと思って計算したらエラーになった」という経験はないでしょうか。
特に外部ファイルやユーザー入力を扱うマクロでは、見た目は数値でも実際には文字列として扱われているケースがあります。
そのような状況で型変換や計算処理を実行すると、実行時エラーの原因になります。
そこで活躍するのがIsNumeric関数です。
IsNumeric関数を利用すると、対象の値が数値として扱えるかを事前に確認できます。
この記事では、IsNumeric関数の基本的な使い方から実務での活用方法、エラー対策まで詳しく解説します。
✅ VBAのIsNumeric関数とは
IsNumeric関数は、指定した値が数値として認識できるかを判定する関数です。
VBAではセルやCSVから取得した値を計算処理へ利用することが多くあります。
しかし取得した値が必ず数値とは限りません。
そのまま計算や型変換を行うとエラーが発生する可能性があります。
実務では「事前に判定してから処理する」という考え方が非常に重要です。
まずはIsNumeric関数の基本を理解しておきましょう。
・IsNumeric関数の構文
IsNumeric関数の構文は以下の通りです。
IsNumeric(判定したい値)
戻り値は以下のようになります。
- True:数値として扱える
- False:数値として扱えない
・どのような場面で使うのか
実務では次のような場面で利用されます。
- CSV取込
- ユーザー入力チェック
- 型変換前の確認
- 計算処理前の検証
特にCDblやCLngなどの型変換関数と組み合わせるケースが多くあります。
CSVやユーザー入力データを扱う場合は、「数値か確認する」だけでなく、「安全に数値へ変換する」処理も重要になります。CDbl関数を利用した型変換の実践例については、【VBA】CDbl関数の使い方|文字列を数値へ変換する方法と実務活用も参考にしてみてください。
✅ VBAでIsNumeric関数を使う基本例
IsNumeric関数は非常にシンプルですが、使い方を理解しておくことでエラーを大幅に減らせます。
特に初心者のうちは、エラーが発生してから対応するケースが多くあります。
しかし実務では、エラーを未然に防ぐ設計の方が重要です。
ここではまず基本的な使い方を確認していきましょう。
・数値かどうかを判定する
Sub CheckNumeric()
Dim inputValue As Variant
inputValue = "12345"
If IsNumeric(inputValue) Then
MsgBox "数値です"
Else
MsgBox "数値ではありません"
End If
End Sub
・なぜVariant型を使うのか
判定対象は、
- 数値
- 文字列
- 空白
- エラー値
など様々な可能性があります。
そのため、受け取り用の変数はVariant型にしておく方が柔軟です。
実務でも入力値チェックではVariant型がよく利用されます。
IsNumeric関数で判定を行う際は、数値・文字列・空白など様々な値を受け取れるVariant型がよく利用されます。Variant型の特徴や注意点、実務での使いどころについては、【VBA】Variant型とは?便利だが危険な理由と使いどころ|実務で失敗しないための徹底ガイドで詳しく解説しています。
・事前判定が重要な理由
IsNumericを使わず直接計算すると、予期しないデータでエラーになることがあります。
そのため、
- 判定する
- 問題なければ処理する
という流れがおすすめです。
✅ セルの値が数値か確認する方法
実務で最も多い利用場面はセルの値チェックです。
ユーザーが入力するセルには様々なデータが入る可能性があります。
そのため、処理前に数値かどうか確認しておくことが重要です。
・セルの値を確認する
Sub CheckCellValue()
Dim targetValue As Variant
targetValue = Worksheets("売上").Range("B2").Value
If IsNumeric(targetValue) Then
MsgBox "数値です"
Else
MsgBox "数値以外が入力されています"
End If
End Sub
・この設計が実務で使いやすい理由
セル値を直接計算する方法もあります。
しかし事前に変数へ格納しておくことで、
- デバッグしやすい
- 値を確認しやすい
- 条件分岐を追加しやすい
というメリットがあります。
保守性も高くなります。
・入力ミスのチェックに活用する
例えば数量入力欄に文字が入力された場合、
処理を続行せず警告を表示できます。
これにより誤計算を防げます。
✅ CDbl関数やCLng関数と組み合わせる方法
IsNumeric関数は単体よりも型変換関数と組み合わせる場面が多くあります。
実務ではこちらの使い方の方が重要です。
型変換前にチェックすることで、安全なマクロになります。
・CDbl変換前に判定する
Sub ConvertToDouble()
Dim inputValue As Variant
Dim salesAmount As Double
inputValue = Range("A2").Value
If IsNumeric(inputValue) Then
salesAmount = CDbl(inputValue)
MsgBox salesAmount
Else
MsgBox "数値に変換できません"
End If
End Sub
・なぜこの順番で処理するのか
CDblを先に実行すると、不正データでエラーになります。
しかしIsNumericで先に確認すれば安全に処理できます。
この考え方は、
- CInt
- CLng
- CDbl
などすべての型変換で共通です。
・実務でよくあるケース
CSVファイルを読み込む場合、
- 空白行
- ハイフン
- 文字列
が混在していることがあります。
そのため型変換前の判定が重要になります。
✅ IsNumeric関数で注意したいポイント
IsNumeric関数は便利ですが、判定結果が想像と異なる場合があります。
実務では仕様を理解して利用することが重要です。
ここを知らないまま使うと、想定外のデータが通過する可能性があります。
・小数もTrueになる
IsNumeric("123.45")
結果はTrueです。
・負数もTrueになる
IsNumeric("-100")
結果はTrueです。
・空白はFalseになる
IsNumeric("")
結果はFalseです。
・判定結果を鵜呑みにしない
数値として扱えるかどうかと、
業務上正しい値かどうかは別問題です。
例えば、
- 0以上であること
- 整数であること
などの追加チェックが必要な場合もあります。
✅ エラーを未然に防ぐ実務設計
IsNumeric関数は単なる判定関数ではありません。
実務では「安全な処理フローを作るための関数」と考える方が適切です。
エラーが発生してから対処するよりも、発生しない設計の方が保守しやすくなります。
・事前チェックを習慣化する
データを受け取ったら、
- 判定
- 型変換
- 計算
の順番で処理するようにします。
・On Error Resume Nextに依存しない
エラーを無視する方法もあります。
しかし原因の特定が難しくなるためおすすめできません。
事前チェックの方が安全です。
エラーが発生する可能性のある処理では、On Error Resume Nextで無理に続行するよりも、事前に条件を確認して安全に処理を分岐させる方が保守しやすいマクロになります。On Error Resume Nextの仕組みや実務で注意すべきポイントについては、【VBA】On Error Resume Nextでエラーを無視してエラーの制御|危険な理由で詳しく解説しています。
・読みやすいコードになる
IsNumericを利用すると、
「この値を検証している」
という意図が明確になります。
そのため第三者が見ても理解しやすいコードになります。
✅ まとめ:IsNumeric関数で安全な数値判定を行おう
IsNumeric関数は、値が数値として扱えるかを判定するための関数です。
- 数値判定を簡単に行える
- セル値やCSVデータの検証に役立つ
- CDblやCLngと組み合わせると安全性が向上する
- 型変換前のチェックとして活用できる
- 入力ミスによるエラーを防げる
- 保守性の高いマクロ設計につながる
実務では「エラーが出たら対応する」よりも、「エラーが出ない仕組みを作る」ことが重要です。IsNumeric関数を活用して、安全で保守しやすいVBAマクロを作成していきましょう。