VBAテクニック集 VBA一覧 変数・知識 文法・構文

【VBA】IsNumericの使い方|数値判定の基本と落とし穴を徹底解説

Excel VBAで入力値をチェックしたい場面は多くあります。例えば、ユーザーから入力された値が数字であるかを確認し、数値以外の場合はエラーを出す、あるいはメッセージを表示するといった処理です。
そんなときに最もよく使われる関数が IsNumeric関数 です。

しかし、IsNumericは非常に便利な反面、少しクセのある動作をするため、誤った使い方をすると「思っていた判定と違う」というトラブルにつながることがあります。実務で数字判定を行う場合、IsNumericの挙動を正しく理解しておくことは不可欠です。

この記事では、IsNumericの基本的な使い方から、落とし穴、実務的なチェック方法、応用例まで、体系的にわかりやすく解説します。

目次

✅ 【VBA】IsNumericとは?数値として扱えるかどうかを判定する関数

IsNumeric関数は、引数が数値として扱えるかどうかを判定し、以下のように返します。

  • True … 数値として扱える場合
  • False … 数値として扱えない場合

VBAで最も基本となるチェック関数の1つで、セル値の検証や入力チェックで頻繁に使用されます。


✅ 【VBA】IsNumericの基本構文

・構文:IsNumericの基本形

IsNumeric(値)

この関数は Boolean(True または False)を返します。


✅ 【VBA】IsNumericの基本使用例

・例:入力が数値かどうかを確認する

Sub CheckValue()
    Dim inputValue As Variant
    inputValue = Range("A1").Value

    If IsNumeric(inputValue) Then
        MsgBox "数値です"
    Else
        MsgBox "数値ではありません"
    End If
End Sub

Excelの入力内容は文字列として取得される場合が多いため、IsNumericで評価すると「文字列でも数値として解釈できればTrue」になります。


✅ 【VBA】IsNumericが True を返すケースを深掘り理解する

IsNumericは数値以外のデータでも「数値として解釈できる」ならTrueと判定します。

・意外とTrueになる例

判定理由
"123"True数字の文字列は数値に変換できる
"00123"True0から始まっていても整数として扱える
"12.5"True少数として解釈できる
"1E+3"True指数表記が数値として認識される
"¥1,000"TrueExcelは通貨表記も数値とみなす
" 123 "True前後の空白は無視される

この仕様を知らないと、思わぬ部分で「Trueになってしまった…」という事態を引き起こします。

参考:【VBA】IsNumeric関数:値が数値か確認する方法


✅ 【VBA】IsNumericが False になる例

一方、以下のような値はFalseになります。

判定理由
"ABC"False数値として変換不可能
"12A"False途中に文字が含まれる
"1 2"False数字と数字の間のスペースは解釈できない
""False空の文字列
"--123"False正しい数値表現ではない



✅ 【VBA】IsNumericの落とし穴|実務で誤解が起こるポイント

IsNumericは便利ですが、知らないと危険な「落とし穴」がいくつか存在します。


・落とし穴1:文字列でも数値として解釈できればTrue

例えば "0123""12.3" も True です。

数値判定というより「数値に変換できるか」という意味合いです。


・落とし穴2:カンマ(,)付きの数字もTrueになる

IsNumeric("1,234")   ' True

処理によっては、これが望ましくないこともあります。


・落とし穴3:通貨表記もTrueになる

IsNumeric("$100")
IsNumeric("¥1000")

これらもTrueになります。

“記号が付いているからFalseだろう” と誤解されがちなポイントです。


・落とし穴4:指数表記もTrueになる

IsNumeric("1E+3")   ' 1000 として扱われる

単純な整数・小数判定ではなく、「Excelとして数値に変換できるか」が基準です。


・落とし穴5:日付も数値扱いになる場合がある

Excelでは日付をシリアル値として扱うため、以下も True になります。

