今日を乗り切るExcel研究所

Excel に働かされていませんか

Excel で日本語をふりがななしで並べ替えたい

今回の記事では、日本語の並べ替えでふりがなを使わない方法について調べます。

f:id:shego:20200118083758p:plain

日本語の並び順がヘン

日本語データを Excel で並べ替え(ソート)したときに、並び順が微妙に揃わなくて困ったことはありませんか。

たとえば氏名や会社名などを昇順や降順で並べ替えをすると、同じ文字なのに飛びとびになったり、表によって並び位置が食い違っていたりします。 特に漢字のある日本語データ列でおかしなことになるようです。

データ内容の抜け漏れをチェックしたいときなど、これでは使い物になりません。 Excel で日本語の並び順を一定にすることはできないのでしょうか。

並び順のルール

日本語データで並べ替えをしてみると、だいたい五十音順(あいうえお順)になっているようです。 しかし人名など日本語の漢字の読みは一通りではないので、文字だけから順序を判断できないはずです。

そもそも Excel は何を基準に日本語の順序を決めているのでしょうか。

ふりがな優先

実は Excel は、セルの値(文字)だけでなく「ふりがな」を参照しています。

「ふりがな」なんて意識して使ったことありますか。 漢字の上に小さい文字で読み仮名を表示するセルの機能です。

ふりがなはデフォルトで非表示になっています。 ふりがなを確認するには、日本語のテキストセルを選択した状態で、「ホーム」タブの「ふりがなの表示」(AltHGS)を選択します。

f:id:shego:20200113140428p:plain

ふりがなには漢字の読み仮名が設定されています。 Excel はセル値の文字列よりも、このふりがなを優先して、並び順を決めているのです。

では、Excel はどうして漢字の読み仮名を知っているのでしょうか。

なんとExcel は、みなさんがセルに日本語を入力しているときに、密かにそのカナ漢字変換のカナつづりを記録していて、それをふりがなとしてセルに取っておいているのです。

苗字のように、たとえ全く同じ字面の名前でも、読み、つまり入力時のカナが異なれば、ふりがなも異なります。 また、ふりがなは後から編集することもできます。 それらを並べ替えれば、並び位置も異なるという結果になります。 また、ふりがなはセルのコピー&ペーストをしても一緒に付いていくので、影響は入力セルだけではありません。

逆に言うと、手入力でないセルには、ふりがながありません。 たとえば CSV ファイルやデータベースから取り込んだデータ、あるいはテキストエディタなどからのコピー&ペーストしたテキストデータでは、ふりがなを表示してみても空っぽのままです。

そのようなふりがな無しのセルを並べ替えしてみると、文字の並びはきれいに一定の順番に揃っていて、入れ違いなどはありません。 おそらくセルの文字の「文字コード順」(シフトJIS)でソートされているのでしょう。 文字コードとは、文字ごとに割り振られている固有の番号です。

ふりがなの弊害

セルによってふりがながあったり無かったりすること、あっても固定ではないこと。 これが、日本語での並べ替えの順序が揃わない原因です。

たとえば名簿の CSV を Excel に取り込んだとしましょう。 私は名前に誤植を見つけたので、気を利かせてそこだけちょこっと修正しました。 その列を昇順で並べ替えするとどうなるでしょうか。 あら不思議、修正したセルが必ず先頭に来ます。 まるでトランプの手品のようですね。

笑い事ではありません。 ソートしただけで深刻な問題が発生するかもしれないのです。

たとえば、VLOOKUP 関数です。 検索対象として日本語を照合している場合、間違った結果が出力される危険があります。

VLOOKUP 関数の使い方に詳しい人は、処理時間を劇的に改善するために第4引数(検索方法)に TRUE を指定すると思います。 そのとき検索対象のリストは、昇順に並べておく必要があります。

VLOOKUP 関数はふりがななんて知りません。 VLOOKUP が当てにしている並び順は、セルの値、すなわち文字コード順のみです。 リストがふりがなでソートされていると、見当違いな検索結果を出力することになります。

VLOOKUP で日本語を検索値として照合するときには、ふりがなを使わずにリストの並べ替え(ソート)をするよう気を使わなければなりません。

【コラム】VLOOKUP での検索方法は FALSE のままでも速い

今までは、VLOOKUP で処理速度に問題があれば、検索対象の列をソートしたうえで、第4パラメータ(検索方法)に TRUE (近似値検索)を指定するというのが常道でした。

今後はそれも必要なくなるかもしれません。

最近の Excel では、VLOOKUP 関数や MATCH 関数が改善され、検索方法が FALSE (完全一致検索)のときの検索速度が大幅に向上しているからです。

完全一致検索(FALSE)でも、内部的にインデックスを作成・使用するようになりました。 インデックスとは、高速検索のために下準備される索引のようなもので、データベースシステムや全文検索システム等でも使用されている技術です。 データ行数が多ければ多いほど速度の差がひらきます。

