在 MS Excel 中将单元格格式化为 000-000-0000-0000

在 MS Excel 中将单元格格式化为 000-000-0000-0000

我想将 Excel 中的单元格格式化为以下格式:000-000-0000-0000。这只是一个例子,可以将零替换为其他数字,但连字符必须保留。

我认为正则表达式可能是我的朋友,但我过去在使用 VBA 脚本时遇到了很多麻烦,所以我想知道是否还有其他方法可以实现这一点?

I/O 示例:
123-12-1-255 至 123-012-0001-0255
983-6-9908-12 --> 983-006-9908-0012

答案1

右键单击需要格式化的单元格-格式化单元格-风俗- 输入格式:

000-000-0000-0000

在此处输入图片描述

答案2

困难在于,有了数字字符串,您实际上就有了文本。没有自定义的数字格式可以对文本起作用以更改其部分。(您可以执行诸如在存在文本的任何地方显示“不是数字”之类的操作,但这并不是获取文本本身并对其进行操作以对其进行转换。)

Excel 本身也无法为您转换文本... 不能以这种方式转换。您绝对可以轻松使用字符串函数来实现这一点,但结果将出现在不同的单元格中,而不是原始单元格中,而我的印象是您根本不想要这样。

如果您要导入数据,可以将其导入电子表格中的其他位置,并将公式放在数据当前所属的位置。(如果数据源是文件,您甚至可以将其留在那里。)但如果有人输入它,而您需要让他们将其输入到数据主体中,而不是其他地方,那就不行了。如果您可以使用此功能,您可以使用字符串函数创建结果的“硬”版本,其中包含实际单元格内容中的破折号,或者,如果需要,包含裸数字,在需要的地方用 0 填充,并使用自定义数字格式来格式化它。如果不保留源数据,则需要一个步骤将公式转换为其数据结果。手工完成,通过“单击我”按钮使用 VBA...但有些东西。

幸运的是,VBA 中的字符串操作非常可靠,不会遗漏任何需要的内容,而且操作简单,无需担心任何意外事件。它最终会让您用所需的结果填充单元格,因此原始单元格中存在正确格式的字符串。与公式方法一样,您可以创建裸数字字符串,根据需要进行填充,然后将其放置在目标单元格中​​。

仅使用 VBA 编码的方法会让您计算填充等,并允许在代码中实现各种可能性。VBA 加 RegEx 方法的优点在于,填充可能非常容易安排,比额外的字符串操作代码行更容易,但周围很少有真正的 RegEx 专家……似乎您在处理这些复杂问题时会遇到比仅仅编写 10-20 行额外代码更困难的问题。

或者不是。也许 RegEx 方面比我想象的要明显得多。(我肯定不是那些 RegEx 大师之一。)

无论如何,使用字符串和字符串函数或代码/RegEx 都会产生直接的最终结果,即带有破折号的字符串。生成一组数字意味着最后需要创建自定义数字格式。当然,这很容易,而且已经故意在 的Lee答案中显示出来,巧合的是,在您的问题本身中也显示出来。

当某些数字可能不符合真正需要的模型时(请注意Lee带有两个额外数字的示例),在制作此类字符串时要记住的一件事是,Excel 会先将这些格式从右侧调整到数字字符串上,然后向左调整。因此,该数字开头的“12”被添加到输出的前三位数字上,在那里保留五位数字,其余数字则没有问题,而不是将最后四位数字变成六位数字。对于人们试图完成的一些更深奥的事情,这更是一个问题。

当然,如果你想使用 Power Query,它可以毫不费力地处理这个问题,但你不会只用鼠标就能完成它。你必须编写一两个转换步骤……一旦你学会了它……

答案3

我终于有了答案

=CONCATENATE("153-";TEXT(LEFT(C2;FIND("-";C2)-1);"000"); "-"; TEXT(MID(C2;FIND("-";C2)+1;FIND("-";C2;FIND("-";C2)+1)-FIND("-";C2)-1);"0000"); "-"; TEXT(RIGHT(C2;LENGTH(C2)-FIND("-";C2;FIND("-";C2)+1));"0000"))

其中 C2 是我保存原始值的单元格。对于大多数英语用户,您需要用逗号替换分号。

相关内容