IsNumeric(#2024/12/31#)

日付チェックをしたいのに誤判定になる原因です。

参考:【VBA】条件に一致した行だけ削除する方法(If × Delete)|不要データを効率的に整理する実務テクニック


✅ 【VBA】実務で使えるIsNumericのチェック例

・例:ユーザー入力のチェック

If Not IsNumeric(inputValue) Then
    MsgBox "数値を入力してください"
    Exit Sub
End If

非常に基本ですが実務でよく使うパターンです。


・例:セル内の余計な空白を取り除いて数値判定

value = Trim(Range("A1").Value)

If IsNumeric(value) Then
    ' 処理
End If

Excelに特有の「空白混入トラブル」を減らせます。


・例:桁区切りカンマを取り除いてから判定

Dim v As String
v = Replace(Range("A1").Value, ",", "")

If IsNumeric(v) Then

正確な整数チェックが必要な場合に有効です。


✅ 【VBA】IsNumericの限界|完全な数値チェックには不向き

IsNumericは万能ではなく、次のような場合には適しません。

・整数限定でチェックしたい場合

整数か小数かを区別しないため。

・負の整数を正確に判定したい場合

"-123" は正しくTrueだが、"--123" のようなデータは誤判定を起こしやすい。

・日付を除外したい場合

シリアル値としてTrueになるため、日付判定には使いにくい。


✅ 【VBA】より精密な数値チェックを行う方法

・方法1:整数限定なら Like 演算子で判定

If v Like "#*" Then

1桁でも整数であるかの判定が可能。

・複数桁の整数判定

If v Like "[0-9]*" Then

・方法2:正規表現(RegExp)を使う方法

より強力なチェックが可能です。

Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")

reg.Pattern = "^\d+$"  ' 整数のみ
reg.IgnoreCase = True
reg.Global = True

If reg.Test(v) Then

・方法3:エラー処理で数値変換を試す

On Error Resume Next
n = CDbl(v)
If Err.Number = 0 Then
    ' 数値と判定
Else
    ' 数値ではない
End If
On Error GoTo 0

CDbl の変換を利用した堅牢な方法です。


✅ 【VBA】実務に役立つIsNumericの応用例

・応用例:数値だけを別シートに抽出する

Dim i As Long, lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To lastRow
    If IsNumeric(Cells(i, 1).Value) Then
        Sheets("数値").Cells(i, 1).Value = Cells(i, 1).Value
    End If
Next i

・応用例:誤った形式の数値を弾くチェック

v = Replace(Trim(v), ",", "")

If Not IsNumeric(v) Then
    MsgBox "入力値が正しい数字ではありません"
    Exit Sub
End If

・応用例:ユーザーフォームでの入力チェック

If Not IsNumeric(txtAge.Value) Then
    MsgBox "年齢を数値で入力してください"
    txtAge.SetFocus
End If

✅ 【VBA】IsNumericと組み合わせると便利な関数・メソッド

・Trim

空白除去で判定精度UP。

参考:【Excel】TRIM関数とLEN関数の活用法とは?Excelで文字列処理をスマートにする便利テクニックを徹底解説

・Replace

カンマ付き数字を扱いやすく。

参考:【VBA】文字列を一括置換する方法|Replaceメソッドで効率的にデータを整理するテクニック

・CDbl / CLng

変換と判定を同時に。

参考:【VBA】CDbl関数:値を倍精度浮動小数点数に変換する

・Like

整数、小数、負数の詳細判定に。

参考:【VBA】部分一致の処理をする方法:Like演算子


✅ 【VBA】RPA(UiPath)と組み合わせる際にも役立つ知識

ExcelデータをUiPathで処理する際は、セルの値が文字列か数値かで動作が変わることがあります。
そこで VBA側であらかじめ数値チェックを行い、データ品質を整えておくと以下のようなメリットがあります。

  • ロボットが途中で止まるエラーを防止
  • 「数字なのに文字列」といったExcel特有の不具合の解消
  • 日付や文字列の誤処理を減らし、安定動作を実現

VBAとRPAの併用は、実務で最も効果が高いデータ前処理手段のひとつです。


✅ まとめ:IsNumericの挙動を理解すれば、堅牢な入力チェックが実現できる

  • IsNumericは「数値に変換できるか」を判定する関数
  • 数値らしい文字列("123"や"1,234"、"12.5")はTrueになる
  • 通貨・指数表記・日付もTrueになるケースがあるため注意
  • 必要に応じて Like や 正規表現と併用することで精度向上
  • 実務では、Trim / Replace と組み合わせると安定したチェックが可能
  • RPAと併用する場合も、事前の数値判定が品質を高める

IsNumericを正しく理解することで、誤判定を防ぎ、より安全で実務に適したコードを書くことができます。入力チェックは業務の安定性に直結するため、ぜひ今回の知識を活用してコード品質を高めてください。

    -VBAテクニック集, VBA一覧, 変数・知識, 文法・構文