全角カタカナを半角に変換する関数

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

'********************************************************
'* 全角カタカナを半角に変換する関数
'* 引数:
'*   a_sZen: 変換前の文字列(全角カタカナを含む可能性あり)
'* 戻り値:
'*   変換後の文字列(全角カタカナが半角カタカナに変換された結果)
'* 必要な参照設定:
'*   - 「Microsoft VBScript Regular Expressions 5.5」ライブラリを参照設定に追加する必要があります。
'*     これにより、正規表現の RegExp クラスが利用可能になります。
'*
'* 処理の流れ:
'*   1. 文字列中の全角カタカナを検出し、それらを半角カタカナに変換します。
'*   2. 正規表現で連続する全角カタカナを検索し、それに一致した部分を `StrConv` 関数を使って半角に変換します。
'*   3. 変換された文字列を最終的に返します。
'*
'* 参考URL:https://vbabeginner.net/convert-full-width-katakana-of-character-string-to-half-width/
'********************************************************
Function CnvZenKanaToHan(ByVal a_sZen As String) As String
    Dim a_sHan As String          ' 変換後の文字列を格納する変数
    Dim reg As New RegExp        ' 正規表現のオブジェクト(RegExp)を新規作成
    Dim oMatches As MatchCollection  ' 正規表現の検索結果(一致した部分のコレクション)
    Dim oMatch As Match          ' 検索結果の一つ一つのオブジェクト(一致した部分)
    Dim i As Long                ' ループカウンタ
    Dim iCount As Long           ' 検索結果の件数(一致した部分の数)
    Dim sConv As String          ' 半角カタカナに変換された部分の文字列

    ' 正規表現パターンを指定: 連続した全角カタカナを検索するパターン
    reg.Pattern = "[ァ-ー]+"  ' 「ァ」から「ー」までのカタカナの範囲に一致
    reg.Global = True          ' 文字列全体を対象に検索する設定(最初から最後まで全ての一致を取得)

    ' 引数文字列(a_sZen)から全角カタカナを検索
    Set oMatches = reg.Execute(a_sZen)

    ' 検索一致件数を取得
    iCount = oMatches.Count

    ' 変換後の文字列は、変換前の文字列(a_sZen)で初期化
    a_sHan = a_sZen

    ' 検索一致件数分だけループを実行して変換を行う
    For i = 0 To iCount - 1
        ' 一致した全角カタカナ部分を取得
        Set oMatch = oMatches.Item(i)

        ' 一致した全角カタカナを半角カタカナに変換
        sConv = StrConv(oMatch.Value, vbNarrow)

        ' 半角に変換した部分(sConv)を元の文字列(a_sHan)の一致部分と置換
        a_sHan = Replace(a_sHan, oMatch.Value, sConv, 1, 1)
    Next

    ' 変換後の文字列を返す
    CnvZenKanaToHan = a_sHan
End Function

詳細なコメントの追加:

  1. 関数の概要
    • この関数は、全角カタカナを半角カタカナに変換する目的の関数です。引数として渡された文字列内の全角カタカナを全て半角に変換し、その結果を返します。
  2. 正規表現の設定
    • 正規表現(RegExp)を使って、文字列内の「全角カタカナ」を検索します。
      • reg.Pattern = "[ァ-ー]+":これで、全角カタカナ(「ァ」から「ー」まで)の部分を一括で検索します。
      • reg.Global = True:これで、文字列全体を対象に検索し、複数の一致部分を取得するようにします。
  3. 検索と変換
    • reg.Execute(a_sZen):引数として渡された文字列(a_sZen)に対して、正規表現を実行し、一致する部分を取得します。
    • oMatch.Value:検索結果から一致したカタカナ部分を取得します。
    • StrConv(oMatch.Value, vbNarrow)StrConv関数を使用して、全角カタカナを半角に変換します。
  4. 置換処理
    • 変換後の文字列(a_sHan)内で、一致した部分を変換後の半角カタカナ(sConv)で置換します。Replace関数を使って、元の文字列から変換された部分を新しい値に置き換えています。
  5. 最終的な返り値
    • 最後に、変換が完了した文字列(a_sHan)を関数の戻り値として返します。

実行例:

Sub TestConvertZenToHan()
    Dim result As String
    result = CnvZenKanaToHan("亜細亜アイウエオあいう") ' 「アイウエオ」のみを半角カタカナに変換
    MsgBox result  ' 変換結果を表示、「亜細亜アイウエオあいう」
End Sub

このように、CnvZenKanaToHan 関数を使用して、全角カタカナを簡単に半角に変換することができます。

Follow me!