【问题标题】:VBA EXCEL - NUMBERFORMAT didn´t work but FORMAT FUNCTION didVBA EXCEL - NUMBERFORMAT 不起作用,但 FORMAT FUNCTION 起作用
【发布时间】:2013-09-07 01:02:38
【问题描述】:

我有一系列名为 MyCells 的单元格作为字符串类型。其中有 26 位数字的字符串。

为什么使用 NumberFormat 的第一个语句(如下)不起作用,但第二个语句起作用?

试用单元格如下所示:

38935094000163001000052234 --> 38.935.094/0001-63 001 000052234

第一次尝试(没有成功):

range(MyCells).Select

Selection.NumberFormat = "00"".""000"".""000""/""0000""-""00""   ""000""   ""000000000"

第二次(成功):

range(MyCells).Select

For Each c In Selection
    c = Format(c, "00"".""000"".""000""/""0000""-""00""   ""000""   ""000000000")
Next

【问题讨论】:

  • 您确实在寻找所谓的字符或文本掩码。 VBA.Strings.Format 函数可以处理它们,但 Excel 数字格式(或 TEXT 公式函数)不能。您可以像以前一样解决它,也可以通过创建 UDF 从工作表公式中调用,该公式只需将参数传递给 VBA 格式函数,或者通过拆分字符串并添加内容的普通非 VBA 公式(例如=LEFT(x,4)&"-"&MID(x,5,3)&"-"&MID(x,8,2) 等等等等)。
  • 谢谢,Cor_Blimey。我仍然对细胞类型和细胞面具有些困惑。搜索一下,我认为单元格的唯一三种类型(从 TypeName 函数返回)是字符串、双精度和日期,无论我们在工作表中设置哪种“类型”或掩码,例如货币、百分比或数字.这是正确的吗?
  • 布尔值。但是,是的,否则我认为你是对的。无论哪种方式,单元格编号格式都不会更改数据类型,并且您发布的特殊格式(例如“#.0”)不会应用于文本。如果 pnuts 的回答有助于将其标记为已接受 :)

标签: excel vba format number-formatting


【解决方案1】:

“Format 函数使用的格式代码字符串与 NumberFormat 和 NumberFormatLocal 属性不同。”来自http://msdn.microsoft.com/en-us/library/office/aa224873%28v=office.11%29.aspx

【讨论】:

    【解决方案2】:

    Excel 只保留前 15 位数字。您输入的数字是 26 位数字,Excel 保留前 15 位数字之后的数字的唯一方法是将其存储为文本。因此,数字格式将无法使用,因为 Excel 将其视为文本字符串,而不是数字。

    【讨论】:

    • 所以 NUMBERFORMAT 只适用于数字?我不能使用字符串作为 NUMBERFORMAT 的参数吗?
    • 请参阅here 了解自定义单元格格式的详细信息
    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多