
Excelマクロを書いていると、
「これって数字として扱っていいの…?」
と確認したくなる場面、必ず出てきます。
たとえば——
-
ユーザーが入力した値が本当に数字か確かめたい
-
シートから読み込んだ値が数字なのか文字なのかチェックしたい
-
空白や文字が混じっていないか事前に検証したい
そんなときに大活躍するのが IsNumeric() です。
一見地味ですが、「ミスを未然に防ぐ」超重要な関数なんです✨
🌱 IsNumeric()の基本をサクッと理解しよう
IsNumeric(値)
→ 数字として認識できる場合 True、そうでなければ False を返す
とてもシンプル!
▼ 実例
Debug.Print IsNumeric("123") ' True
Debug.Print IsNumeric("12.5") ' True
Debug.Print IsNumeric("-8") ' True
Debug.Print IsNumeric("ABC") ' False
Debug.Print IsNumeric("123ABC") ' False
Debug.Print IsNumeric("") ' False
💡 基本の使い方
Sub IsNumericDemo()
Dim value As String
value = InputBox("数字を入力してください")
If IsNumeric(value) Then
MsgBox "これは数字です!"
Else
MsgBox "数字ではありません。もう一度試してください。"
End If
End Sub
🧩 よくあるケース:シートのデータチェック
Excelには「数字に見えるけど実は文字列」という罠が多いです。
たとえば:
-
「123」(文字列)
-
「1 234」(スペース入り)
-
「123」(全角数字)
-
「1,234」(カンマ入り)
こうした混在データを判定するのにも IsNumeric が使えます。
Sub CheckSheetValues()
Dim i As Long
For i = 1 To 10
If IsNumeric(Cells(i, 1).Value) Then
Debug.Print Cells(i, 1).Value & " → 数字"
Else
Debug.Print Cells(i, 1).Value & " → 数字ではない"
End If
Next i
End Sub
🔎 応用:数字の場合だけ計算する
Sub SafeAdd()
Dim a As Variant
Dim b As Variant
a = "100"
b = "20x"
If IsNumeric(a) And IsNumeric(b) Then
Debug.Print a + b
Else
Debug.Print "どちらかが数字ではありません"
End If
End Sub
⚠️ 注意点:IsNumeric() は“認識できる数字”が広い!
Excel VBA の IsNumeric はけっこう懐が広く…
Debug.Print IsNumeric("1E4") ' True(指数表記)
Debug.Print IsNumeric("123") ' True(全角数字)
Debug.Print IsNumeric(" 12") ' True(冒頭スペースOK)
「なぜこれが数字扱いになるの?」
という疑問が減ります。
必要に応じて Trim() や Replace() と併用するのもおすすめです。
🎯 まとめ
| 判定する内容 | 結果 |
|---|---|
| "123" | True |
| "12.5" | True |
| "123"(全角) | True |
| "-5" | True |
| "123ABC" | False |
| ""(空) | False |
| " "(スペースのみ) | False |