Excel95:97以上 並べ替え(ソート)の違いは?

Question 34.3   Previous Next
Excel97では、並べ替えのキーにハイフンが混ざっていると正しく並ばないようで、例えば 1-3 と 12-34 を昇順で並べ替えると、12-34 の方が小さいと判断されるようです。Excel95では、そんなことはありませんでした。
Excel95から 97にバージョンアップされて「並べ替え」がどう変わったのか、くわしく教えてください。
Answer   Copyright (C) 2000.11.28 永井善王
並べ替えはコマンドバーの[データ]メニューから手で操作する方法と、マクロで行う方法とがあります。さっそく、比較してみましょう。

1.「並べ替え」ダイアログボックスにある「オプション」の一部変更
[ツール]メニュー[並べ替え]とクリックすると表示される「並べ替え」ダイアログボックスの、[オプション]ボタンをクリックで下図のダイアログが表示されます。
Excel95 Excel97以上
Excel95 Optionダイアログ Excel2000 Optionダイアログ
(1)
「大文字と小文字を区別する」のチェックボックスが使用可能になった

(2)
方法の「五十音順」と「コード順」の選択が廃止され、「ふりがなを使う」と 「使わない」が新設された

※ 「方法」の初期値は、Excel95では「五十音順」、97以上では、ふりがな付きデータの場合は「ふりがなを使う」
Excel95での「五十音順」と「コード順」の主な相違を、下図にまとめてみました。
95Sortオプション検証
\記号が混ざったデータの 12\34 が、コード順・昇順の場合だけ先頭になっています。
コード順では、\記号を含む全ての文字のコード順に並びます。
「2」のASCIIコードは 50、「\」は 92 ですから、1\ は 12 より大きくなります。
ハイフンが混ざったデータでは、五十音順とコード順での相違は見られません。

Excel2000での並べ替え結果は下図のとおりです。(同じデータ)
97Sortオプション検証 \記号が混ざったデータでは、「ふりがな」オプションを使う・使わないによる相違は見られません。(ふりがな付データではないので当然ですが)
そして、
Excel95の五十音順と一致しています。
ハイフンが混ざったデータでも、「ふりがな」オプションを使う・使わないによる相違は見られません。困ったことに、
Excel95の並べ方と一致しません。Microsoft社は「この現象は Excelの仕様による動作になります」と、MSDNのHPのサポート技術情報で「ハイフンとコーテーションを含む並べ替えが以前のバージョンと異なる」で説明しています。
2. VBAマクロコードの改良

(1) SortSpecialメソッドの改良点
このメソッドは、
東アジアでの並べ替え方法を使ってセル範囲を並べ替えます。

[構文:Excel95]
object.SortSpecial(
sortMethod, key1, order1, key2, type, order2, key3, order3, header, orderCustom, matchCase, orientation)
[構文:Excel97以上]
expression.SortSpecial(
sortMethod, Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation)

構文を比較しただけでは特に変わりはありませんが、引数
sortMethod の定数が変わりました。この引数はセルを並べ替える方法を指定します。

[SortMethodの定数:Excel95]
五十音順の場合は
xlSyllabary 、コードページ (文字コード) 順の場合は xlCodePage、既定値は xlSyllabary。
[SortMethodの定数:Excel97以上]
使用できる定数は、XlSortMethod クラスの
xlPinYin または <xlStroke。選択またはインストールされている言語の設定 (たとえば、日本語) によって、定数が使用できない場合がある。

(2) Sortメソッドの改良点
このメソッドは、セル範囲または、セルが1つだけ選択されているときはアクティブセル領域を並べ替えます。あるいは、ピボットテーブルレポートを並べ替えます。

[構文:Excel95] ・・ セルの場合(ピボットテーブルの構文は省略)
object.Sort(key1, order1, key2, order2, key3, order3, header, orderCustom, matchCase, orientation)
[構文:Excel97以上]
expression.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation,
sortMethod )

Excel97以上には、引数
sortMethod が追加されました。その定数は、SortSpecialメソッドと同じです。

以上が相違点です。
12-34 の方が小さいと判断される理由は、Microsoft社は「Excelの仕様による動作」と回答していますが、よく理解できません。
関連ページ
「文字列中のハイフンが無視してソートされる理由」は こちら です。

 

Excel VBA Macro