10/31/2019

Excel。「ふりがな」がない!できれば、「カタカナ」でなく「ひらがな」で表示したい

Excel。「ふりがな」がない!できれば、「カタカナ」でなく「ひらがな」で表示したい

<Excel VBA>

テキストファイルのデータなどをExcelにインポートや貼り付けをします。

簡単に、Excelで使えるようになります。

このデータのふりがなをB列に表示したいので、PHONETIC関数を使って、表示してみます。

ところが、うまくいきません。

原因は、PHONETIC関数は、文字入力情報を表示する関数なので、今回のように、外部からデータをコピーしたりインポートした場合、文字入力情報が欠落しているので、PHONETIC関数では、ふりがなを表示することができません。

では、根性を入れて、ふりがな情報を入力しかないのでしょうか?

そこで、Excel VBAを使ってみると、解決できるかもしれません。

【フリガナを設定する】

入力文字情報がないなら、作るしかありません。
そこで、次の構文を作って実行してみましょう。

Sub ふりがな()
    Range("a1").CurrentRegion.Offset(1, 0).SetPhonetic
End Sub

Range("a1").CurrentRegion.Offset(1, 0) は、A1から隣接するデータを表とします。さらに、Offsetで、見出し行分を除きます。

SetPhonetメソッドは、フリガナを作成するメソッドです。たったこれだけで、入力文字情報を追加することができます。

ただし、注意として、100%正確に設定してくれるわけではありません。

丹羽長秀公は、「ながひで」なのに「ちょうひで」になっています。

ただ、一から全部入力するよりも楽だと思います。

【B列に表示する】

まだ、入力文字情報を設定しただけにすぎませんので、B列に表示する構文を追加していきましょう。

Sub ふりがな()
    Dim i As Integer
    Range("a1").CurrentRegion.Offset(1, 0).SetPhonetic
   
    For i = 2 To 9
        Range("b" & i) = Range("a" & i).Phonetic.Text
    Next
End Sub

Dim i As Integer は、For~To~Nextを使って繰り返し処理をするので、変数を用意します。

Range("b" & i) = Range("a" & i).Phonetic.Text
Phonetic.Text は、フリガナ情報を表示させる、プロパティです。

ふりがなを表示したいB列に、A列の入力文字情報を表示することができます。


【”ひらがな”にする】

この状態でもOKなのですが、見出しは、”ふりがな”と「ひらがな」で書かれていますので、「カタカナ」で表示するのではなく、「ひらがな」に変更していきます。

たった、一行追加する修正です。
Sub ふりがな()
    Dim i As Integer
    Range("a1").CurrentRegion.Offset(1, 0).SetPhonetic
   
    For i = 2 To 9
        Range("b" & i) = Range("a" & i).Phonetic.Text
        Range("b" & i).Value = StrConv(Range("b" & i).Value, vbHiragana)
    Next
End Sub

Range("b" & i).Value = StrConv(Range("b" & i).Value, vbHiragana)

StrConvは、StrConv関数というExcel VBA専用の関数が用意されています。
これを使用することで文字種を変更することができます。

今回は、カタカナをひらがなに変更したいので、「vbHiragana」という設定値を使うだけです。
また、設定値には、色々用意されています。

実行して確認してみましょう。

このように、「ひらがな」に変更することができました。

入力文字情報がない場合、自力で入力するよりも、Excel VBAで構文を作る方が、たぶん楽でないかと思います。

また、PHONETIC関数を直接作っていないので、フリガナがおかしい場合は、数式を壊すことなく、直接フリガナを修正できるのもメリットだと思います。

なお、今回は、SetPhoneticメソッドを説明する都合、構文を分けましたが、For~To~Nextに含めるのがスマートかと思います。

Sub ふりがな()
    Dim i As Integer
     
    For i = 2 To 9
        Range("a" & i).SetPhonetic
        Range("b" & i) = Range("a" & i).Phonetic.Text
        Range("b" & i).Value = StrConv(Range("b" & i).Value, vbHiragana)
    Next
End Sub