Excel 文本公式字符限制的字符串转换?

Excel 文本公式字符限制的字符串转换?,excel,excel-formula,Excel,Excel Formula,我正在尝试格式化存储为文本值的单个数字 例如,我想转换: 5145350002005000080 致: 5145-350002-00500-0080 我使用的公式是: =文本(A1,“0000-000000-00000-0000”) 我收到的输出是: 5145-350002-00500-0000 为什么最后4个字符是“0000”而不是我所期望的“0080”?是否有字符限制,或者我的公式不正确?引用自: Excel中的限制为数字中的15位有效数字。输入16 数字信用卡号和1234567890123

我正在尝试格式化存储为文本值的单个数字

例如,我想转换:

5145350002005000080

致:

5145-350002-00500-0080

我使用的公式是:

=文本(A1,“0000-000000-00000-0000”)

我收到的输出是:

5145-350002-00500-0000

为什么最后4个字符是“0000”而不是我所期望的“0080”?是否有字符限制,或者我的公式不正确?

引用自:

Excel中的限制为数字中的15位有效数字。输入16 数字信用卡号和1234567890123456将变为 1234567890123450

实际上,即使是5145350002005001111也会导致
5145-350002-00500-0000

此外,当您的输入单元格被选中时,请查看公式栏-对于my Excel 2007,我看到:

(希望这有帮助)

编辑:

作为解决此任务的解决方案-将数字格式设置为文本,并使用以下公式:

=LEFT(A1,4)&"-"&MID(A1,5,6)&"-"&MID(A1,11,5)&"-"&RIGHT(A1,4)

这是一个自定义函数。将它放在工作簿的常规代码模块中,您可以在单元格中通过=FormatLargeNumber(“A1”)调用它


当我尝试在单元格中输入像“5145350002005000080”这样的值作为数字时,Excel会将其转换为5145350002005000000。这个数字是五分之一,还有一些变化。我怀疑它太大了,Excel无法解释,我认为它在默认情况下被转换为科学记数法,这可能会导致不希望的值舍入/截断。@DavidZemens为答案添加了可能的解决方案。投票赞成声音建议:有效数字,但这并不能解决如何将值转换为“5145-350002-00500-0080”的问题。谢谢您的解释/解决方法,但是,正如我在原始问题中所述,该值存储为文本,而不是数字值。@Addikt我不确定函数如何工作,但也许它会将类似于字符串的数字转换为数字——然后上述所有内容都适用……我想知道是否应该使用不同的掩码,而不是“0000-000000-00000-0000”,它会产生相同的输出,但作为字符串,而不是数字。我假设“0”将计算为与数字相关的格式。感谢您的解释/解决方法,但是,正如我在原始问题中所述,该值存储为文本,而不是数字值。TEXT()公式将该单元格中的值解释为数字,这是错误的来源。我提供的函数将转换(而不仅仅是“掩码”)值,只要它存储为文本/字符串。您确定这些值不是格式化为文本的数字,而是真文本字符串吗?它们是真文本字符串。我没有使用数字类型的主要原因是我需要保留前导零。Excel提供了一个“建议错误”,文本字段可能包含一个数字。我想当我使用TEXT方法时,它会把它转换成一个数字。显然,这不是期望的结果。我意识到我可以使用您提供的函数,我已经使用过了(除了我使用了内置函数),但我不想这样做。我的问题旨在确定是否有一种更简单的方法可以使用文本函数来实现这一点。目标是在这些格式需要更改时避免复杂的VBA/单元格公式,并确定是否存在Excel由于固有限制而无法生成所需结果的情况。好的,我理解。如果不使用Left/Mid函数或VBA UDF来实现,这是一个固有的限制。文本公式接收一个数值并屏蔽它。由于字符串值可以解释为数字,因此TEXT()公式似乎有效(受上面所述有效数字的限制)。但文本公式不能应用于非数字字符串。在真正的文本字符串(如
=text(“ABCDEFG”,“000-000”)
上尝试一下,您将看到文本公式没有任何作用。它似乎只起作用,因为您的输入字符串是数字。
Public Function FormatLargeNumber(val As String)
'This function parses extremely large numbers per your example.
' Modify as needed.
FormatLargeNumber = Left(val, 4) & "-" _
                    & Mid(val, 5, 6) & "-" & _
                    Mid(val, 11, 5) & "-" & _
                    Right(val, 4)



End Function