VBAで文字列が数字なのかどうか判定するには IsNumeric 関数を利用します。
※詳細はサンプルを含めて後述しますが、IsNumeric関数は曖昧な判定であることに注意が必要です。
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関数では全角数値も数値として判断される。
厳密に半角数値のみを判定したい場合は正規表現などで判定する。