Как мне получить этот код VBA для вывода в определенном числовом формате?

Это из другого ответа, который я получил некоторое время назад.

Превратить диапазон значений в ячейке в список, разделенный запятыми

Этот код ниже — отличный материал, но теперь я хочу, чтобы он также выводил каждое число с 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

person Redlaw    schedule 29.09.2016    source источник
comment
Просто используйте функцию Format в вашей конкатенации   -  person Ron Rosenfeld    schedule 29.09.2016


Ответы (2)


Это немного грубая сила, но вы можете использовать вариант этого удобного перевода функции/метода LPAD или PadLeft():

Любой метод, эквивалентный 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
person Hambone    schedule 29.09.2016

Вот простая функция для форматирования целого числа:

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"
person FrancoSF    schedule 29.09.2016
comment
Не уверен, почему вы получили отрицательный голос, но это довольно хорошее решение, потому что оно масштабируемое. Если бы я мог предложить одну альтернативу, использование оператора конкатенации & могло бы исключить необходимость приведения переменной Value к строке: LeftFill = Right(String(Size, FillerChar) & Value, Size) - person Hambone; 29.09.2016