アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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を使用している。

A 回答 (3件)

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



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

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

>川崎 < G大阪


>大小関係がおかしくなる。

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

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

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

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

磐田(イワタ)


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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!