Excel VBAで値が数値であるかどうかチェックする:IsNumeric

VBAである文字列を数値に変換できるかどうか調べるには、IsNumeric関数を使用します。

IsNumeric関数の使用法

構文は下記です。

Debug.Print 1256, IsNumeric(1256)                   '数値
Debug.Print "1256", IsNumeric("1256")               '文字列(数値・半角)
Debug.Print "1256", IsNumeric("1256")          '文字列(数値・全角)
Debug.Print "あいうえお", IsNumeric("あいうえお")      '文字列(数値以外)
Debug.Print "A100", IsNumeric("A100")               '文字列(文字+数値)
Debug.Print "100A", IsNumeric("100A")               '文字列(数値+文字)
Debug.Print "2016/08/07", IsNumeric("2016/08/07")   '日付式

[実行結果]IsNumeric1

結果から、IsNumeric関数は、全角半角に関わらず、数値と見なせるものにはTrueの判定をすることがわかります。文字が含まれているものは、数値とは見なされません。

使用例

IsNumeric関数はそれ単体で使用することはあまりなく、True/Falseを返す性質を利用し、その結果に応じて処理を分岐させるような場合によく使われます。

下記サンプルをご覧ください。If~Elseを用いて、A列に入力されている値に対し、数値なら50を加算し隣接セルに出力、文字の場合は何もしません。

Dim i As Long
For i = 1 To 5
    If IsNumeric(Cells(i, 1).Value) = True Then 'IsNumericで判断
        Cells(i, 2).Value = Cells(i, 1).Value + 50  '数値なら+50
    Else
        '(文字ならなにもしない=空白)
    End If
Next i

[実行結果]IsNumeric3

応用例(1文字ずつ調べる)

下記例は、"〇〇町3丁目14番地305-2"に対し、Mid関数を用いて左から1文字ずつ調べてゆき、数値であれば"X"に変換します。

Sub IsNumericSapmple()
'1文字ずつ調べる
    Dim n As Long
    Dim myStr1 As String, myStr2 As String, Letter As String

    myStr1 = "〇〇町3丁目14番地305-2" '元データ
    myStr2 = "" '出力データ 最初は""(空値)にしておく

    For n = 1 To Len(myStr1) 'Len関数は文字列の長さを取得します。変数nは「n文字目」
        Letter = Mid(myStr1, n, 1) 'Mid関数でn番目の文字(1文字)を取出してLetterに代入
        If IsNumeric(Letter) = True Then  'n文字目(Letter)が数値なら
            Letter = "X"                  '"X"に変える
        End If
        myStr2 = myStr2 & Letter    '上で処理したものをmyStr2に連結する
    Next n

    Debug.Print myStr2 'イミディエイトウインドウに出力

End Sub

[実行結果]IsNumeric4


イベント

2017/12/05(火)
Design Thinking Square