【VBAリファレンス】Excelの並べ替えを極める:ふりがな無視で同じ文字順にデータを整列させるプロの技

スポンサーリンク

概要

Excelの標準機能である「並べ替え」を使用すると、通常は「ふりがな(読み)」の情報に基づいてデータが整列されます。しかし、実務の現場ではこの挙動が仇となるケースが少なくありません。例えば、顧客リストや商品コードにおいて、読みではなく「文字コード順(Unicode/Shift-JIS順)」や「特定の文字の並び」を基準にしたい場合、標準機能だけでは期待通りの結果が得られないのです。本記事では、Excelの並べ替えの裏側にある「ふりがな情報」の仕組みを理解し、VBAを活用して「ふりがなを無視した純粋な文字コード順」でソートするためのプロフェッショナルな手法を徹底解説します。

詳細解説:なぜ並べ替えが意図通りにならないのか

Excelの並べ替え機能が「ふりがな」を優先する理由は、日本語の特性にあります。通常、日本語は漢字が含まれるため、読み方が一つに定まりません。Excelはセルに入力されたデータの「ふりがな情報(Phonetic)」を内部的に保持しており、昇順・降順の指定時にはこのふりがなを参照します。

この仕様は、住所録や名簿作成時には非常に便利ですが、システムから出力された「ID」や「型番」、あるいは「英数字と漢字が混在するコード」を扱う際には、思わぬ順序の乱れを引き起こします。具体的には、同じ「ア」という文字であっても、ふりがな情報が「アー」「アア」と異なっていれば、文字の見た目以上に並び順が優先されます。これを強制的に「文字そのもの」の順序で並べるには、セルからふりがな情報を一旦排除するか、VBAを用いて文字コード(AscW関数)を基準にしたソートアルゴリズムを実装する必要があります。

文字コード順でソートするためのアプローチ

Excel VBAには、RangeオブジェクトのSortメソッドがありますが、これを用いるとどうしてもふりがなの影響を避けるのが困難です。そこで、より確実な手法として、以下の2つのステップを推奨します。

1. 作業列を作成し、各セルの文字コードを数値化して抽出する。
2. その数値を作業列に書き出し、作業列を基準に並べ替える。

もし、VBAで配列操作を用いて高速に処理したい場合は、バブルソートやクイックソートといったアルゴリズムを自作し、メモリ上で並べ替えを行った後にシートへ書き戻すのが最も効率的です。

サンプルコード:VBAによる純粋な文字順ソート

以下のコードは、指定した範囲内のデータを、ふりがなを完全に無視し、文字コードの昇順で並べ替えるプロシージャです。


Sub SortByCharacterCode()
    Dim ws As Worksheet
    Dim rng As Range
    Dim dataArr As Variant
    Dim i As Long, j As Long
    Dim temp As String
    
    ' 対象シートと範囲を設定
    Set ws = ActiveSheet
    Set rng = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
    
    ' データを配列に取り込む
    dataArr = rng.Value
    
    ' バブルソートによる文字コード順の並べ替え
    ' ※データ量が多い場合はクイックソートを推奨
    For i = LBound(dataArr, 1) To UBound(dataArr, 1) - 1
        For j = i + 1 To UBound(dataArr, 1)
            ' 文字コードを比較
            If AscW(dataArr(i, 1)) > AscW(dataArr(j, 1)) Then
                ' 値を入れ替え
                temp = dataArr(i, 1)
                dataArr(i, 1) = dataArr(j, 1)
                dataArr(j, 1) = temp
            End If
        Next j
    Next i
    
    ' 並べ替えたデータをシートに戻す
    rng.Value = dataArr
    
    MsgBox "ふりがなを無視した文字コード順の並べ替えが完了しました。", vbInformation
End Sub

実務アドバイス:現場での運用の注意点

この手法を実務に導入する際、いくつか注意すべき点があります。まず、AscW関数は「先頭の1文字」のコードを返します。もし「あ」「あい」「あう」のように、頭文字が同じで後続の文字が異なるデータを厳密に並べ替えたい場合は、コードを改良し、文字列全体を比較対象にする必要があります。

また、大規模なデータベースを扱う場合、上記のようなVBAでのループ処理は非常に時間がかかります。数万件規模のデータを扱う際は、以下のテクニックを検討してください。

・作業列に「=UNICODE(A2)」といった関数を入力し、その列をキーにして標準の並べ替え機能を使う。これならVBAのループよりも圧倒的に高速です。
・「データ」タブの「並べ替え」オプションにある「ふりがなを使う」のチェックを外す機能は、残念ながらすべてのExcelバージョンで完璧に機能するわけではありません。そのため、実務では「作業列+標準機能」の組み合わせが最もバグが少なく、運用保守性が高い選択肢となります。

まとめ

Excelが標準で備える「ふりがな並べ替え」は、日本語文書においては非常に強力なツールですが、コード表やシステムデータのような「純粋な文字比較」が求められる現場では、時に意図しない挙動を生みます。

1. ふりがな情報はセル内部に付随する隠れた属性であると認識すること。
2. 純粋な文字順にしたい場合は、作業列を用いて文字コードを数値化するのが最も効率的。
3. VBAを使用する場合は、大規模データに対してはループ処理を避け、配列や標準機能の呼び出しを組み合わせること。

これらの知識を組み合わせることで、Excelの並べ替えに対する「なぜか上手くいかない」という悩みから解放されるはずです。VBAは単なる自動化ツールではありません。Excelという「読み取り優先」の環境を、あなた自身が「データ構造優先」の環境へと制御するための強力なエンジンのようなものです。ぜひ、今回の手法を日々の業務に取り入れ、データ管理の精度を一段階引き上げてください。

タイトルとURLをコピーしました