[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字の大小比較』(タカ)
FALSEになりますが、数字 < アルファベット < かな となっているのでは。
文字コードについては(特に大小比較)よくわからない。先日も、この板で同様のディスカッションがあって でも、結局は、よくわからなかった。今までの自分自身の対応の中では特に困ったことが発生しなかったので うっちゃっておいたんだけど・・
あぁ、その前に、当方、Vistaはないので、XP+2003とWin7+2010での検証だけど、「いずれも結果は同じ」 つまり、シート側ではFalse、VBA側ではTrueになった。
ヘルプなんかを見ると、シート側であれ、VBA側であれ、ANSIコードによる比較が行われるようで これもヘルプを信じるなら、シート関数では =CODE("A") あるいは =CODE("ア") で取得ができる。 結果は、9025 と 9506 。だから ="A" > "ア" は「当然」False。 一方、VBA側ではCODE関数にあたるものがASC関数なので、たとえば以下を実行すると・・・
Sub Test1() MsgBox Asc("A") & vbLf & Asc("ア") End Sub
これが・・・ -32160 と -31935 になる!値が異なるところがシャクにさわるけど大小としてはシート側と同じ。 なので「当然」以下は Falseになると思いきや!! 結果は True になる。
Sub Test2() MsgBox "A" > "ア" End Sub
これじゃアドバイスにもならないねぇ、悩みを整理しただけ。
このあたりに詳しい人の明快な回答を心待ちに!!
横からしつれいしますが、A は全角半角はぶれていませんか? 提示の式は全角ですが、半角と全角では VBA では結果が逆転します。 (Mook)
ワークシートでは、JISコード
VBAでの 文字列比較は、Unicodeだからではないですか?
ワークシートで
全角 A と 全角 ア の比較 Jis 9025 9506 よって "A">"ア"は、False
VBAでバイナリモードでの比較は、Unicode
全角 A と 全角 ア の比較 Unicode 65313 12450 よって "A">"ア"は、True
因みに
MsgBox StrComp("A", "ア")
は、1となります。
MsgBox StrComp("A", "ア", vbTextCompare)
は、-1となります。
ichinose@高島彩の結婚式神社探検は、今日は中止
> VBAでの 文字列比較は、Unicodeだからではないですか?
なぁるほど、少し霧がはれてきました。(しかし、きょうは降りますねぇ。当方も外出中止)
>VBAのSORT命令になります。SORT命令の引数を見てもこのような指定はなさそうです
確かにこの並び替えたものと大小比較が異なる場合が多いね。 ichinoseさんの回答にあるように大小比較がUnicodeベース。 一方、Sortメソッドの方は、引数SortMethodでxlPinInかxlStrokeを指定。省略時はxlPinIn。 いずれにしても、「読み順」だったり「総画数順」。 xlPinInについてはヘルプでは「中国語の発音順」となっているけど日本語の場合も「読み順?」 全角のAが、どんな読みとみなされるのかはわからないけど。
追記)
どうも、シート上の並び替えは「読み」が影響してそう。 この「読み」の反映を無くしコード順に並び替えさせる指定もあるようだね。
この「学校」の過去ログもふくてめ、ざっと検索したら以下のようなものが。http://office.microsoft.com/ja-jp/excel-help/HA010203199.aspx現在参照不可 http://okwave.jp/qa/q5610320.html https://www.excel.studio-kazu.jp/kw/20090918152425.html http://sme.fujitsu.com/tips/excel/excel028.html
(ぶらっと)
みなさん、ありがとうございます。 JIS、Unicode の件は理解できたのですが、それであればやりようがないのでしょうか。 ワークシートで Unicode順にする あるいは VBA で JISコードで比較する方法はないでしょうか。 ちょっと自分でも調べてみます。 (タカ)
(タカ)です。 VBA の先頭で下記オプションを設定して実現できました。 Option Compare Text
みなさんにご教授いただいたおかげです。 ありがとうございました。
> 全角 A と 全角 ア の比較 > Jis 9025 9506 よって "A">"ア"は、False
以下の例を見れば、JISコード順とは言えないと思います。
行 ___A___ ___B___ ___C___ ___D___ ____E____ ____F____ 1 左文字 右文字 左CODE 右CODE 文字比較 CODE比較 2 a A 97 65 TRUE FALSE E2セル =A2=B2 F2セル =C2=D2 3 A B 9025 66 TRUE FALSE E3セル =A3<B3 F3セル =C3<D3 4 ア あ 9506 9250 TRUE FALSE E4セル =A4<B4 F4セル =C4<D4 5 A ア 9025 177 TRUE FALSE E5セル =A5<B5 F5セル =C5<D5
多分、辞書順 (ABC順 と あいうえお順。私の手元の日本語の辞書にABCは載っていません。「A」はエエなっています)
ABCが、あいうえお より先なのは、単なる決めの問題だと思います。
(半平太) 2011/10/22 21:48
> a A 97 65 TRUE これは、私も気が付いていたので、Excel特有のText比較かなあなんて 思っていましたが、どうやらそれも違いそうですね!!
了解です。
ところで
>windowsVISTA、EXCEL2007ではどちらも TRUE になります。タカさん
>Win7+2010での検証だけど、「いずれも結果は同じ」 >つまり、シート側ではFalse、VBA側ではTrueになった。 名前無しさん
これは、どっちが正しいんでしょうか? 上位バージョンで動作が本当に違ってるのかなあ?
ichinose
私の環境(WindowsVISTA、EXCEL2007)でテストした限りでは ワークシート が FALSE VBA が TRUE
ご参考まで (半平太) 2011/10/22 22:56
半平太さん、情報ありがとうございます。
ichinose
(タカ)です。すみません、早とちりだったようです。再確認しました。
【確認プログラム】 Sub Macro1() ' Range("A2") = """A"">""ア""" Range("B2").Formula = "=""A"">""ア""" If "A" > "ア" Then Range("C2") = "TRUE" Else Range("C2") = "FALSE" End If
Range("A3") = """A""=""ア""" Range("B3").Formula = "=""A""=""ア""" If "A" = "ア" Then Range("C3") = "TRUE" Else Range("C3") = "FALSE" End If
Range("A4") = """A""<""ア""" Range("B4").Formula = "=""A""<""ア""" If "A" < "ア" Then Range("C4") = "TRUE" Else Range("C4") = "FALSE" End If
Range("A5").Select End Sub
【確認結果】 シート VBA "A">"ア" FALSE TRUE "A"="ア" FALSE FALSE "A"<"ア" TRUE FALSE
よろしくお願いします。
>早とちりだったようです。再確認しました。 >・・・・・・・ > よろしくお願いします。
問題自体は、OPTIONの設定で解決したのですよね? それとも、何かが未解決になっているのですか?
(半平太) 2011/10/23 08:16
>早とちりだったようです。再確認しました。
数式と同じ結果をVBAで出そうとしたらEvaluateメソッドが簡単で確実だと思います。 '【確認プログラム】 Sub Macro2() Range("A2") = """A"">""ア""" Range("B2").Formula = "=""A"">""ア""" Range("C2") = Evaluate("""A"">""ア""")
Range("A3") = """A""=""ア""" Range("B3").Formula = "=""A""=""ア""" Range("C3") = Evaluate("""A""=""ア""")
Range("A4") = """A""<""ア""" Range("B4").Formula = "=""A""<""ア""" Range("C4") = Evaluate("""A""<""ア""") End Sub
"A">"ア" の部分が定数であれば Evaluate("""A"">""ア""") は ["A">"ア"] とも記述出来ます。 (sasa)
問題自体はoption指定で解決しております。 いろいろとありがとうございました。 (タカ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.