【Excel VBA】数字かどうか判定する方法

VBAで文字列が数字なのかどうか判定するには IsNumeric 関数を利用します。

※詳細はサンプルを含めて後述しますが、IsNumeric関数は曖昧な判定であることに注意が必要です。

 

sponsor link

IsNumeric関数の構文

(構文)

IsNumeric(判定する値)

引数は数値かどうか判定したい文字列1つのみです。文字でも数値でも構いません。

(戻り値)

引数として与えられた文字列が数値と判断される場合True

数値以外と判断される場合False が返却されます。

 

下記では実際の使用例を掲載しています。

5パターンのデータに対して IsNumeric 関数で数値かどうかチェックを行った結果です。

 

VBA IsNumericを利用した数値の判定例

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.ActiveSheet
   '123の場合(半角数字)
    If IsNumeric(ws.Cells(1, 1).Value) Then
        ws.Cells(1, 2).Value = "数値です"
    End If
   '123の場合(全角数字
    If IsNumeric(ws.Cells(2, 1).Value) Then
        ws.Cells(2, 2).Value = "数値です"
    End If
   '123.5の場合(小数点を含む全角数字)
    If IsNumeric(ws.Cells(3, 1).Value) Then
        ws.Cells(3, 2).Value = "数値です"
    End If
   'A123の場合(アルファベットを含む数値)
    If IsNumeric(ws.Cells(4, 1).Value) Then
        ws.Cells(4, 2).Value = "数値です"
    End If
   'ひらがなの場合
    If IsNumeric(ws.Cells(5, 1).Value) Then
        ws.Cells(5, 2).Value = "数値です"
    End If
End Sub

 

A列のデータが数値と判定される場合は、隣のB列に「数値です」と出力されるようになっています。実行結果を見て頂くとわかりますが、全角の数字も数値として判定されています。

アルファベットやひらがなは想定通り、数値ではないと判断されています。

 

このことから、厳密に半角数値のみを数値として判定したい場合は IsNumeric 関数だけでは判定出来ない点に注意しなければなりません。

 

【応用編】独自関数を使った数値の判定

IsNumeric関数では全角数字も数値として判定されます。

これを厳密に半角数字のみを数値として判定する為に、正規表現を使った独自の判定処理の作成例をご紹介します。

 

数値チェック用の関数名を CheckNumeric としています。

下記のサンプルは、先ほど利用したコードの IsNumeric関数 と 独自関数のCheckNumeric を置き換えた内容になります。

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.ActiveSheet
   '123の場合(半角数字)
    If CheckNumeric(ws.Cells(1, 1).Value) Then
        ws.Cells(1, 2).Value = "数値です"
    End If
   '123の場合(全角数字)
    If CheckNumeric(ws.Cells(2, 1).Value) Then
        ws.Cells(2, 2).Value = "数値です"
    End If
   '123.5の場合(小数点を含む全角数字)
    If CheckNumeric(ws.Cells(3, 1).Value) Then
        ws.Cells(3, 2).Value = "数値です"
    End If
   'A123の場合(アルファベットを含む数値)
    If CheckNumeric(ws.Cells(4, 1).Value) Then
        ws.Cells(4, 2).Value = "数値です"
    End If
   'ひらがなの場合
    If CheckNumeric(ws.Cells(5, 1).Value) Then
        ws.Cells(5, 2).Value = "数値です"
    End If
End Sub


'-------------------------------------------------------------------
' Summary. 数字判定.
'-------------------------------------------------------------------
Function CheckNumeric(ByVal str As String)
    Dim i As Long
    Dim result As Boolean: result = False
    
    If Len(str) > 0 Then
        result = True
        For i = 1 To Len(str)
            If Not Mid(str, i, 1) Like "[0-9]" Then
                result = False
                Exit For
            End If
        Next i
    End If

    CheckNumeric = result
End Function

 

上記サンプルコードの実行結果は下記の通り、半角数字のみが数値として判定される結果となります。

 

まとめ

VBAで数値かどうか判定するには IsNumeric 関数を使う。

IsNumeric関数では全角数値も数値として判断される。

厳密に半角数値のみを判定したい場合は正規表現などで判定する。

タイトルとURLをコピーしました