カタカナ表示の名前をひらがなに正しく変換する

カタカナ表示の名前をひら 実践Excel・Word

はじめに

3月下旬になると新1年生を迎える準備を始めます。

新1年生の名前は教育委員会のデータベースからダウンロードできます。が、名前のふりがなはいつもカタカナで表示されています。

1年生の机、下駄箱などには、名前を書いたラベルを貼るのですが、この名札はひらがなで書かなくてはいけません。

名簿の名前は漢字の隣にカタカナで読みが表示されています。ExcelのPHONETIC関数を使って漢字をかなに変換するのですが、この方法ではうまくいきません。人の名前の読み方は千差万別なので、漢字をひらがなに変換しても、読みがあっているかわかりません。

姓はともかく、最近の子供の名前は凝った名前が多くて、正しく読むことはほとんどできません。というか、なんて読むんだろうと悩む名前が多いです。

結局、正確に読みを表示しているカタカナを直接ひらがなに変換するしかありません。その方法を紹介します。

カタカナからひらがなへの変換方法

名簿の構成

4列目に漢字の名前、5列目にカタカナの読みが表示されています。

5列目に空白の列を追加してそこにカタカナからひらがなに変換した結果を表示します。

VBAで変換する方法

Excelのワークシート関数ではカタカナからひらがなに変換できないので、VBAを使うことにします。

プログラムは次のようになります。

Sub ConvertKatakanaToHiragana()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim katakana As String
    Dim hiragana As String
    
    ' 対象のシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適切なものに変更してください
    
    ' 最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
    
    ' データを変換
    For i = 2 To lastRow
        katakana = ws.Cells(i, "E").Value
        hiragana = StrConv(katakana, vbHiragana) ' カタカナを平仮名に変換
        ws.Cells(i, "F").Value = hiragana
    Next i
End Sub

このコードをVBAのエディタに貼り付けます。

VBAエディタの起動方法

Excelのリボンに開発タグが表示してあればあればクリックします。もし表示がないときは、「Alt」と「F11」キーを同時押しします。すると次の画面が表示されます。

赤丸じるしの挿入をクリックします。

赤丸じるしの挿入をクリックすると、メニューが表示されるので、「標準モジュール」をクリックします。

赤丸じるしの挿入をクリックすると標準モジュールの画面が表示されます。

ここにコードを貼り付けます。

コードを貼り付けます。

コードを貼り付けたらコードのなかを修正修正します。

途中、児童と書いてあるシート名をご自身のシート名に変更してください。

また、カタカナはE列、とひらがなはF列になていますが、これも実際に合わせて変更してください。

マクロプログラムの表示が出たら、該当するプログラム名をクリクしてください。

プログラムが実行されて、下図のようにF列にひらがな表示に変更されます。

VBAはとっつきにくいかもしれませんが、コードをコピーするだけですから、ぜひためsてみてください。

別のプログラム

ここまで紹介したプログラムは、変換の仕組みがわかりにくいです。

hiragana = StrConv(katakana, vbHiragana) ' カタカナを平仮名に変換

ここで変換をしているのですが、一目では何をしている中わかりませんん。

そこで、Unicode上の法則を利用してた解決策を紹介します。
カタカナとひらがなはUnicode上で連続して配置されているので、一定の値(96)を加えるか減らすことで変換することができます。以下のVBAコードは、カタカナをひらがなに変換する一例です。

Function KatakanaToHiragana(ByVal Text As String) As String
    Dim i As Integer
    Dim result As String
    result = ""
    
    For i = 1 To Len(Text)
        Dim c As String
        c = Mid(Text, i, 1)
        Dim code As Integer
        code = AscW(c)
        
        'カタカナのUnicode範囲は12449から12534まで
        'ひらがなのUnicode範囲は12353から12438まで
        'カタカナからひらがなへは96を引く
        If code >= 12449 And code <= 12534 Then
            result = result & ChrW(code - 96)
        Else
            result = result & c
        End If
    Next i
    
    KatakanaToHiragana = result
End Function

何をしているかわかるほうが安心感がありますね。