Я пытаюсь сделать что-то вроде функции str_pad
в VBA, возвращающей начальные нули впереди денежных значений.
Например, если я хочу заполнить его шестью цифрами:
Input:
$ 423,67
Output:
000423
Пока что он может добавлять эти ведущие нули, но я не могу понять, как это реализовать, когда в нем нет десятичных знаков:
Input:
$ 423,00
Current output:
000423
Desired output:
042300
Поскольку пользователь обычно не включает нули после запятой, мой код должен иметь возможность помещать их в вывод.
Код:
Function str_pad(text As Variant, totalLength As Integer, padCharacter As String) As String
If totalLength > Len(CStr(text)) Then
'str_pad = String(totalLength - Len(CStr(text)), padCharacter) & CStr(text)
Else
str_pad = text
End If
End Function
Как насчет изменения вашей функции на что-то вроде ниже, это отформатирует числа по желанию, а затем удалит десятичный разделитель, поэтому числа будут отображаться, как ожидалось, я пропустил totalLength, поскольку это добавит числа к 6 цифрам:
Function str_pad(text As Variant, padCharacter As String) As String
str_pad = Format(text, "0000.00")
str_pad = Replace(str_pad, ".", "")
End Function
Чтобы использовать это, вы можете использовать такую формулу: =str_pad(A1,0)
Будет ли «запятая-как-десятичный-разделитель» не-EN-US работать в VBA, ориентированном на EN-US, без модификатора локали? В маске формата может потребоваться использование точки независимо от регионального десятичного разделителя в системе.
@Jeeped, спасибо за ваш комментарий, изначально я использовал точки, но когда я понял, что OP использует запятые, я подумал, что должен исправить свой ответ .... В любом случае, вы всегда чему-то учитесь, пытаясь, спасибо :)
Ваши примеры
423,67 => 000423
и423,00 => 042300
, кажется, противоречат друг другу, иначе это был бы дубликат Добавить начальные нули / 0 к существующим значениям Excel определенной длины.