こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのソート順がおかしい

エクセルのソート順がおかしい

B4セルから縦方向に以下のデータを降順にオプションでコード順にソートする。

磐田
川崎
G大阪
C大阪

の順になる。

各要素間の値の比較する関数をVBAで作成して比較すると

川崎 < G大阪

となり、大小関係がおかしくなる。

上記以外の比較は下記のとおり正しい。

磐田 > 川崎
G大阪 > C大阪


各要素間の値の比較する関数は以下である。
Option Explicit
Function compare(str1 As String, str2 As String) As String
' 大小関係を検査する
If str1 > str2 Then
compare = str1 & " greater than " & str2
ElseIf str1 = str2 Then
compare = str1 & " Equal to " & str2
Else
compare = str1 & " smaller than " & str2
End If

End Function

実際のプログラムは「2分木探索」を使用しているので,大小関係が大切である。

これはどうすればソートがコード(ユニコード)順になるのか、教えて下さい。

なおエクセルは2000を使用している。

投稿日時 - 2010-04-17 09:45:34

QNo.5831635

困ってます

質問者が選んだベストアンサー

>どうすればソートがコード(ユニコード)順になるのか、教えて下さい

ちなみにOption Compare Textを宣言すると,通常のワークシートのソート順にVBAが従うようにできます。

そうではなくあくまでも並べ替えの動作をVBAに倣わせたいのでしたら,そういう設定はありません。
ご自分でVBAと同じユニコード順に従って並べ替えるプログラム(たとえば簡単なバブルソート)を実装して,実行してください。

投稿日時 - 2010-04-17 10:31:24

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.3

>川崎 < G大阪
>大小関係がおかしくなる。

全体は見えませんが、Unicode 比較でしたら、正しいのではありませんか?
全角のGは、FF27 (24029)です。
川崎の川は、5DDD (-217)ですから、
どちらが大きいかは自明ですね。

JIS比較するなら、
全角のGは、90EC(-32154)です。
川崎の川は、8266(-28436)ですから、
川崎 > G大阪
となりますね。
ワークシートは、JIS比較です。VBAでも、JIS比較は出来ますが、ワークシートの並べ替えを使ったほうが早いです。

TextCompare にしたら、全角・半角・小文字・大文字が一緒になります。だから、Gそのものは、半角扱いになりますから、
半角:全角 "G" = "G" となります。

なお、質問は、[ですます]文でお願いします。

投稿日時 - 2010-04-17 17:20:08

ANo.2

磐田(イワタ)
川崎(カワサキ)
G大阪(ガンバオオサカ)
C大阪(セレッソオオサカ)
()内のフリガナ順になってませんか?

並べ替え時にオプションで“ふりがなを使わない”設定にしてみてください。
VBAだとSortMethodでxlPinYinが“ふりがなを使う”、xlStrokeが“ふりがなを使わない”になります。

投稿日時 - 2010-04-17 11:58:21

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-