自動的にふりがなを設定する


セルに日本語を入力すると、そのセルには「ふりがな情報」が記録されます。ユーザーは気がつきませんが、Excelが裏でこっそり記録しているのです。ウソだと思ったら、セルに日本語入力する操作をマクロ記録してみてください。ちなみに、次のようなコードが記録されます。

Sub Macro1()
    Selection.FormulaR1C1 = "田中"
    Selection.Characters(1, 2).PhoneticCharacters = "タナカ"
End Sub

PhoneticCharactersプロパティがセルのふりがな情報です。

ふりがなを表示しないユーザーにとっては興味の薄いことかもしれません。でも、このふりがなは思わぬところで影響を及ぼすのです。たとえば並べ替え。Excelでは日本語を並べ替えるとき、標準で「ふりがな情報を使って並べ替える」という仕様になっています。その方が自然ですからね。でも、セルにふりがな情報が記録されているかどうかまでは気にしてくれません。それに気づかないで並べ替えを実行すると、同じ「田中」が分散してしまう結果になります。

ここまで読んで矛盾を感じる方は正解です。だって、セルのふりがな情報は自動的に記録されるんでしょ?……と。その通りです。ただし、ふりがな情報が記録されるのは、セルに入力したときだけです。入力ではない方法では、ふりがな情報は記録されません。たとえば貼り付けです。エディタやブラウザなど、他のアプリでテキストデータをコピーしてワークシートに貼り付けると、これはセルに入力したわけではありませんからふりがな情報は記録されません。ふりがな情報は押されたキーボードを監視しているのですから、当然と言えば当然です。

という前置きはこのへんにして。ふりがな情報が記録されていないセルには、後から手動でふりがなを設定できます。このとき、いちいちキーボードから読みを入力する必要はありません。ほとんど知られていない機能ですが、実に簡単な操作で自動的にふりがなを設定できるのです。

下図は[書式]-[ふりがな]-[表示/非表示]でふりがなを表示している状態です。セルB2の「田中」は他のソフトから貼り付けたのでふりがなが設定されていません。

[F2]キーを押してセルを編集状態にします。

ShiftキーとAltキーを押しながら上矢印キーを押します。

このキー操作は、セルのふりがな表示領域にカーソルを移動するショートカットキーです。実行すると自動的にふりがなが設定されます。

Enterキーを押してふりがなを確定します。

もう一度Enterキーを押して、セルの編集を終了します。

この操作では、セルに入力されている漢字から読みを判断して、Excelが自動的にふりがなを登録してくれます。Excelって賢いですね。でも、日本語には同音異義語がありますから、ときには異なる読みが登録されるかもしれません。そんなときは次のようにしてふりがなを選択します。

今度は「亨」という文字にふりがなを設定します。ちなみに私の名前は「とおる」と読みます。

[F2]キーで編集状態にします。

ShiftキーとAltキーを押しながら上矢印キーを押します。「リョウ」というふりがなが設定されてしまいました。

「リョウ」部分を右クリックして表示されるショートカットメニューから[ふりがなリストから選択]を実行します。

「亨」の読みがリストで表示されます。「トオル」をクリックします。

Enterキーを押してふりがなを確定します。

もう一度Enterキーを押して、セルの編集を終了します。

【2021年6月 追記】

実は、少し前から気づいていたんですが、上記で解説している「すべての読みをリストで表示する」という機能は、コマンド自体は残っているのですが、期待する動作はしないようです。

この「すべての読みを取得する」というのは、VBAからも実行できたのですが、そちらも機能しなくなっています。Microsoftから正式なアナウンスもなく、気づいたら、いつの頃からか使えなくなっていました。まぁ、ある意味でしかたないかなと感じています。せっかくですから、ちょっと仕組み的なお話をしましょう。

