• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NumberFormatLocalの値を比較したい)

Excel VBAで円記号の入った「NumberFormatLocal」の値を比較する方法

このQ&Aのポイント
  • Excel VBAを使用して、セルに設定された書式の「NumberFormatLocal」の値が特定の文字列に等しいかどうかを比較したい場合、正しい結果が得られないことがあります。
  • 特に、円記号(バックスラッシュ)が含まれた値を比較する場合に問題が発生します。
  • 本記事では、Excel VBAで円記号の入った「NumberFormatLocal」の値を正しく比較する方法について説明します。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

Excelは内部的に文字列をUnicodeで扱っています。 NumberFormatLocalの帰り値では通貨記号として用いられる円記号(U+00A5)が使用されています。 文字列として円記号を入力した場合は、Windowsはバックスラッシュ(U+005C)として扱います。 https://ja.wikipedia.org/wiki/%E5%86%86%E8%A8%98%E5%8F%B7 比較の際、ChrW関数によりバックスラッシュをU+00A5に置換して比較することで比較することが出来ます。 (A5は16進数ですので、関数内の引数は「&H○○」の表記にします。10進数の場合は「165」になります。) If Selection.NumberFormatLocal = strTuka Then        ↓ If Selection.NumberFormatLocal = Replace(strTuka, "\", ChrW(&HA5)) Then

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

実際に帰ってくる文字列が違ってるからですね。 詳しく調べてみると,numberformatlocalが返してくる\の文字コードが違ってる(ascwで92と165)事が確認できます。 >解決方法 たとえば 変更前: If Selection.NumberFormatLocal = strTuka Then 変更後: if strcomp(selection.numberformatlocal, strtuka, vbtextcompare) = 0 then などで。

関連するQ&A