【问题标题】:Excel VBA - add a custom number formatExcel VBA - 添加自定义数字格式
【发布时间】:2015-01-14 18:37:24
【问题描述】:

我有一个文件,在 Excel 外部生成,有很多百分比。所有这些百分比都有一个小数位。导入 excel 时,Excel 会为百分比添加第二个小数位 - 这似乎是 Excel 中百分比的一些默认格式。它只是添加了一个“0”。

我想将所有双小数位百分比格式化为一个小数点。如果我手动执行此操作,通过使用 CTRL+H,查找格式/替换格式,它会顺利进行。但是我不能通过 VBA/宏来做到这一点,即使我在手动进行替换时记录了宏。录制宏生成的代码是这样的:

Application.FindFormat.NumberFormat = "0.00%"
Application.ReplaceFormat.NumberFormat = "0.0%"
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _
    xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True

失败发生在:

Application.ReplaceFormat.NumberFormat = "0.0%"

经过大量的尝试和错误,我发现新格式需要在自定义格式列表中。但默认情况下不存在单个小数位数的百分比。如果我手动将单个单元格格式化为所需的格式,宏就可以工作。当然,我不想对每个文件都这样做。

任何意见将不胜感激。

提前致谢!

【问题讨论】:

  • 如果您使用 VBA (.range("A1").NumberFormat = "0.0%;@") 为第一个单元格设置新的自定义编号,是否会列出新的自定义编号格式以供将来与批量替换操作一起使用?
  • @Jeeped 是的,这似乎解决了它:)。 “;@”到底是做什么的?我不熟悉这个。

标签: excel vba


【解决方案1】:

如果您将自定义数字格式应用于单个单元格,它将被“列出”并随后可用于未来的批量替换操作。我可能会建议使用类似的东西,

 .range("A1").NumberFormat = "0.0%;@"

该特定格式掩码可以应用于任何带有百分比或文本的单元格。如果您有一个带有文本值的列标题标签并应用了该 CNF,则 ;@ 部分会强制文本按字面意思显示(不更改)。通过这种方式,您可以接受更多的可能性在哪里放置第一个 CNF。使用一次后,即可对剩余的百分比值进行批量替换操作。

【讨论】:

    【解决方案2】:

    考虑简单:

    Sub dural()
        Dim r As Range
        For Each r In ActiveSheet.UsedRange
            If r.NumberFormat = "0.00%" Then
                r.NumberFormat = "0.0%"
            End If
        Next r
    End Sub
    

    【讨论】:

    • 这也很有效,尽管比@Jeeped 给出的答案慢了大约 2 倍。似乎在大范围内循环遍历每个单元格比批量查找/替换要慢。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多