Excel VBA - 添加自定义数字格式

3
我有一个文件,里面包含许多百分数,这些百分数只有一位小数。当我将其导入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%;@"),那么这个新的自定义数字格式会被列入未来用于批量替换操作的列表中吗? - user4039065
@Jeeped 是的,这似乎解决了它:)。";@" 到底是做什么的?我不熟悉这个。 - horace_vr
2个回答

7
如果您将自定义数字格式应用于单个单元格,它将变为“列出”,并随后可用于将来使用的批量替换操作。我建议使用类似以下的格式:
 .range("A1").NumberFormat = "0.0%;@"

这个特定的格式掩码可以应用于任何带有百分比或文本的单元格。如果您有一个具有文本值的列标题标签,并应用了那个CNF,那么;@部分会强制文本以原样显示(没有更改)。以这种方式,您可以在更多可能性的地方放置第一个CNF。一旦它被使用过一次,它将可用于在其余百分比值上进行批量替换操作。


1
考虑以下简单的内容:
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

1
这也完美地运行,尽管比@Jeeped给出的答案慢了大约2倍。似乎在大范围内循环遍历每个单元格比批量查找/替换要慢。非常感谢! - horace_vr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接