これは何?
全角の英数記号やカタカナが入り混じった文字列を半角文字に変換するためのExcel VBAです。
正確には、指定した要素は半角、それ以外は全角に変換するので、「英数字は半角、カタカナは全角」や「数字は全角、英字とカタカナは半角」というような変換も可能です。
ググって出てきた先人の知恵を参考にして、自分が使いやすいように書いてみました。
プロシージャ
agsStr
に変換したい文字列、mode
に小文字に変換する要素を指定します。
Zen2Han
Function Zen2Han(ByVal argStr, mode) As String
'''
'argStrで与えた文字列に対して、modeで指定した要素を半角文字に置換するプロシージャ
'ALL = 7, ASCII = 1, DIGIT = 2, KANA = 4,
'''
Dim tmpStr As Object
Dim RE As Object
Set RE = CreateObject("VBScript.RegExp")
'全て半角文字へ置換
argStr = StrConv(argStr, vbNarrow)
'半角カタカタを全角に置換
If mode = 1 Or mode = 2 Or mode = 3 Then
RE.Pattern = "[。-゚]+"
RE.Global = True
For Each tmpStr In RE.Execute(argStr)
argStr = Replace(argStr, tmpStr, StrConv(tmpStr, vbWide), , 1)
Next
End If
'半角英字記号を全角に置換
If mode = 2 Or mode = 4 Or mode = 6 Then
RE.Pattern = "[a-zA-Z -/:-@\[-\`\{-\~]+"
RE.Global = True
For Each tmpStr In RE.Execute(argStr)
argStr = Replace(argStr, tmpStr, StrConv(tmpStr, vbWide), , 1)
Next
End If
'半角数字を全角に置換
If mode = 1 Or mode = 4 Or mode = 5 Then
RE.Pattern = "[0-9]+"
RE.Global = True
For Each tmpStr In RE.Execute(argStr)
argStr = Replace(argStr, tmpStr, StrConv(tmpStr, vbWide), , 1)
Next
End If
Set RE = Nothing
Zen2Han = argStr
End Function
使い方
以下のように使用します。
(追記:記事を書き終えてからmode 1~6 以外は、全て半角化になってしまうことに気づいたけど、気にしないことにします)
Test
Sub Test()
Dim tmpStr As String
tmpStr = "1235 Abc アイウヴ =~%!"
Debug.Print Zen2Han(tmpStr, 1)
'1235 Abc アイウヴ =~%!
Debug.Print Zen2Han(tmpStr, 2)
'1235 Abc アイウヴ =~%!
Debug.Print Zen2Han(tmpStr, 3)
'1235 Abc アイウヴ =~%!
Debug.Print Zen2Han(tmpStr, 4)
'1235 Abc アイウヴ =~%!
Debug.Print Zen2Han(tmpStr, 5)
'1235 Abc アイウヴ =~%!
Debug.Print Zen2Han(tmpStr, 6)
'1235 Abc アイウヴ =~%!
Debug.Print Zen2Han(tmpStr, 7)
'1235 Abc アイウヴ =~%!
End Sub
参考ページ