1

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

所以我试图编写一个宏的一部分,在代码前面添加 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?

4

3 回答 3

1

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

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

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

于 2021-08-06T09:59:27.807 回答
0

如果您已经知道您将拥有 13 个字符的字符串,您可以通过 If Len(Barc.value) = 13 Then BarA = Barc.value End If 确定它们的实际长度

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
于 2021-08-06T09:35:47.683 回答
0

这是添加填充的两个示例,但要使用 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
于 2021-08-06T09:39:29.367 回答