2015-10-05 150 views
0

我正在嘗試設置結果如下自定義數字格式:
值「22,800」變成了「歐洲:22.8 M」使用字符串變量設置.NumberFormat的值在Excel VBA

我可以使用數字格式化窗口並使用:
「Europe:」#,## 0.0,「M」; 「Europe:」 - #,## 0.0,「M」

我也可以在VBA窗口中使用
ActiveCell.NumberFormat =「」「Europe:」「#,## 0.0,」「M」 「;」「Europe:」「 - #,## 0.0,」「M」「」

這是問題:我正在運行一個循環函數,它將不同工作表中的值粘貼到摘要工作表 - 我需要區域(例如「歐洲」)顯示在號碼旁邊,但我不想爲9個區域編寫循環功能的代碼9次。

我嘗試的解決方案,在這裏我只想改變變量 「區域」 的值for each循環:

Dim region As String 
Dim numformat As String 
region = "Europe" 
numformat = Chr(34) + Chr(34) + Chr(34) + region + ":" + Chr(34) + Chr(34) + " #,##0.0, " + Chr(34) + Chr(34) + "M" + Chr(34) + Chr(34) + "; " + Chr(34) + Chr(34) + region + ":" + Chr(34) + Chr(34) + " -#,##0.0, " + Chr(34) + Chr(34) + "M" + Chr(34) + Chr(34) + Chr(34) 
Selection.NumberFormat = numformat 

哪些格式的數量爲「歐洲:M#,## 0.0,;歐洲: - #,## 0.0,M「 - 它根本不顯示數字,只是這個字符串。 ?

但是,如果我用numformat在即時窗口返回字符串的值,然後複製/粘貼值,這樣
Selection.NumberFormat =「」「歐洲:」「#,## 0.0,」 「M」 「 」「 歐洲:」 「 - #,## 0.0, 」「 M 」「」

然後,我得到正確的數字格式, 「歐洲:22.8 M」

但是這並未對我沒有幫助,因爲現在區域名稱再次被硬編碼。任何人都可以幫助確定我做錯了什麼,或找出一種替代解決方案?

乾杯,

+0

區域格式存在於源數據中嗎? –

+0

源數據採用標準數字格式進行格式化,使用千位分隔符和無小數。它需要保持這種方式。該區域是每個選項卡的名稱。 –

+0

您可以創建一個Const String,如「Const MasterNumFormat =」「」:「」#,## 0.0,「」M「」;「」:「」 - #,## 0.0,「」M「」「 '然後使用'numformat = Replace(MasterNumFormat,「」,region)'而不是構造它。 – PatricK

回答

2

用途:

numFormat = """" & region & ": ""#,##0.0,""M"";""" & region & ":"" -#,##0.0, ""M""" 

或者,如果你真的想使用Chr(34)你並不需要加倍他們,因爲你不需要逃脫他們:

numFormat = Chr(34) & region & ": " & Chr(34) & "#,##0.0," & Chr(34) & "M" & Chr(34) & ";" & Chr(34) & region & ":" & Chr(34) & " -#,##0.0, " & Chr(34) & "M" & Chr(34) 
+0

謝謝Rory!奇蹟般有效。我認爲這只是我的語法錯誤。我現在意識到,在閱讀你的答案之後,由於我的變量numFormat已經是一個字符串類型,所以在將它設置爲NumberFormat的值時,我不需要用引號括起來。這又意味着我不需要雙引號來分隔數字格式中的文本。 –

相關問題