[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『全角記号文字列並べ替えの規則は?』(MaxM)
三角形や四角形の全角記号(△▲□■)で始まる文字列が入っている セルの列をキーにして並べ替えをすると、想定通りに並ばないのです が、どういう規則があるのかご存知の方、いらっしゃらないでしょうか? 例えば、「△あ」「▲い」「△う」「△え」「▲お」という順で文字列が 入っているとすると、文字コード的には「△」<「▲」のはずですので、 想定される昇順並べ替え結果は、 「△あ」→「△う」→「△え」→「▲い」→「▲お」ですが、実際には 「△あ」→「▲い」→「△う」→「△え」→「▲お」 のままとなります。 「先頭の全角記号は無視されるのか?」と思い、検証のために2文字目 を全て同一文字(「あ」)にして試みると・・・ 「▲あ」→「▲あ」→「△あ」→「△あ」→「△あ」と並び替えられました。 どうやら全く無視というわけでもなさそうです。でも、文字コードの順 になっているようでもありません。 次に全角記号だけで並べ替えたらどうなるのかやってみました。 □→■→△→▲→▽→▼ というコード順に並べた後、並べ替えを実行すると、 ■→□→▲→△→▼→▽ となりました。 黒抜き記号と白抜き記号のコードは反転しているみたいですが、それがなぜ かもわかりません? 正しい並べ替え規則はどうなっているのでしょう?
確信はありませんが、この場合はUniCode順ではないかと推測します。 A B C D E [1] ■ 8739 -32351 9632 [2] □ 8738 -32352 9633 [3] ▲ 8741 -32349 9650 [4] △ 8740 -32350 9651 [5] ▼ 8743 -32347 9660 [6] ▽ 8742 -32348 9661 CODE関数 DBCS UniCode Sub test_20090918() Rem A列先頭文字の文字列コードを調べる Dim c As Range For Each c In Range("A1").CurrentRegion c.Offset(0, 2).Formula = "=code(A" & c.Row & ")" 'CODE関数による文字コード c.Offset(0, 3).Value = Asc(c.Value)'DBCS文字セットの文字コード c.Offset(0, 4).Value = AscW(c.Value)'Unicode文字セットの文字コード Next c End Sub (みやほりん)(-_∂)b
う〜 参考に たぶんですが、 「A] □あ → しろ しかく あ ■あ → くろ しかく あ ▲い → くろ さんかく い ■い → くろ しかく い △あ → しろ さんかく あ ▲い → くろ さんかく い △い → しろ さんかく い ▲あ → くろ さんかく あ
降順に並べ替えると
■あ → くろ しかく あ □あ → しろ しかく あ ■い → くろ しかく い ▲あ → くろ さんかく あ △あ → しろ さんかく あ ▲い → くろ さんかく い ▲い → くろ さんかく い △い → しろ さんかく い ではないでしょか???
(AA)
みやほりんさん:
なるほど、ユニコード順でしたか。
これで記号どうしの並びの謎はとけました。
ありがとうございます。
あとは最大の謎「2文字目と組み合わされた場合の並び順」が分かれば良いのですが・・・
AAさん:
▲あ → くろ さんかく あ
△あ → しろ さんかく あ
▲い → くろ さんかく い
ここの並び順が、なぜ 「△あ」が「▲い」よりも上に来てしまうのか?
よく分からないんです・・・
(MaxM)
あいうえおじゅんだから? みやほりんさんの説明のほうが、説得力ありますね。 私の場合は並び返してひらがな順になってるな〜としかわかりません。^^;;
_あとは文書の前に「半スペース」入れると一行あけなくても大丈夫です。 ^^ここね。
(AA)
参考に
http://ash.jp/code/unitbl21.htm
(AA)
AAさん、回答ありがとうございます。
「あいうえおじゅんだから」としても、2文字目以降がない場合は 「くろさんかく」と「しろさんかく」が区別されて並ぶのに、2文字 目があると「くろさんかく」と「しろさんかく」がまるで無視されて いるというところが良く分からないんですよ…。
いろいろ探してみたのですが、どこにもそのような説明は見当たらないのです。…
「半スペース」の件、ご教授ありがとうございました。ここは初心者なので助かります。
(MaxM)
難しいですね^^;;;; 私の頭では回答しきれないです。
全ての文字にはコードがあるようで その順番になりませんか?
MaxMさんは思い通りの結果えたいですか? でしたらみやほりんさんのマクロでは解決できますか? もしくは行追加して作業列を作る。
どうしても理由をしりたいですか? 違う方の回答をお待ちください
私は \(ToT")/です。
あ!そいえば漢字で並べ変えると同じ現象おこりますね。 複数読み方があるのでパソコンが勝手に判断した呼びがな順になってしまいますね。 同じ現象かな (? ?)
(AA)
>あ!そいえば漢字で並べ変えると同じ現象おこりますね。 >複数読み方があるのでパソコンが勝手に判断した呼びがな順になってしまいますね。 >同じ現象かな (? ?) 並べ替えのオプションで「ふりがなを使わない」にチェックを入れると漢字はコード順になりますが記号は変わらず、 (そもそも記号にはふりがながつかない)なので違うかと。
>パソコンが勝手に判断した呼びがな順 ではなく入力時の変換元が使われます。 ですのでたとえば「月」を「げつ」と入力して変換した場合と「つき」と入力して変換して並べ替えた場合、別々に並べ替えられます。 (独覚)
私は、AAさんの考え方とほぼ同じです。
記号は文字ではない。 ●も◎も同じ丸印である。従って、並べ替えでは同一視する。 ただ、他に区別化するものがないなら、その括りの中で並べる順序と云うものはある。
そうじゃないと、下の並び順は理解不能になってしまう。
1 ■ 1 ▲あ 2 □ 2 ▲あ 3 ■■■ 3 △あ 4 ■■□ 4 △い 5 □□□ 5 ▲う 6 ▲ 6 △え 7 △ 7 ▲お 8 ▲▲▲ 9 △△△ 10 ○ 11 ◎ 12 ● 13 ○○○ 14 ◎◎◎ 15 ●●●
記号をどう取り扱うかは、メーカーの「決め」の問題の様な気がします。
『ユニコード順』で納得されたようですが、それなら、 以下のデータが昇順でも降順でも変化がないことに説明がつかないと思います。
1 ヽあ 2 ヾあ 3 ゝあ 4 ゞあ
(半平太) 2009/09/19 15:07
ヽヾゝゞ々は繰り返し記号ということで通常の記号とは別扱いの可能性もあるかと。 検索時にも「大文字と小文字を区別する」「半角と全角を区別する」の両方にチェックを入れないと同じものとして扱われてしまいますし。 (独覚)
>ヽヾゝゞ々は繰り返し記号ということで通常の記号とは別扱いの可能性もあるかと。
書き込みの趣旨を測りかねますが、その記号は私もその通り「別扱い」だと思っております。
ただ、それも『記号をどう取り扱うかは、メーカーの「決め」の問題の様な気がします。』と云う 見解の中に入っています。
また、『ユニコード順』では説明できないかもしれない事例として挙げております。
(半平太) 2009/09/19 22:23
気になったので、もう一回調べてみました。
ズバリではないですが、ヘルプに考え方が載っていました。
[日本語の並べ替え順序について](抜粋) 2.濁音、半濁音、促音、拗音は下記のように清音と見なして配列されます。
濁音 : ばら => はら 半濁音: ぱん => はん
3.同じ音の場合には濁音、半濁音は清音の後に置かれます。 配列の優先順位は文頭から文末に向けて低くなります。
しけん→しげん→じけん
<上の考え方が記号にも適用されていると思います。> 「丸印」や「三角印」の最初の記号が、清音とみなされる。 「黒か」「白か」「2重か」の違いが、濁点、半濁点などの違いと同様の形で扱われる。
(半平太) 2009/09/26 08:30
みなさんいろいろ調べていただいてありがとうございます。
濁音、半濁音の考え方で説明がつきそうですね。 つまり、▲が「ば」、△が「ぱ」と考えると、その清音は「は」で、
1 △あ → はあ 2 ▲い → はい 3 △う → はう
ということになる。 ただし、一文字だけの比較だと、
1 ▲ → ば 2 △ → ぱ
ということになる。
つまりこれは半平太さんが最初に書かれた説明と同じですね。 ↓ >●も◎も同じ丸印である。従って、並べ替えでは同一視する。 >ただ、他に区別化するものがないなら、その括りの中で並べる順序と云うものはある。
実は、この問題、エクセルだけの話しではないのです。 そもそもは、オラクルのDBに格納したテキストをソートしたときの並び順が変だった ので、調べていくうちにエクセルも同様だということが判り、それならエクセルでの規 則を知れば対応できるかも、といういきさつがあります。
色々勉強になりました。 ご回答くださった皆さま、本当にありがとうございました。
(MaxM)2009/9/29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.