LoginSignup
1
4

More than 5 years have passed since last update.

全角の英数字やカタカナを半角文字に変換するExcel VBA

Last updated at Posted at 2018-06-08

これは何?

全角の英数記号やカタカナが入り混じった文字列を半角文字に変換するための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

参考ページ

1
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4