本コンテンツの画像を見て、誰もがすぐ気づくと思いますが、これはExcel 2003 + Windows XPの環境で書いた内容です。その時代は、間違いなく機能しました。はっきりと覚えていませんが、それよりも数年前、当時まだ笹塚にあったマイクロソフト本社の休憩室で、Microsoft IME(以下MS-IME)の開発責任者であるSさんを紹介されました。そのとき、Excelのこの「自動的にふりがなをふる機能」について質問しました。「これ、MS-IME側で調べてるんですか?」と。だって、どう考えても、そんな機能を表計算ソフトであるExcelに実装するとは考えにくいですから。そしたら、Sさんから「ああ、あれはMS-IMEで調べています」と詳しい仕組みを教えてもらいました。Excelで自動的にふりがなを設定するとき、まずExcelは調べる漢字をMS-IMEに送ります。MS-IMEは、ユーザーには分からないような状態で、すべての漢字に対する標準的な読みをデータとして内包しています。MS-IMEは受け取った漢字を、そのデータと照合して、標準的な読みをExcelに伝えると。Excelは、MS-IMEから受け取った読みを、セルのふりがなとして設定する。そんな流れだそうです。つまり、Excelの「自動的にふりがなを設定する」は、MS-IMEありきの機能だということです。ちなみに、だからMac版Excelでは機能しません。しかし、言うまでもありませんが、MS-IMEはExcelのために開発されているのではありません。長い歴史の中で、さらに良い日本語変換を目指して、MS-IME自体も大きく進化・改良され続けています。そうしたMS-IMEの進化において、このExcelとの連携がネックになったとき「Excelさんには悪いけど、この機能はもう対応しないことにするわ~」と判断されても無理はありません。想像ですけど、おそらくそうしたことが原因ではないかと。

以下は蛇足です。本追記を書いているのは2021年の6月なのですが、最近よく次のような質問を受けます。「VBAでネットの情報を取得しているが、MicrosoftはInternet Explorer(IE)をやめてEdgeを標準ブラウザにするようだ。EdgeはVBAから操作できないのだが、どうしたらEdgeで今までのようにネットの情報を取得できるのか?」みたいな。答えは「もう、できません」です。いや、正確に言えば方法はあります。しかし、そのためには、新しく別のものをPCにインストールしなければなりません。今までのように、Excelさえあれば、どのPCでも可能という話ではなくなりました。さらに言えば、その方法は超絶難しいです。どう考えても、ネットのコードを意味も分からずコピペしているレベルでは、まったく歯が立たないでしょう。コードを丸ごとコピーして動作させるのですら難しいと思います。「ええ~なんで、そんなことになるの~」と不満を感じている方。よく考えてください。Excelは表計算ソフトです。そしてVBAは、Excelを操作するために実装されているマクロ言語です。VBAは、何でもできる魔法の道具ではありません。Excelのセルやワークシートを操作することを目的として作られています。もちろん、VBAのポテンシャルとして、Excel以外のアプリケーションをオートメーションで操作することも可能でした。しかしそれは、あくまで支流の部分です。オートメーションで、Excelではない外部のアプリケーションを操作すると言うことは、その"外部のアプリケーション"が変化したら、もうそれはアウト!ということです。「VBAでネットの情報を取得する」というのは、そうした危ういリスクの上に成り立っている操作です。多くの方は、その認識を持っていないと、四半世紀にわたって膨大な質問を受けてきた私は感じています。

今となっては、かなり昔になりましたが。2007年にExcel 2007が登場したときにも似たようなことがありました。VBAには、ファイルを検索するFileSearchオブジェクトがありました。これを使うと、複数のサブフォルダ内でファイルやフォルダの存在を調べることができました。しかし、Excel 2007のVBAから、このFileSearchオブジェクトが廃止されました。当時のネットでは大騒ぎだったことを、よく覚えています。実をいうと、このFileSearchオブジェクトによる検索というのは、裏でWindowsの機能を利用していました。表計算ソフトであるExcelに、そんな大技を仕込むのは現実的ではありません。Windowsの仕組みを利用する方が便利です。しかし、Excel 2007と同時に登場したWindows Vistaでは、この検索機能が変更されてVBAから利用できなくなりました。Excel 2007とWindows Vistaは、ほぼ同時に発売されましたので、いずれは使えなくなるFileSearchオブジェクトを、早いタイミングで廃止にしてきたのでしょう。じゃ、どーするかと言えば、FSOを使うなど代替案を検討しなければなりません。このへんの詳しいことはVBAのTips「ファイルを検索する」に書いてありますので、興味のある方はご覧ください。

本稿で解説している"ふりがな"機能は、MS-IMEを利用しています。VBAでネットの情報を取得するなんてExcelだけでは不可能ですから、外部のアプリケーションとしてIEが必要です。VBAの機能として提供されていたFileSearchオブジェクトであっても、実はWindowsの仕組みを呼び出しているだけであり、そのWindowsが変化したら使えなくなりました。このようにExcelには、別の何かを利用することで実現している機能や仕組みが意外とあります。そうした機能や仕組みは、Excel側の事情とは関係なく、別の何かのアプリケーション側の事情で、使えなくなるケースもあるということです。すべてのユーザーに、そこを見極めろというのは無理でしょうけど、少なくともそういう可能性があると。Excelは単体で動いているのではないという認識だけは、ほんの少しでも持っていていただきたいです。