指定された1文字が全角文字かどうかを判定する関数

タイトルのマクロは、以下です。

'********************************************************
'* 関数名: IsFullWidthChar
'* 概要  : 指定された1文字が全角文字かどうかを判定する関数
'*
'* 引数:
'*   char [String] - チェック対象の文字列(先頭1文字のみ使用)
'*
'* 戻り値:
'*   [Boolean] - 全角文字であれば True、半角文字であれば False
'*
'* 解説:
'*   - VBA では文字列は Unicode(UTF-16)で管理されているが、
'*     StrConv 関数と LenB 関数を組み合わせることで、Shift_JIS 上の
'*     バイト数を確認できる。
'*   - 通常、半角文字(英数字・記号など)は 1 バイト、全角文字(日本語・
'*     全角カナなど)は 2 バイトとしてエンコードされる。
'*   - これを利用して、1バイト = 半角、2バイト = 全角と判定している。
'*   - Left(char, 1) で念のため最初の1文字だけ取り出すようにしており、
'*     複数文字入力された場合にも対応できるよう防御的コーディングをしている。
'********************************************************
Function IsFullWidthChar(ByVal char As String) As Boolean
    Dim charCode As Long
    
    ' 入力文字列の先頭1文字を Unicode から Shift_JIS(デフォルトコードページ)に変換し、
    ' そのバイト数を LenB で取得する。
    ' 全角文字であれば通常は 2 バイトになる。
    charCode = LenB(StrConv(Left(char, 1), vbFromUnicode))
    
    ' バイト数が 2 の場合 → 全角とみなす
    If charCode = 2 Then
        IsFullWidthChar = True
    Else
        IsFullWidthChar = False
    End If
End Function

🔍 解説補足

  • StrConv(…, vbFromUnicode)
    Unicode をマシンのデフォルトコードページ(たとえば Shift_JIS)に変換します。
  • LenB
    文字列ではなく「バイト数」を返します。つまり "A"(半角英字)は 1バイト、"あ"(全角ひらがな)は 2バイトと判断できます。

✅ 使用例

Debug.Print IsFullWidthChar("ア")   ' False(半角カタカナ)
Debug.Print IsFullWidthChar("ア")   ' True(全角カタカナ)
Debug.Print IsFullWidthChar("A")    ' False(半角英字)
Debug.Print IsFullWidthChar("A")   ' True(全角英字)

Follow me!