ExcelのVBAで漢字の名前にふりがなを振る方法

最近、仕事でVBAをいじってみて、その便利さと面白さに気づきました。ひらがなとカタカナの変換とか、半角と全角の変換とか……。

それはともかく、今回はエクセルのVBAを用いて、自動的に指定のふりがなを振る方法について。

例えば下記のように、A列に苗字と名前を全角スペースで分けた漢字で書いた名前があり、B列にA列の名前のふりがながあるとします(こちらも苗字と下の名前は全角スペースで分けてある)

名前参考サイト:
同姓同名探しと名前ランキング | 姓名、名前、名字、苗字の分布と由来
赤ちゃん名付け実績No.1/無料 赤ちゃん名づけ|キラキラネームランキング

この時、A列の漢字での名前のほうに、B列のふりがなを振っていくにはどうすればいいか。
その前にエクセルには自動でふりがなを振ってくれる機能があるのでやってみました。

最初のほうは一致してますが、最後のほうはダメでした。

というわけで、ふりがなを自動的に振っていく方法を調べてみると、PhoneticCharactersというプロパティに指定のふりがなを代入すると、ふりがながセットされることが分かりました。

以下、実装したコード(プロシージャ名が日本語になってます。初めて見た時は慣れませんでした)。

Sub ふりがなを振る()
    Dim kanjiName As Variant
    Dim kanaName As Variant
    Dim lastRow As Integer
    Dim kanjiLen As Integer
    Dim kanaLen As Integer

    'A列の最後の行を取得    
    '参考:http://www.start-macro.com/55/w/s029.html
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    For Index = 1 To lastRow
        kanjiName = Split(Cells(Index, 1), " ") ' 漢字の名前を全角スペースを区切り文字として分ける
        kanaName = Split(Cells(Index, 2), " ") ' ふりがなの名前を全角スペースを区切り文字として分ける
        kanjiLen = Len(Cells(Index, 1).Value)
        kanaLen = Len(Cells(Index, 2).Value)
        
        ' 苗字にふりがなを振る
        Cells(Index, 1).Characters(1, Len(kanjiName(0))).PhoneticCharacters = kanaName(0)
        ' 下の名前にふりがなを振る
        Cells(Index, 1).Characters(kanjiLen - Len(kanjiName(1)) + 1, Len(kanjiName(1))).PhoneticCharacters = kanaName(1)
        ' ふりがな表示
        Cells(Index, 1).Phonetics.Visible = True
    Next
    
End Sub

以下、実行結果。

ふりがなを振ることができました。

以下、おまけ。

VBAで特定のセルにセットされているふりがなを取得したいことがあると思います。調べてみると、Application.GetPhoneticというメソッドを使うと取得できると分かり、A10セルをアクティブにした後、下記のスクリプトを実行してみました(参考:VBAでふりがなを取得する方法)。

Sub ふりがな取得()
    MsgBox (Application.GetPhonetic(ActiveCell))
End Sub

以下、実行結果

なんと、セットしたふりがなではなく、最初に自動で割り振られたふりがなの値を取得しました。VBAでセルにセットしたふりがなを取得したい場合は、Application.WorksheetFunction.Phoneticを利用しなければいけないようです。

Sub ふりがな取得()
    MsgBox (Application.WorksheetFunction.Phonetic(ActiveCell))
End Sub

以下、実行結果
furigana3

ところで、ふりがなって日本以外の国でもあるのだろうか? 英語版のWikipedia(Furigana – Wikipedia, the free encyclopedia)を見ると、日本独特の文字っぽいけど。HTML5にrubyタグ追加されたけど、日本語以外のサイトでは使われてないのだろうか?

コメント

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