文字列がすべて半角数字かどうか判定する関数

タイトルのサンプルは、以下です。

'==========================================
' 文字列がすべて半角数字かどうか判定する関数
'------------------------------------------
' 【引数】
'   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"FalseA が含まれている
"9 "False半角スペースが入っている

✅ 処理の流れ

  1. 文字列が空なら False
  2. 1文字ずつ取り出す
  3. AscW で Unicode コードを取得
  4. コードが 48~57(0~9)か判定
  5. 範囲外の文字が出た時点で False を返して終了
  6. 最後まで通過すれば 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

Follow me!