文字列中のハイフンが無視してソートされる理由は?

Question 34.2   Previous Next
初めまして宜しくお願いします。
ぜひとも教えて頂きたい事があります。直接VBAとは関係ないかもしれませんが。

それは [エクセル ハイフン] をキーワードに検索してたどり着いたのが、[Question 15.1 値の出入] というページなのですが、Answerの中で [エクセルが判断に困ってこうなる訳ではないですが、その理由は省略します] とあります。

並べ替えの時、文字列中のハイフンだけが文字要素として無視されてしまう理由をご存知のようなので教えて欲しいのです。確かエクセル95まではハイフンはきちんと認識されて、並べ替えに反映されてました。Microsoftに問合せても [仕様です。理由については日本では判りません。] との事でした。(2年前)ACCESSでも同じ事でした。

1-3 が 1-10 より下になるのは理解できますが 12-34 より下になるのは納得できません。他の記号なら 1\10, 1\3, 12\34 の正当な順になります。なぜハイフンだけ...。ロータスの最新版でも正当に並びました。

VBAでもデータベースをソートして、ある条件範囲内のデータを抽出して、リストボックスにセットするという手法をよく使いますが、この時、条件範囲以外のデータが載ってくる場合があります。
約 6 万レコードぐらいのデータを扱いますが、上記を回避するマクロを実行すると、とんでもない時間がかかります。

今後いつか、MS が目覚めてくれると期待するしかないと思っていますが、なぜ、2バージョンにわたってそのような仕様なのか、理由が知りたいのです。逆にどんなメリットがあるのか?
どうか教えてください。長文失礼しました。
Answer   Copyright (C) 2000.11.28 永井善王
すごい熱意ですね。
[エクセル ハイフン] をキーワードに検索してたどり着いた' のが、この「すぐマク」のホームページだったとは。検索エンジンは
Infoseek を使われたとのこと、私も試してみましたが上手にたどり着けませんでした。

Q15.1の検証 この「すぐマク」にも、トップページの
[Search] をクリックすれば検索が可能で、「ハイフン」と入力して[検索]ボタンをクリックすれば、たどり着かれたページを簡単に開くことができます。

そのページの解説に 『その理由は省略します』 と書かれている 『その理由』 を知りたいとのこと。
ごめんなさい。「その理由はよくわかりません」 とでも書くべきでしたし、Excel97以上の場合でした。
Excel95で並べ替えると右図のように、あなたが言われるとおりハイフンはきちんと認識されて、並べ替えられています。
Excelが 95 から 97 にバージョンアップされたときに、たくさんの改良がなされました。通常の表計算機能の改良だけでなく、VBAマクロには大改良が施されました。そのために、いくつかの問題点が発生してしまったのかも知れませんね。私が言うのは変ですが、良くしようとして行動したときの失敗(?)は許してあげましょう。

しかし、あなたが Microsoftに問合せたら「仕様です ※」との事、仕様を変更したなら予め知らせておいてもらわないと。ユーザー(お客さま)が原因究明と対策に苦労することを、もっと認識して欲しいですね。アメリカで言わないとダメなのでしょうか。

MSDNのHPのサポート技術情報で「ハイフンとコーテーションを含む並べ替えが以前のバージョンと異なる」として、2000.7.26付で公開されています。(それによりますとハイフンは、無視されている訳ではないようです)
なお 1999.4.28付で、「五十音順の並べ替え規則について」と題して、濁音・半濁音・促音・拗音・長音符の並び順が公開されています。
並べ替え機能の改良点(Excel95→97)

1. 表計算機能の「並べ替えオプション」の一部変更
1-1. 「大文字と小文字を区別する」のチェックボックスが使用可能になった
1-2. 方法の「五十音順」と「コード順」の選択が廃止され、「ふりがなを使う」と 「使わない」が新設された

2. VBAマクロコードの改良
並べ替え用のメソッドには、従来から 2つあります。SortSpecialメソッドと Sortメソッドで、どちらも改良されました。
くわしいことは、「Excel95:97以上 並べ替え(ソート)の違い」 で見ていただくことにして、要点だけを以下にまとめておきます。

2-1. Sortメソッドの引数に、セルの並べ替え方法を指定する SortMethod が追加され、SortSpecialメソッドと共通化
2-2. SortSpecialメソッドの引数 SortMethod の定数が変わり、Sortメソッドと共通化
2-3. 自動記録されるマクロコードが、Sortメソッドに変わった

これらの改良は、次回バージョンアップで SortSpecialメソッドを廃止または隠し機能化する方針を、暗示しているのではないでしょうか。

「なぜ、そのような仕様なのかの理由」を知りたくて色々分析しましたが、決め手にまでは到達できません。言うまでもなく「どんなメリット」もあるとは思われません。しかし、どうやらこの辺りが鍵のようで、意図した仕様変更ではないような気がしませんか。
もし、そうであるならば当然、「ハイフンを含む文字列の不可解な並べ方」は、いずれ修正されるでしょう。セルに入力されたハイフンに対する Excelの高度な認識技術との関係はあるでしょうが、
Microsoft社の日本向けの仕様は、「東アジアでの並べ替え方法を使って並べる」、Excel95の並べ方こそ相応しいと、多くのユーザーが理解しているでしょう。
当分はユーザー自身が対策せざるを得ませんね。
しかし、「約 6万レコードぐらいのデータ・・・とんでもない時間がかかる」と切実な問題です。これだけ多いデータを扱われる方はプロの方でしょうから、すでに、時短のための色々なテクニックを駆使したマクロを組んでみえるとは思います。念のために次のポイントを参考にして、再チェックしてみてください。

1. COBOL的手法で約 6万回もループさせてはいけません、Excel機能をフル活用し列単位で処理します
2. フィールド数やソート後の処理の都合にもよりますが、できるだけキー部分だけのソートにします
3. コピー貼り付けはクリップボードを経由しないで行います
4. 余計なクリアや書式設定を避けます

 

Excel VBA Macro