【Excel Acsess Word VBA】文字列の半角判定、全角判定、全角半角混在判定関数(Is関数イメージ)

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

Excel、Access、WordなどのVBA(Visual Basic for Applications)環境で、指定した文字列がすべて半角か、すべて全角か、あるいは全角と半角が混在しているかを判定するためのユーザー定義関数(Is関数風)の実装例です。

文字列のバイト数(LenB)と文字数(Len)を比較する手法を利用することで、簡易かつ高速に全角・半角の判定を行うことができます。

1. この記事でできること

VBAにおいて、入力された文字列が以下の状態であるかを真偽値(True/False)で判定できます。

  • すべて半角文字で構成されているか(IsHankaku)
  • すべて全角文字で構成されているか(IsZenKaku)
  • 全角と半角の文字が混在しているか(IsZenHankaku)

2. 前提条件

Windows環境のExcel、Access、Word等のVBAエディタ(VBE)で使用可能です。StrConv 関数の vbFromUnicode を利用しているため、マルチバイト文字(Shift-JIS等)の特性を利用した判定となります。

3. 判定関数の完全なコード

標準モジュールに以下のコードを貼り付けて使用してください。

Option Explicit

' すべて半角文字の場合に True を返す
Public Function IsHankaku(ByVal str As String) As Boolean
    IsHankaku = False
    Dim ANSIstr As String
    ANSIstr = StrConv(str, vbFromUnicode)
    Dim H As Long: H = Len(str)
    Dim Z As Long: Z = LenB(ANSIstr)
    If H = Z Then IsHankaku = True
End Function

' すべて全角文字の場合に True を返す
Public Function IsZenKaku(ByVal str As String) As Boolean
    IsZenKaku = False
    Dim ANSIstr As String
    ANSIstr = StrConv(str, vbFromUnicode)
    Dim H As Long: H = Len(str)
    Dim Z As Long: Z = LenB(ANSIstr)
    If (H * 2) = Z Then IsZenKaku = True
End Function

' 全角と半角が混在している場合に True を返す
Public Function IsZenHankaku(ByVal str As String) As Boolean
    IsZenHankaku = False
    Dim ANSIstr As String
    ANSIstr = StrConv(str, vbFromUnicode)
    Dim H As Long: H = Len(str)
    Dim Z As Long: Z = LenB(ANSIstr)
    If Not ((H = Z) Or ((H * 2) = Z)) Then IsZenHankaku = True
End Function

4. 実行手順とテスト用プロシージャ

作成した関数の動作を確認するためのテスト用プロシージャです。イミディエイトウィンドウに結果が出力されます。

Sub テスト_文字列判定()
    Debug.Print "--- IsZenKaku のテスト ---"
    Debug.Print """aaaa"" (半角のみ): "; IsZenKaku("aaaa")             ' False
    Debug.Print """あああ"" (全角のみ): "; IsZenKaku("あああ")           ' True
    Debug.Print """あああa"" (混在): "; IsZenKaku("あああa")         ' False
    Debug.Print """11"" (半角数字): "; IsZenKaku("11")                 ' False
    Debug.Print """11"" (全角数字): "; IsZenKaku("11")               ' True
    
    Debug.Print "--- IsHankaku のテスト ---"
    Debug.Print """aaaa"" (半角のみ): "; IsHankaku("aaaa")             ' True
    Debug.Print """あああ"" (全角のみ): "; IsHankaku("あああ")           ' False
    Debug.Print """あああa"" (混在): "; IsHankaku("あああa")         ' False
    Debug.Print """11"" (半角数字): "; IsHankaku("11")                 ' True
    Debug.Print """11"" (全角数字): "; IsHankaku("11")               ' False
    
    Debug.Print "--- IsZenHankaku のテスト ---"
    Debug.Print """aaa"" (半角のみ): "; IsZenHankaku("aaa")             ' False
    Debug.Print """あああ"" (全角のみ): "; IsZenHankaku("あああ")       ' False
    Debug.Print """あああa"" (混在): "; IsZenHankaku("あああa")       ' True
    Debug.Print """111"" (混在): "; IsZenHankaku("111")           ' True
End Sub

5. コードの要点と仕組み

  • Len(str): 文字列の「文字数」を返します。
  • LenB(StrConv(str, vbFromUnicode)): 文字列をANSI(Shift-JIS等)のバイト列に変換した際の「バイト数」を取得します。
  • 半角文字は1文字あたり1バイト、全角文字は1文字あたり2バイトとして計算されるため、文字数とバイト数を比較することで全角・半角・混在を判별できます。

6. 注意事項・制約

環境の文字コード設定や特殊文字(一部のサロゲートペア文字や絵文字など)が含まれる場合、想定通りにバイト数がカウントされない場合があります。厳密な制御が必要な場合は正規表現(VBScript.RegExp)の併用をご検討ください。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 変更リンク切れとなっていた外部サイトへの参照を見直し、Microsoft公式ドキュメント等の一次情報に基づいた解説へ刷新しました。
  • 追加読者がコピー&ペーストしてすぐに動作検証できるよう、完全なコードブロックとテスト用プロシージャを追加しました。
  • 追加前提条件や関数の使い方、期待される結果の解説を追加しました。

文書情報

記事タイトル
【Excel Acsess Word VBA】文字列の半角判定、全角判定、全角半角混在判定関数(Is関数イメージ)
作成日
更新日
Source URL
https://papanda925.com/?p=540

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました