- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NumberFormatLocalの値を比較したい)
Excel VBAで円記号の入った「NumberFormatLocal」の値を比較する方法
このQ&Aのポイント
- Excel VBAを使用して、セルに設定された書式の「NumberFormatLocal」の値が特定の文字列に等しいかどうかを比較したい場合、正しい結果が得られないことがあります。
- 特に、円記号(バックスラッシュ)が含まれた値を比較する場合に問題が発生します。
- 本記事では、Excel VBAで円記号の入った「NumberFormatLocal」の値を正しく比較する方法について説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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 などで。