これが使えるのは Office 365 や Excel 2019 以降のバージョンの Excel からです。 筆者の PC ではいまだに Excel 2013 なので検証できていませんが、下記記事の検証よると、その効果はてきめんのようです。

もはや速度向上のためだけに検索方法を TRUE に指定する意味はなくなり、ふりがなで無用なトラブルを生み出すことも避けられます。

 



 

ふりがなを使わずに並べ替えをするには

Excelをデータ処理・分析のツールとして扱う仕事の人からすれば、入力データにはない、あずかり知らぬ値によってデータ処理結果が左右されてしまうなんて、たまったものではありません。 事故にもなりかねない恐ろしい機能です。

当然、ふりがなを無効にする設定が Excel にあってしかるべきなのですが、調べてもどこにも見つかりません。

ただ、並べ替え時にふりがなを無視させる方法ならないこともありません。 「並べ替えオプション」で「ふりがなを使わない」を指定することができます。

【手順例】並べ替えにふりがなを使わない

  1. データがあるセルを一つ選択します(後述)
  2. 「並べ替え」ダイアログを開きます
    • セルの右クリックから「並べ替え」⇒「ユーザ設定の並べ替え...」を選択します
  3. 「レベルの削除」ボタンを押して並べ替えリストを空にします
    f:id:shego:20200113144137p:plain
  4. 「オプション...」ボタンを押して「並べ替えオプション」ダイアログを開きます
  5. 「並べ替えオプション」の「方法」で「ふりがなを使わない」オプションを選択し、「OK」ボタンを押します
    f:id:shego:20200113144315p:plain
  6. 「並べ替え」ダイアログでも「OK」ボタンを押して閉じます

以降、この表で並べ替えを実行すると、ふりがなを無視してセルの値の文字列のみでソートされるようになります。

簡単ですが面倒です。 なぜなら、この設定変更の影響範囲がどこまでかを意識しておく必要があるからです。

調べた限り、「並べ替えオプション」の設定対象は「シート」、「オートフィルタ」、「テーブル」ごととなります。

シート上のだだのセルで上記設定をすると、シート全体の並べ替えで有効になります。 つまりシート上のどのセル範囲で並べ替えをしても、ふりがなを使わない状態になります。

表の見出し行にオートフィルタ(「データ」⇒「フィルター」)を追加した場合、それは、シートとは別に、独立した並べ替え設定を持ちます。 フィルタ化したリスト上で上記設定後、オートフィルタのどの列を並べ替えしても、ふりがなを使わない状態となっています。 オートフィルタの付け替えをすると設定はリセットされるので、その都度設定し直す必要があります。

設定したのが青いシマシマのテーブル内のセルだったら、そのテーブル内のフィルタのみが対象となります。 テーブル内のどの列でもふりがなを使わなくなりますが、他のテーブルや新規追加テーブルまでには反映されないので、テーブル個別の設定が必要です。

値のセルではなく、見出しフィルタのプルダウンからも「並べ替えオプション」を開くことができます。 分かり難いことに「色で並べ替え」からたどれます。

ふりがなを削除するには

いっそうのこと、シート上の全セルからふりがなを削除してしまえばすむ話のような気もします。

ところがなぜか、ふりがなを削除する機能さえも Excel には用意されていません。

ふりがなを削除するには、1セルずつ、「ふりがなの編集」でふりがな文字自体を手作業で削除して空にしてやる必要があります。 それはやっていられません。

ふりがなを一括で削除するには、データを Excel 外部に取り出して再度取り込むしかありません。 いったん CSV ファイルにしてもいいですが、テキストエディタなを介してコピー&ペーストしたほうが早いでしょう。

セルデータをいったんテキストエディタにコピーした上で、それをテキストデータとしてシートに貼り付け戻してやります。

【手順例】

  1. ふりがなのあるセル範囲(あるいはシート全体)をコピー(Ctrl+C)し、テキストエディタ(メモ帳など)に貼り付け(Ctrl+V)します
  2. 貼り付けしたテキストデータをテキストエディタから再度コピー(Ctrl+C)し、シート上の元のセル範囲に上書きで貼り付け(Ctrl+V)します
  3. ふりがなが削除された状態になります

ふりがなの表示をすると、ふりがなが空になっています。 うかつにセルを編集すると、そこだけふりがなが追加されてしまうので注意しましょう。

ふりがなを無効にするには

「Excel のオプション」にふりがなを無効にする設定がないのは、おそらく、日本語版だけに追加されている非標準の機能だからでしょう。

ということは、Excel の編集言語の設定を、思い切って英語版に変更してしまえば、ふりがななんて無くなるはずです。

