Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Excelマクロ入門】数字かどうか一発判定!IsNumeric()で入力チェックをラクにしよう

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