Excelでカタカナのみ全角半角変換するマクロ(改良版)

この記事は約4分で読めます。

全角カタカナを半角にするマクロを先日作りました。
この記事で紹介したマクロは、固定列の処理でした。(A列のカタカナを変換して、B列に書き込む)

Excelでカタカナのみ全角半角変換するマクロ
半角カナの存在はなくなりません。システム開発の現場でバリバリ使われています。Excel関数では「半角カナのみ変換」という関数は存在しないので、マクロでの変換処理が必要です。


しかし実際にExcelでドキュメント作成をしていると、「選択したセルだけ変換したい」という場面が多いです。
そのため、ソースコードを少し改良しました。

カタカナを、全角から半角に変換するマクロ

Sub 全角カナ⇒半角カナ変換()
    '
    ' JIS関数は、アルファベットや記号も全角にしてしまうので、
    ' 半角カナ限定で、半角⇔全角 の変換ができるマクロ
    '
    Dim c As Range          '選択範囲のループ用
   
    Dim myStr As String
    Dim Match As Object, Matches As Object
   
    If TypeName(Selection) = "Range" Then

        With CreateObject("VBScript.RegExp")
            .Pattern = "[\u30A1-\u30FF]+"           '全角カナを文字コードで指定
            .Global = True
       
            For Each c In Selection
                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, vbNarrow))     '全角⇒半角
                    Next Match
                    'セルに反映
                    c.Value = myStr
                End If
            Next c
        End With
    End If
End Sub

カタカナを、半角から全角に変換するマクロ

Sub 半角カナ⇒全角カナ変換()
    '
    ' JIS関数は、アルファベットや記号も全角にしてしまうので、
    ' 半角カナ限定で、半角⇔全角 の変換ができるマクロ
    '
    Dim c As Range          '選択範囲のループ用
   
    Dim myStr As String
    Dim Match As Object, Matches As Object
   
    If TypeName(Selection) = "Range" Then

        With CreateObject("VBScript.RegExp")
            .Pattern = "[\uFF61-\uFF9F]+"           '半角カナを文字コードで指定
            .Global = True
       
            For Each c In Selection
                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))       '半角⇒全角
                    Next Match
                    'セルに反映
                    c.Value = myStr
                End If
            Next c
        End With
    End If
End Sub

このマクロを、リボン登録すれば簡単に実行できます。

Excelのリボンに無いコマンドを、マクロ登録する方法
Excelで頻繁に使うメニューなのにリボンに存在しなくて面倒に思う事はありませんか? 必要な処理はマクロ登録して、リボンから1クリックで使えるようにしましょう。使用頻度の高い「文字配置を選択範囲内で中央揃え」「文字サイズを縮小して全体を表示する」のサンプルコード付きです。

ぜひお試しください。

タイトルとURLをコピーしました