ここから本文です

EXCELのセル計算式とVBAの計算式の違いについて セルB41に 10音楽 セルC41に 10...

zak********さん

2014/8/400:19:48

EXCELのセル計算式とVBAの計算式の違いについて
セルB41に 10音楽
セルC41に 10工芸
セルD41に =B41>C41
と入力したらD41は FALSEになりました。

一方VBAで
Sub test()
MsgBox Range("B41") > Range("C41")
End Sub
をやったら、メッセージボックスにtrueが表示されました。
同じ計算をさせたつもりなのですが、なにか違う計算をしているのでしょうか。
VBAでセルD41と同じ結果が欲しいです。

閲覧数:
76
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

ja7********さん

2014/8/502:14:51

> なにか違う計算をしているのでしょうか。

まぁ、「計算違い」というよりVBAで扱う文字コードの違いと思います。

まず、=B41>C41 のように
セルに設定した数式で、「文字列を比較」する場合は、
その文字列の漢字コードで比較します。
JISコードやShift-JISの場合の漢字は、その音読み順に並んでいます。
"10"は、両方同じで続く"音楽(オンガク)" と工芸(コウゲイ)では
音(JIS 3241) > 工(JIS 3929)ですので False になります。

ところが、VBAでの文字コードは、Unicodeが、使われていて
漢字の音読み順の並びにはなっていないのです。

> VBAでセルD41と同じ結果が欲しいです。
VBAで Range("B41") > Range("C41")の結果をワークシートの数式と
同じにするのであれば、こんな感じにすればいいかと思います。
モジュールの先頭(宣言エリア)に文字の比較をテキストで行うように
Option Compare Text を指定します。

これで、如何でしょうか。

Option Explicit
Option Compare Text

Sub test()
MsgBox Range("B41").Value > Range("C41").Value
End Sub

  • ja7********さん

    2014/8/502:37:40

    例えば・・・
    S-JISの場合、亜(ア:889FH)で井(イ:88E4H)で音読み順ですが、

    UniCodeコードの場合、亜(ア:4E9CH)より 井(イ:4E95H)の方が
    先になっていたりして読みが、文字コード順になっていません。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/8/9 20:50:36

おっしゃるとおりでした。ありがとうございます。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる