はじめに
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
何をしているかわかるほうが安心感がありますね。