Excelでカタカナのみ全角半角変換するマクロ

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

半角カナは昔のコンピュータの名残です。

ホストコンピューターが主流だった頃は、1バイト文字(数字やアルファベット)しか表記できず、そこに各メーカーが半角カタカナも使えるようにしていました。
文字コードもJIS・EUC・EBCDIC等が使われており、EBCDICの半角カタカナはフランス語と一部同じコードになるというエンジニア泣かせの存在でした。

そんな半角カナですが、久しぶりにオンプレ開発の現場に戻ってみたら『バリバリ現役』でした。
業務システムで、画面に情報をギッシリ詰め込みたいという要望のようです。

  • 画面は半角カナ
  • DBのテーブル名は全角カナなのに、カラム名は半角カナ
  • 設計書の地の文は全角カナ、画面・DBは各ルールに従う

画面は百歩譲るとして、DBのカラム名は論理名なのだから全角半角にこだわる意味ないと思うんですけどね。
設計書レビュワーも間違いを探すのが大変なレベルです(笑)。


Excel関数として、全角・半角変換は次の2つの関数があります。

  1. ASC:2バイト文字を1バイトにする
  2. JIS:1バイト文字を2バイトにする

対象は、英字・数字・カタカナ・記号です。
半角・全角、両方存在する文字を変換してくれます。

が、今回の私のように「半角カタカナのみ」変換したい時には使えません

住所コード(ユーザ)
住所コード(ユーザ)

としたい場合、半角括弧はそのまま変えたくないのです。
(当然ですがExcelのフリガナ機能を使う方法は駄目です。漢字もフリガナになってしまうため)


そこで、マクロで処理します。
下のコードをマクロに登録して、Alt + F8キー で起動するだけです。

A) 半角⇒全角 を有効にしてあります。
B) 全角⇒半角 はコメントアウト(無効)にしているので、ご都合に合わせて有効/無効を切り替えてください。

あと、処理対象(行・列)の部分も自由に変えてください。

Sub 半角カナのみ全角に変換()
    '
    ' JIS関数は、アルファベットや記号も全角にしてしまうので、
    ' 半角カナ限定で、半角⇔全角 の変換ができるマクロ
    '

    Dim myStr As String
    Dim Match As Object, Matches As Object

    Dim i As Long
    Dim LastRow As Long

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row    '最終行ゲット

    Dim hanKana As Integer
    Dim zenKana As Integer
    Dim fisName As Integer

    hanKana = 1             '半角カナはA列(読む)
    zenKana = 2             '全角カナはB列(書込む)
    fisName = 3             '物理名はC列(ブランクと0でなければ処理する)

    Dim sRow As Long
    sRow = 2                '処理開始行

    With CreateObject("VBScript.RegExp")
        .Pattern = "[\uFF61-\uFF9F]+"           'A) 半角カナを文字コードで指定
'       .Pattern = "[\u30A0-\u30FF]+"           'B) 全角カナを文字コードで指定
        .Global = True

        For i = sRow To LastRow
            myStr = Cells(i, hanKana)
            If Len(myStr) > 0 And Cells(i, fisName) <> 0 Then
                Set Matches = .Execute(myStr)

                'マッチしたすべての文字列を置換
                For Each Match In Matches
                    myStr = Replace(myStr, Match.Value, _
                            StrConv(Match.Value, vbWide))       'A) 半角⇒全角
'                    myStr = Replace(myStr, Match.Value, _
'                            StrConv(Match.Value, vbNarrow))    'B) 全角⇒半角
                Next Match

                Cells(i, zenKana) = myStr
            Else
                Cells(i, zenKana) = 0
            End If
        Next i

    End With

    MsgBox "処理が終わりました"

End Sub

今回はA列B列で固定にしていますが、Selection(選択したセルを対象)で処理すれば、自由度が上がると思います。


2020/01/10追記
選択したセルに対して、カタカナの全角半角変換を行うマクロを作りました。

Excelでカタカナのみ全角半角変換するマクロ(改良版)
Excelには「カタカナのみ」を全角半角変換する関数が存在しません。Excel関数では数字・記号も一緒に全角半角変換されてしまいます。そこで今回は、選択したセルに対しての「カタカナのみ」全角半角変換が可能なマクロを紹介します。
タイトルとURLをコピーしました