HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > 正規表現を利用して半角カナを全角に変換する(RegExpオブジェクト)

正規表現を利用して半角カナを全角に変換する(RegExpオブジェクト)|Excel VBA

文字列操作関連のテクニック

正規表現を利用して半角カナを全角に変換する(RegExpオブジェクト)

(Excel 2002/2003/2007/2010/2013/2016)

正規表現を使って、アクティブシートに入力された半角カナを全角に変換します。

Sub Sample()
    Dim c As Range
    Dim myStr As String
    Dim Match As Object, Matches As Object
    
    With CreateObject("VBScript.RegExp")
        .Pattern = "[\uFF61-\uFF9F]+"  '---(1)
        .Global = True
        
        For Each c In ActiveSheet.UsedRange
            myStr = c.Value
            If Len(myStr) > 0 Then
                Set Matches = .Execute(myStr)
                
                'マッチしたすべての文字列を置換
                For Each Match In Matches
                    myStr = Replace(myStr, Match.Value, _
                            StrConv(Match.Value, vbWide))  '---(2)
                Next Match
                
                c.Value = myStr
            End If
        Next c
    End With
End Sub

正規表現を使うにはRegExpオブジェクトを使用します。
Executeメソッドを実行し、パターン文字列で指定した正規表現とマッチする部分を検索します。
GlobalプロパティにTrueを設定すると、文字列全体を対象に検索し、複数マッチを行います。
正規表現のパターン文字列は、Patternプロパティに指定します。

半角カナの範囲をIMEパッドで見てみましょう。赤で囲んだところが半角カナの範囲です。

(1) ではUnicodeのコードでパターン文字列を指定しています。
[文字リスト] に続けて「+」を指定しているので、半角カナの文字が1つ以上続いたときにマッチします。

.Pattern = "[。-゚]+"

のようにしても同じ結果が得られますが、この場合は文字コードで指定した方が明確でしょう。

このマクロは、(1)と(2)のコードを変えることで、さまざまな置換処理に応用可能です。
たとえば、(1)のパターン文字列を次のようにして、

 .Pattern = "[0-9]+"  

(2)の置換処理を次のようにすると、

 myStr = Replace(myStr, Match.Value, _
                StrConv(Match.Value, vbNarrow))

全角数字から半角数字に置換できます。