'==========================================
' 文字列がすべて半角数字かどうか判定する関数
'------------------------------------------
' 【引数】
' txt : 判定したい文字列
'
' 【戻り値】
' True … すべて半角数字(0~9)の場合
' False … 半角数字以外が1文字でも含まれる場合
'==========================================
Function IsHankakuNumber(ByVal txt As String) As Boolean
Dim i As Long ' 文字位置を走査するループ変数
Dim ch As String ' 取り出した1文字を格納する変数
Dim code As Long ' 文字コード(Unicodeコードポイント)
'------------------------------------------
' 空文字は「半角数字ではない」と判断(必要に応じて変更可能)
'------------------------------------------
If Len(txt) = 0 Then
IsHankakuNumber = False
Exit Function
End If
'------------------------------------------
' 入力文字列を1文字ずつチェック
'------------------------------------------
For i = 1 To Len(txt)
' 1文字取り出し
ch = Mid(txt, i, 1)
' Unicode の文字コードを取得
code = AscW(ch)
'------------------------------------------
' 半角数字のコード範囲は「48(0)~ 57(9)」
' → この範囲外なら半角数字ではない
'------------------------------------------
If code < 48 Or code > 57 Then
IsHankakuNumber = False ' 半角数字ではなかった
Exit Function ' 即終了
End If
Next i
' すべて半角数字だった場合のみ True
IsHankakuNumber = True
End Function
✅ 関数の動作説明
■ この関数が判断するもの
「0~9 の半角数字のみ」で構成されているかどうかを判断します。
■ 例:True になる
入力
結果
理由
"12345"
True
全て半角数字
"0"
True
半角数字
■ 例:False になる
入力
結果
理由
""
False
空文字は対象外
"123"
False
全角数字
"12A34"
False
A が含まれている
"9 "
False
半角スペースが入っている
✅ 処理の流れ
文字列が空なら False
1文字ずつ取り出す
AscW で Unicode コードを取得
コードが 48~57(0~9)か判定
範囲外の文字が出た時点で False を返して終了
最後まで通過すれば True
以下、使用例です。
Sub TestNum()
Debug.Print IsHankakuNumber("123456") ' True
Debug.Print IsHankakuNumber("123") ' False(全角数字)
Debug.Print IsHankakuNumber("12A3") ' False(英字)
Debug.Print IsHankakuNumber("12 34") ' False(スペース)
Debug.Print IsHankakuNumber("") ' False
End Sub