• ベストアンサー

なぜ結果が「#,100000」になるのでしょうか?

vbaです。 Sub tset() Dim kingaku As Currency kingaku = 100000 Debug.Print Format(kingaku, "\#,##0") End Sub 予想としては、「¥100,000」になると思ったし、そうしたかったのですが #,100000になってしまいます。 どこがおかしいですか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

エクセルVBAだとして Sub tset() Dim kingaku As Currency kingaku = 100000 MsgBox Format(kingaku, "\\#,##0") End Sub で¥が付きます。バックスラッシュで表示されてしまうが、円マーク2つです。 個人的に「正規表現」などからの連想で、やってみた結果です。 ーー http://officetanaka.net/excel/vba/tips/tips12.htm を読んでみてください。 ーーー Sub tset1() Dim kingaku As Currency kingaku = 100000 MsgBox FormatCurrency(kingaku) End Sub もOKのよう。FormatCurrency関数。 言語設計者に、引数でなくて、日付けや数値や通貨で関数を分けようという志向もあるようです。 ーー 表示形式に関するやり方は FormatNumber関数もあり、FormatDate関数もあり、VisualVasicやVBAなどで、いろいろある(表示形式のパラメータも微妙に違う)ようで、 各場合で、勉強して確認するしかないのではと個人的に感想を持ちます。。

tpokxbswmctlu
質問者

お礼

ありがとうございました。

その他の回答 (2)

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

debug.print format(kingaku, "\\#,##0") とします。 参考: http://www.tipsfound.com/VBA/05format.vbhtml >なぜ ¥は続く一文字の機能をキャンセルします。 例: debug.print format(0.5, "0.0\%") また0や#に「挟まれていない」,は桁区切りの機能を果たしません。 結果して数字は「機能を果たさない#,」に続けて、format(100000,"##0")が出力されます

tpokxbswmctlu
質問者

お礼

ありがとうございました。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

文字列の中に \ を書くときは、\\ と2つ書きます。 "\\#,##0"

tpokxbswmctlu
質問者

お礼

ありがとうございました。

関連するQ&A

  • 何が間違ってるのか教えていただけませんか?

    VBAエクセルです。 *********************************************** Sub OSのDefaultPrinterを取得() Dim プリンタ As Object Set プリンタ = CreateObject("WScript.Network") Debug.Print プリンタ.SetDefaultPrinter End Sub *********************************************** を実行すると、 (Debug.Print プリンタ.SetDefaultPrinter)の部分で、 引数の数が一致していません。または不正なプロパティを指定しています。(Error 450) となってしまいます。 どう修正すれば、現在のデフォルトのプリンター名を取得できるのでしょうか? ちなみに Sub tset() Debug.Print ActivePrinter End Sub で取得出来る事は知っています。 ご回答よろしくお願いします。

  • lenは文字数を取得する関数ですよね?

    vbaで Sub test() Dim i As Long Debug.Print Len(i) End Sub とすると、4が返るのですが、なぜなのかまったくわかりません。 iには0が入っているので、一文字だから1が返ると思うのですが・・・

  • どちらを使った方がいいでしょうか?

    Sub test1() Dim ws As Worksheet For Each ws In Worksheets Debug.Print ws.Name Next End Sub Sub test2() Dim ws As Variant For Each ws In Worksheets Debug.Print ws.Name Next End Sub どちらも問題なく実行されますが、 VBA的にどちらを使った方がいいでしょうか?

  • Variant型で宣言してるのにEmptyになる

    エクセルVBA2003について質問です。 Sub aaa1() Dim a As Variant Debug.Print TypeName(a) End Sub を実行してイミディエイトウインドウで確認すると Emptyが返ってきます。 Variantが返ってこない理由は何でしょうか? また、変数の方の宣言をしない場合は Variant型になるはずなのに Sub aaa2() Dim a Debug.Print TypeName(a) End Sub を実行すると、同じくEmptyが返ってきます。 Variantが返らない理由を教えてください。よろしくお願いします。

  • 変数を続けて宣言した場合はEmpty型になる?

    Sub test1() Dim Int1, Int2 As Long Debug.Print "---------- test1の実行結果 ----------" Debug.Print TypeName(Int1) Debug.Print TypeName(Int2) End Sub Sub test2() Dim Int1 As Long Dim Int2 As Long Debug.Print "---------- test2の実行結果 ----------" Debug.Print TypeName(Int1) Debug.Print TypeName(Int2) End Sub を実行すると、 ---------- test1の実行結果 ---------- Empty Long ---------- test2の実行結果 ---------- Long Long の結果が得られます。 test1のInt1がEmpty型になりますが、変数の型にEmptyはないですよね? どういうことなのでしょう???

  • 乱数の発生 Randomizeを入れた方が良いのか

    VBAについて教えてください。 --------------------------- Sub Randomizeを入れた場合() Dim intMax As Integer Dim intMin As Integer Randomize intMin = 1 intMax = 10 Debug.Print Int((intMax - intMin + 1) * Rnd + intMin) End Sub --------------------------- Sub Randomizeを入れていない場合() Dim intMax As Integer Dim intMin As Integer intMin = 1 intMax = 10 Debug.Print Int((intMax - intMin + 1) * Rnd + intMin) End Sub --------------------------- 上記二つのマクロを実行しても 同じような結果が得られる気がするのですがRandomizeは必要なのでしょうか? 一つのサブプロシージャーの中で1回しか乱数を発生させないのなら Randomizeを使って乱数を初期化する必要はないのですか?

  • VBAで期間が何か月間なのかを取得する方法

    VBAで期間が何か月間なのかを取得する方法を教えてください。 Sub test1() Dim dateStart As Date Dim dateEnd As Date dateStart = "2013/1/1" dateEnd = "2013/12/31" Debug.Print 12 & "カ月です" End Sub この場合、12か月ですが、 例えば dateStart = "2013/7/1" の場合、6カ月を返したいのですが それを取得するコードを教えていただけますか? よろしくお願いします。

  • InStr関数を使う際は

    エクセルvbaなのですが、InStr関数を使う際は、どの比較モードを使えばいいのでしょうか? Sub あ() Dim myStr As String myStr = "あいうえお" Debug.Print InStr(1, myStr, "い", vbBinaryCompare) Debug.Print InStr(1, myStr, "い", vbTextCompare) Debug.Print InStr(1, myStr, "い", vbUseCompareOption) 'エラーになる Debug.Print InStr(1, myStr, "い", vbDatabaseCompare) 'エラーになる End Sub vbBinaryCompareとvbTextCompareならエラーになりませんが この二つの違いが判りません。

  • VBA 複数の文字のコードを一気に返すには

    Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?

  • Word VBA

    ※行頭の下線はプログラムに関係ありません、インデントと解釈ください。 Excel VBAで既に開いているワークブックの一覧取得は Sub test() __Dim wb As Workbook __For Each wb In Workbooks ____Debug.Print wb.Name __Next wb End Sub で成功したのですが、 Word VBAで Sub test() __Dim wb As Object __For Each wb In CreateObject("Excel.Application").Workbooks ____Debug.Print wb.Name __Next wb End Sub では何も表示されません。 問題解決のための知識を与えてくださる方、宜しくお願いします。

専門家に質問してみよう