2015-10-05 152 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的值时,我不需要用引号括起来。这又意味着我不需要双引号来分隔数字格式中的文本。 –

相关问题