如何最好地将 0 添加到 range.value 的开头,直到它在 Excel 中的长度为 13 个字符? [复制]

Posted

技术标签:

【中文标题】如何最好地将 0 添加到 range.value 的开头,直到它在 Excel 中的长度为 13 个字符? [复制]【英文标题】:How do I best add 0's to beginning of range.value until it is 13 characters long in Excel? [duplicate] 【发布时间】:2021-10-11 04:34:29 【问题描述】:

我正在编写一个函数,它需要在不同范围内查找一定长度的代码,但并非所有代码都是正确的长度。在此范围内,可以通过在其前面添加额外的零来解决此问题。

所以我正在尝试编写一个宏的一部分,在代码前面添加 0,直到它正好有 13 个字符长(假设它还不是 13 个字符长)。

现在,我有这个,但我觉得它可以做得更好。特别是因为我不知道 10 是否是可能的最短长度。

Function BolS(Barc As Range) As String

Dim BarA As Range

If Len(Barc.value) = 10 Then
    BarA = "000" & Barc.value
End If

If Len(Barc.value) = 11 Then
    BarA = "00" & Barc.value
End If

If Len(Barc.value) = 12 Then
    BarA = "0" & Barc.value
End If

If Len(Barc.value) = 13 Then
    BarA = Barc.value
End If

也许用 13 减去 Len(Barc.value),然后加上那么多 0?

【问题讨论】:

【参考方案1】:

如果它是一个数字,那么这将起作用:

Public Function PadMyNumber(Target As Range) As String
    PadMyNumber = Format(Target, "0000000000000")
End Function 

输出是字符串而不是数字。

【讨论】:

【参考方案2】:

以下是添加填充的两个示例,但要使用 0 填充,您需要通过在前面加上 ' 或将单元格设置为文本格式来明确声明其文本。超过 13 的长度可能会出错,这里没有考虑。

Sub Pad0()
    ActiveCell.Offset(0, 1) = "'" & WorksheetFunction.Rept("0", 13 - Len(ActiveCell)) & ActiveCell
    
    With ActiveCell
        .Offset(0, 2).NumberFormat = "@"
        .Offset(0, 2) = WorksheetFunction.Rept("0", 13 - Len(ActiveCell)) & .Value
    End With
End Sub

【讨论】:

【参考方案3】:

如果您已经知道将有 13 个字符的字符串,您可以通过以下方式确定它们的实际长度 如果 Len(Barc.value) = 13 那么 BarA = Barc.值 结束如果

If Len(Barc.value) = 13 Then
    BarA = Barc.value
    'Exit Sub
Else
   'a = 13 - Len(Barc.value)
   'BarA = WorksheetFunction.Rept("0", a) & Barc.value
   BarA = WorksheetFunction.Rept("0", 13 - Len(Barc.value)) & Barc.value
End If

这部分根据需要重复“0”字符以达到 13 的长度:

WorksheetFunction.Rept("0", 13 - Len(Barc.value))

如果您的单元格格式不是文本格式,您必须在数字前保留一个“'”,以告知 Excel 它是字符串而不是数字(因为默认情况下不显示数字前面的全零)。您的新加起来将是引号:

BarA = "'" & WorksheetFunction.Rept("0", 13 - Len(Barc.value)) & Barc.value

【讨论】:

看起来可以。与:If Len(Barc.Value) < 13 Then BarA = Right(String(13, "0") & CStr(Barc.Value), Max(13, Len(CStr(Barc.Value)))) End If 有很大不同吗? 很高兴听到这个消息!如果您还有其他问题,请询问。否则不要忘记接受答案。 它没有成功,但幸运的是我发现BarA = WorksheetFunction.Text(Barc.Value, "0000000000000") 也有效。

以上是关于如何最好地将 0 添加到 range.value 的开头,直到它在 Excel 中的长度为 13 个字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将 Polyfills 添加到 SystemJS Angular 4 应用程序

如何有效地将稀疏矩阵列添加到另一个稀疏矩阵中的每一列?

如何最好地将 fb 评论从 http 移动到 https

如何最好地将用 LAMP 制作的项目转移到 WAMP 而不破坏它?

如何最好地将 NetCDF 文件集合重新分块到 Zarr 数据集

如何最好地将包含列表或元组的 Pandas 列提取到多个列中[重复]