’半角の存在確認 Dim 対象文字列 As String 対象文字列 = "ナンバー32" If LenB(対象文字列) > LenB(StrConv(対象文字列, vbFromUnicode)) Then Debug.Print "含まれています" Else Debug.Print "含まれていません" End If
文字列に半角が含まれているかを調べるには、文字列のバイト数で比較を行う必要があります
この文字列のバイト数に関する注意点が以下の記事にありますので確認しておいてください
コード解説
Dim 対象文字列 As String 対象文字列 = "ナンバー32"
ここでは、引数の文字列が後で複数回でてくるので変数に代入しています
If LenB(対象文字列) > LenB(StrConv(対象文字列, vbFromUnicode)) Then
ここで判定処理を行っています、If分岐を使用しています
LenB(対象文字列)
左辺では、LenB関数によりバイト数を取得しています
VBAでは文字は2バイトを返します
LenB(StrConv(対象文字列, vbFromUnicode))
右辺では、文字形式を変換して半角を1バイトに表現してバイト数を取得しています
この2つの比較により、LenB関数単体より少なければ含まれていることが分かります
If LenB(対象文字列) > LenB(StrConv(対象文字列, vbFromUnicode)) Then Debug.Print "含まれています" Else Debug.Print "含まれていません" End If
→→→ 含まれています
例にある「ナンバー32」という文字列に対して、コードを実行すると「含まれています」が返されます
「32」が半角のため、バイト数が一致しないからです
これは1バイトと2バイト文字という表現に対して有効な処理です
3バイト以上の文字があった場合は別の対応が必要になります
ただ、この対応はかなり稀でありどこまでのバイトを対応するかも難点です