全角カタカナを半角に変換する関数
タイトルのマクロは、以下です。
'********************************************************
'* 全角カタカナを半角に変換する関数
'* 引数:
'* 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
詳細なコメントの追加:
- 関数の概要:
- この関数は、全角カタカナを半角カタカナに変換する目的の関数です。引数として渡された文字列内の全角カタカナを全て半角に変換し、その結果を返します。
- 正規表現の設定:
- 正規表現(RegExp)を使って、文字列内の「全角カタカナ」を検索します。
reg.Pattern = "[ァ-ー]+"
:これで、全角カタカナ(「ァ」から「ー」まで)の部分を一括で検索します。reg.Global = True
:これで、文字列全体を対象に検索し、複数の一致部分を取得するようにします。
- 正規表現(RegExp)を使って、文字列内の「全角カタカナ」を検索します。
- 検索と変換:
reg.Execute(a_sZen)
:引数として渡された文字列(a_sZen
)に対して、正規表現を実行し、一致する部分を取得します。oMatch.Value
:検索結果から一致したカタカナ部分を取得します。StrConv(oMatch.Value, vbNarrow)
:StrConv
関数を使用して、全角カタカナを半角に変換します。
- 置換処理:
- 変換後の文字列(
a_sHan
)内で、一致した部分を変換後の半角カタカナ(sConv
)で置換します。Replace
関数を使って、元の文字列から変換された部分を新しい値に置き換えています。
- 変換後の文字列(
- 最終的な返り値:
- 最後に、変換が完了した文字列(
a_sHan
)を関数の戻り値として返します。
- 最後に、変換が完了した文字列(
実行例:
Sub TestConvertZenToHan()
Dim result As String
result = CnvZenKanaToHan("亜細亜アイウエオあいう") ' 「アイウエオ」のみを半角カタカナに変換
MsgBox result ' 変換結果を表示、「亜細亜アイウエオあいう」
End Sub
このように、CnvZenKanaToHan
関数を使用して、全角カタカナを簡単に半角に変換することができます。