【发布时间】: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