こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

NumberFormatLocalの値を比較したい

Excel VBA:円記号の入った「NumberFormatLocal」の値を比較したい
以下の例で文字「バックスラッシュ」はVBAでは「円記号」で表示されています。
セルに設定された書式Selection.NumberFormatLocalの値が文字列「"\#,##0;\-#,##0"」に等しいか調べたいがうまく比較できない。
環境、OS:Windows10, Windows8、Excel:2010,2013
例 セル”A1”に数値「123456」を入力
“A1”に手作業で通貨書式を設定
「セルの書式設定」->「表示形式」->「通貨」->「\-1,234」(黒色:デフォルト)
マクロの記録は
Sub Macro1()
Range("A1").Select
Selection.NumberFormatLocal = "\#,##0;\-#,##0"
End Sub
“A1”に設定された書式が通貨書式であるかをVBAで確認するために
プロシジャー test1 を作り、実行すれば”No”になる。
“Yes”を予想してしまうが、”No”になる理由と解決方法が知りたい。
Sub test1()
Dim strTuka As String
strTuka = "\#,##0;\-#,##0"
Range("A1").Select
MsgBox Selection.NumberFormatLocal
If Selection.NumberFormatLocal = strTuka Then
MsgBox "Yes"
Else
MsgBox "No"
End If
End Sub
どなたか、アドバイスをお願いします。

投稿日時 - 2015-09-14 00:53:37

QNo.9047345

暇なときに回答ください

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

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

投稿日時 - 2015-09-14 11:47:28

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

実際に帰ってくる文字列が違ってるからですね。
詳しく調べてみると,numberformatlocalが返してくる\の文字コードが違ってる(ascwで92と165)事が確認できます。


>解決方法

たとえば
変更前:
If Selection.NumberFormatLocal = strTuka Then

変更後:
if strcomp(selection.numberformatlocal, strtuka, vbtextcompare) = 0 then
などで。

投稿日時 - 2015-09-14 11:48:56

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-