連載
» 2014年06月23日 18時00分 UPDATE

VBA/マクロ便利Tips:Excelで漢字のふりがなをカタカナとひらがなで別セルに一覧表示する

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、漢字のふりがなを全て取得するGetPhoneticメソッドを使い、StrConvメソッドと組み合わせて、ひらがなとカタカナのふりがなを別セルに表示させる方法などを紹介する。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprize(64ビット)+Excel 2013


 Tips「Excelのセル内にある漢字のふりがなを一括表示&編集」でSetPhoneticメソッドを使い、漢字のふりがなを表示した。その際に、「山田歩」の読みに「ヤマダ フ」とふりがなが振られているのを、「ヤマダ アユム」というふりがなに編集する方法も紹介したが、日本語の文字は、文字1つに対して複数の読み方が存在するものがほとんどだ。これを選択できるようにした方が、より業務で役立つだろう。

 それには、今回のTipsをフォーム上で利用して、「読み」の分からない文字のふりがなを、全て表示させて、そこから選択させるといった方法が考えられる。また、前回記事に「他のセルにふりがなを表示させたい」というような感想があったので、その方法も併せて紹介する。

セル内にある漢字のふりがなを全て取得する

 例えば、図1のような「生」と入力されたデータがあったとしよう。

vba_furi2_01.jpg 図1 「生」の入力されたデータ

 この図1の読みを取得してC2の列に表示させてみよう。

セル内にある漢字のふりがなを全て取得するGetPhoneticメソッド

 セル内にある漢字のふりがなを全て取得するにはGetPhoneticメソッドを使う。

GetPhoneticメソッドの書式

{オブジェクト}.GetPhonetic({テキスト})


 {オブジェクト}には対象となるApplicationオブジェクトを指定する。{テキスト}には、ふりがなに変換する文字列を指定する(省略可)。

 VBEを起動してModule1内にリスト1のコードを記述する。

Option Explicit
Sub ふりがなの取得()
  Dim ふりがな As String
  Dim 読み As String
  ふりがな = Application.GetPhonetic(Range("B2").Value)
  Do While ふりがな <> ""
    読み = 読み & ふりがな & vbCrLf
    ふりがな = Application.GetPhonetic
  Loop
    Range("C2").Value = 読み
End Sub
リスト1 ふりがなを取得するコード

 文字列型の「ふりがな」「読み」という変数を宣言する。リスト1の5行目で、「生」と入力されているセル内の文字のふりがなを取得して、変数「ふりがな」に格納する。

 変数「ふりがな」が空っぽではない間、While文で繰り返し処理を行う。繰り返し処理内では、変数「読み」に「生」という漢字のふりがなを取得して格納していく。変数「ふりがな」にApplication.GetPhoneticでふりがなを格納する。C2のセルに「生」という文字のふりがなを全て表示する。

実行結果

 VBEメニューの[実行]→[Sub/ユーザーフォームの実行]と選択して実行すると図2のように表示される

vba_furi2_02.jpg 図2 「生」のふりがなが全て表示された

 なお、図2では、各セル内にExcelのメニューから文字サイズや文字色の書式設定を事前にしておいた。

ひらがなとカタカナのふりがなを別セルに表示

 例えば、図3のような氏名のデータと[ふりがな]ボタンがあったとしよう。

vba_furi2_03.jpg 図3 氏名のデータと[ふりがな]ボタンを配置

 この図3の「氏名」読みを取得して「C2:C5」のセルに「カタカナ読み」、「D2:D5」のセルに「ひらがな読み」表示させてみよう。各セルの書式はExcelのメニューから事前に行っている。

 書式は下記のようになる。

書式

{オブジェクト}.GetPhonetic(Cells(行番号,列番号).Value)


 オブジェクトには対象となるApplicationオブジェクトを指定する。GetPhoneticメソッドに氏名の入力されている「行番号」と「列番号」に該当する値を指定する。

StrConvメソッドでカタカナをひらがなに変換して表示

 VBEを起動してModule1内にリスト2のコードを記述する。

Option Explicit
Sub ふりがなを振る()
  Range("B2:B5").Select
  Dim i As Long
  For i = Selection(1).Row To Selection(Selection.Count).Row
    Dim 列 As Integer
    列 = Selection(1).column
    Cells(i, 列 + 1).Value = Application.GetPhonetic(Cells(i, 列).Value)
  Next
  
  Range("C2:C5").Select
  For i = Selection(1).Row To Selection(Selection.Count).Row
    Dim 列2 As Integer
    列2 = Selection(2).column
    Cells(i, 列2 + 1).Value = StrConv(Cells(i, 列2).Value, vbHiragana)
  Next
End Sub
リスト2 「ふりがなを別セルに表示する」コード

 まずは、氏名の入力されている「B2:B5」セルを選択状態にする。

 次に、Long型の変数「i」を宣言し、変数を「i」で、選択されたセルの最初の行から、最後の行まで繰り返し処理を行う。繰り返し処理の過程で以下の処理を行う。

 Integer型の変数「列」を宣言する。変数「列」に選択された「列」を格納する。この場合は「B2:B5」を選択しているため、「B列」が起点になり「B列」を参照することになる。

 「Cells(行番号,列番号)」の書式で、変数「i」行目の、変数「列」に1を加算した値、つまり「C列」の値に、Application.GetPhoneticメソッドで、変数「i」行目の「B列」の値のふりがなを取得して表示する。

 これで、「C2:C5」のセルに「カタカナ」の読みが表示される。

 次に、この「カタカナ」を「ひらがな」に変換して「D2:D5」のセルに表示してみよう。もともと文字の「読み」はデフォルトでは「カタカナ」で表示される、これを「ひらがな」に変換する方法についてはTips「Excelでカタカナ/ひらがな、半角/全角の文字列変換をするには」を参照してほしい。

 まず「カタカナ」読みの表示された「C2:C5」を選択状態にする。次に、変数を「i」で、選択されたセルの最初の行から、最後の行まで繰り返し処理を行う。繰り返し処理の過程で以下の処理を行う。

 Integer型の変数「列2」を宣言する。変数「列2」に選択された「列」を格納する。この場合は2列目の「C列」になる。3列目が「C列」と思いがちだが、選択範囲は、最初から「B列」を起点としているため、「C列」は2番目の列になる。

 「Cells(行番号,列番号)」の書式で、変数「i」行目の、変数「列2」に1を加算した値、つまり「D列」の値に、StrConv関数を使って、変数「i」行目の「C列」の値を「ふりがな」に変換して表示している。

 Selectionの位置関係は図4のようになる。

vba_furi2_04.jpg 図4 Selectionの位置関係

実行結果

 図5の[ふりがな]ボタンにリスト1のマクロを関連付け、実行すると図5のように表示される。

vba_furi2_05.jpg 図5 漢字の読みが別セルに表示された

まとめ

 ふりがなをルビのように表示するよりも、別セルに表示した方が、データを管理する方法としては適切かもしれない。「読み」で検索する場合、ルビの場合は検索対象にできないが、「読み」を別セルに入力しておく方が、検索が容易にできるだろう。

著者プロフィール

kuniyasu.jpg

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。