正規表現を利用して半角カナを全角に変換する(RegExpオブジェクト)|Excel VBA |
正規表現を使って、アクティブシートに入力された半角カナを全角に変換します。
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))
全角数字から半角数字に置換できます。