指定された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(全角英字)