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