2016-09-29 40 views
1

这是我从前收到的另一个答案。如何获取此VBA代码以输出为特定的数字格式?

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 
+1

只需使用'Format'功能在你的级联 –

回答

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 
0

下面是一个简单的函数来格式化整数

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" 
+1

不知道为什么你得到一个downvote ,但这是非常好的解决方案,因为它具有可扩展性。如果我可以提供一个替代方案,那么使用'&'连接运算符可能不需要将'Value'变量作为字符串转换:'LeftFill = Right(String(Size,FillerChar)&Value,Size)' – Hambone

相关问题