Excel VBAで入力値をチェックしたい場面は多くあります。例えば、ユーザーから入力された値が数字であるかを確認し、数値以外の場合はエラーを出す、あるいはメッセージを表示するといった処理です。
そんなときに最もよく使われる関数が IsNumeric関数 です。
しかし、IsNumericは非常に便利な反面、少しクセのある動作をするため、誤った使い方をすると「思っていた判定と違う」というトラブルにつながることがあります。実務で数字判定を行う場合、IsNumericの挙動を正しく理解しておくことは不可欠です。
この記事では、IsNumericの基本的な使い方から、落とし穴、実務的なチェック方法、応用例まで、体系的にわかりやすく解説します。
目次
- ✅ 【VBA】IsNumericとは?数値として扱えるかどうかを判定する関数
- ✅ 【VBA】IsNumericの基本構文
- ・構文:IsNumericの基本形
- ✅ 【VBA】IsNumericの基本使用例
- ・例:入力が数値かどうかを確認する
- ✅ 【VBA】IsNumericが True を返すケースを深掘り理解する
- ・意外とTrueになる例
- ✅ 【VBA】IsNumericが False になる例
- ✅ 【VBA】IsNumericの落とし穴|実務で誤解が起こるポイント
- ・落とし穴1:文字列でも数値として解釈できればTrue
- ・落とし穴2:カンマ(,)付きの数字もTrueになる
- ・落とし穴3:通貨表記もTrueになる
- ・落とし穴4:指数表記もTrueになる
- ・落とし穴5:日付も数値扱いになる場合がある
- ✅ 【VBA】実務で使えるIsNumericのチェック例
- ・例:ユーザー入力のチェック
- ・例:セル内の余計な空白を取り除いて数値判定
- ・例:桁区切りカンマを取り除いてから判定
- ✅ 【VBA】IsNumericの限界|完全な数値チェックには不向き
- ・整数限定でチェックしたい場合
- ・負の整数を正確に判定したい場合
- ・日付を除外したい場合
- ✅ 【VBA】より精密な数値チェックを行う方法
- ・方法1:整数限定なら Like 演算子で判定
- ・方法2:正規表現(RegExp)を使う方法
- ・方法3:エラー処理で数値変換を試す
- ✅ 【VBA】実務に役立つIsNumericの応用例
- ・応用例:数値だけを別シートに抽出する
- ・応用例:誤った形式の数値を弾くチェック
- ・応用例:ユーザーフォームでの入力チェック
- ✅ 【VBA】IsNumericと組み合わせると便利な関数・メソッド
- ・Trim
- ・Replace
- ・CDbl / CLng
- ・Like
- ✅ 【VBA】RPA(UiPath)と組み合わせる際にも役立つ知識
- ✅ まとめ: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" | True | 0から始まっていても整数として扱える |
"12.5" | True | 少数として解釈できる |
"1E+3" | True | 指数表記が数値として認識される |
"¥1,000" | True | Excelは通貨表記も数値とみなす |
" 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】RPA(UiPath)と組み合わせる際にも役立つ知識
ExcelデータをUiPathで処理する際は、セルの値が文字列か数値かで動作が変わることがあります。
そこで VBA側であらかじめ数値チェックを行い、データ品質を整えておくと以下のようなメリットがあります。
- ロボットが途中で止まるエラーを防止
- 「数字なのに文字列」といったExcel特有の不具合の解消
- 日付や文字列の誤処理を減らし、安定動作を実現
VBAとRPAの併用は、実務で最も効果が高いデータ前処理手段のひとつです。
✅ まとめ:IsNumericの挙動を理解すれば、堅牢な入力チェックが実現できる
- IsNumericは「数値に変換できるか」を判定する関数
- 数値らしい文字列("123"や"1,234"、"12.5")はTrueになる
- 通貨・指数表記・日付もTrueになるケースがあるため注意
- 必要に応じて Like や 正規表現と併用することで精度向上
- 実務では、Trim / Replace と組み合わせると安定したチェックが可能
- RPAと併用する場合も、事前の数値判定が品質を高める
IsNumericを正しく理解することで、誤判定を防ぎ、より安全で実務に適したコードを書くことができます。入力チェックは業務の安定性に直結するため、ぜひ今回の知識を活用してコード品質を高めてください。