2016-09-29 39 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

相關問題