【问题标题】:How do I get this VBA code to output to a specific number format?如何让这个 VBA 代码输出为特定的数字格式?
【发布时间】:2016-09-29 00:55:19
【问题描述】:

这是我不久前收到的另一个答案。

Turn a value range in a cell into a comma separated list

下面的这段代码很棒,但现在我希望它也能输出每个 4 位数的数字。因此,如果我得到 1,2,3 的返回值,我希望它返回为“0001,0002,0003”。

Function NumRange(v)
Dim arrC, arr, x As Long, rv As String, sep As String, e

arrC = Split(v, ",")
rv = ""

For Each e In arrC
    If InStr(e, "-") Then
        arr = Split(e, "-")
        arr(0) = Trim(arr(0))
        arr(1) = Trim(arr(1))
        If IsNumeric(arr(0)) And IsNumeric(arr(1)) Then
            For x = CLng(arr(0)) To CLng(arr(1))
                rv = rv & sep & x
                sep = ","
            Next x
        End If
    ElseIf IsNumeric(e) Then
        rv = rv & sep & CLng(e)
        sep = ","
    End If
Next e
NumRange = rv
End Function

【问题讨论】:

  • 在你的连接中使用Format函数

标签: excel vba arr


【解决方案1】:

这有点蛮力,但您可以使用LPADPadLeft() 函数/方法的这种方便翻译的变体:

Any method equivalent to PadLeft/PadRight?

Function NumRange(v)
  Dim arrC, arr, x As Long, rv As String, sep As String, e

  arrC = Split(v, ",")
  rv = ""

  For Each e In arrC
    If InStr(e, "-") Then
        arr = Split(e, "-")
        arr(0) = Trim(arr(0))
        arr(1) = Trim(arr(1))
        If IsNumeric(arr(0)) And IsNumeric(arr(1)) Then
            For x = CLng(arr(0)) To CLng(arr(1))
                rv = rv & sep & Right("0000" & x, 4)
                sep = ","
            Next x
        End If
    ElseIf IsNumeric(e) Then
        rv = rv & sep & Right("0000" & e, 4)
        sep = ","
    End If
  Next e
  NumRange = rv
End Function

现在是一个包含公式的单元格:

=NumRange("1-10")

将包含:

001,002,003,004,005,006,007,008,009,010

【讨论】:

    【解决方案2】:

    这是一个格式化整数的简单函数:

    Function PadLeft(Value, FillerChar, Size) 
        PadLeft = Right(String(Size, FillerChar) + cStr(Value), Size)
    End Function
    

    使用示例

    Dim StringToPrint = PadLeft(7, "0", 4)
    ' StringToPrint value is now "0007"
    

    【讨论】:

    • 不知道你为什么不赞成,但这是一个很好的解决方案,因为它是可扩展的。如果我可以提供另一种选择,使用& 连接运算符可能会排除将Value 变量转换为字符串的必要性:LeftFill = Right(String(Size, FillerChar) & Value, Size)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2020-11-07
    相关资源
    最近更新 更多