【手順例】編集言語を英語に変更する

  1. Excelの言語設定を開きます
    • 「ファイル」⇒「オプション」⇒「言語」
  2. 「編集言語の選択」で「英語」を規定の言語に設定します
    • 「英語(米国)」を選択し、「規定に設定」ボタンを押します
    • 「編集言語の選択」に「英語」がリストアップされていない場合、「他言語の編集言語の追加」で「英語(米国)」を追加します。
  3. 「OK」ボタンを押します
  4. Excelを再起動します

f:id:shego:20200113163720p:plain

上記設定以降、ふりがなは使えなくなります。

編集言語を英語にしても、リボンやダイアログといったUIは日本語のままで、使い勝手は変わりませんが、「ふりがな」は、リボン自体から削除され、表示も編集もできません。

f:id:shego:20200118100238p:plain

ただ言語変更の影響はふりがなだけではないので、慎重に判断したほうがいいでしょう。

たとえば規定のフォントが「Calibri」という英語向けのフォントになり、日付の書式も変わります。 辞書や文章校正など他の日本語サポート機能も無効になります。

今後の Excel 生活でどこまで割り切れるかは、使ってみないとわかりません。 設定は何時でも日本語に戻せます。

 



 

ふりがなを無視・削除するマクロ

本記事内容に関連したマクロをいくつか作成しました。

  • 並べ替えでふりがなを使わない」マクロ
  • ふりがなの削除_選択セル範囲」マクロ
  • ふりがなの全削除_選択シート」マクロ

並べ替えで「ふりがなを使わない」を設定するマクロ

並べ替えでふりがなを使わない」マクロを実行すると、以降、そのシート上の並べ替えでふりがなが使われなくなります。

手作業で設定すれば、シート、オートフィル、テーブル等で個別に設定する必要がああるところですが、本マクロを使うと、シート全体でセル範囲やオートフィルタのほか、シート上にあるすべてのテーブルを一括で「並べ替えオプション」の「ふりがなを使わない」が設定されます。

オートフィルタを付け替えたり、テーブルを新規追加したときには、再度本マクロを実行する必要があります。

また、複数シートでの一括処理も可能です。 対象シートを複数選択してから実行してください。

ふりがなを削除するマクロ

ふりがなを一括削除するマクロを2つ用意しました。

ふりがなの削除_選択セル範囲」マクロは選択されたセル範囲のみでふりがなを削除します。

ふりがなの全削除_選択シート」マクロはシート内の全てのふりがなを削除します。 また、複数シートが選択状態になっていれば、全ての選択シートでふりがな一括削除します。

Option Explicit

Sub 並べ替えでふりがなを使わない()
    Dim sht As Object
    For Each sht In ActiveWindow.SelectedSheets
        If TypeName(sht) = "Worksheet" Then
            sht.Sort.SortMethod = xlStroke

            If sht.AutoFilterMode Then
                sht.AutoFilter.Sort.SortMethod = xlStroke
            End If

            Dim tbl As ListObject
            For Each tbl In sht.ListObjects
                tbl.Sort.SortMethod = xlStroke
            Next
        End If
    Next
End Sub

Sub ふりがなの削除_選択セル範囲()
    If TypeName(Selection) <> "Range" Then Beep: Exit Sub
    Selection.Phonetics.Delete
End Sub

Sub ふりがなの全削除_選択シート()
    Dim sht As Object
    For Each sht In ActiveWindow.SelectedSheets
        If TypeName(sht) = "Worksheet" Then
            sht.UsedRange.Phonetics.Delete
        End If
    Next
End Sub

【使い方】

  1. 標準モジュールを追加し、上記VBAプログラムをコピー&ペーストします
  2. 処理対象のシートを開き、マクロを実行します。
    • 「ふりがな削除_選択セル範囲」マクロでは、対象セル範囲をあらかじめ選択状態にしておきます。

【注意】 本マクロの実行後は「元に戻す(Undo)」ことができません。削除されたふりがなは失われ、復活させることはできませんので、あらかじめバックアップをとるなど、細心の注意をもって実行してください。

まとめ

Excel の並べ替え機能(オートフィルタやテーブルを含む)は、日本語のソートに「ふりがな」を使っています。 ふりがなには、日本語入力時の読み仮名が使用されます。

ふりがなによる並べ替えは確かに便利な状況もありますが、Excelでデータ処理する場合、本来データにない値によって不測の事態を招く可能性があります。 (ちなみに絞り込みや重複判定ではふりがなを参照することはないようです)

本記事ではふりがなを使わずに並べ替えをする方法を検討しましたが、その作業自体、明らかに「余計な仕事」です。

BI やデータ分析等の業務で Excel を使う場合、手入力自体を禁止するという運用にするとか、Excel を英語版にするなどの何らかの手立てが必要でしょう。

Excelには、ふりがなの使用・不使用を選択できる設定をぜひ提供していただきたいところです。

本記事の内容は Excel 2013 と Office 365(Excel 2019相当)で検証しました。