У меня есть CSV-файл, который отправляется мне с почтовыми индексами, в которых отсутствуют начальные нули. Некоторые в пятизначном формате, другие в девятизначном формате, для которых мне не нужно включать тире.

Мне нужно добавить начальные нули и сохранить его как csv, который будет поддерживать начальные нули.

Columns(15).Select
Selection.NumberFormat = "@"

Dim ThisCell As Range
For Each ThisCell In Selection
    If Len(ThisCell) <= 5 Then
        ThisCell = "'" & Right("00000" & ThisCell, 5)
    Else
        ThisCell = "'" & Right("00000000" & ThisCell, 10)
    End If
Next ThisCell

В настоящее время это не поддерживает начальные нули и приводит к зависанию файла и загрузке нескольких минут до следующего шага в vba.

0
CTask 7 Ноя 2019 в 19:39
1
Старайтесь избегать selection, если это возможно. Попробуйте задать диапазон, например for each ThisCell in Sheets("test").range("a1:a10000").
 – 
Nathan_Sav
7 Ноя 2019 в 19:56
4
Изучите файл CSV с помощью текстового редактора (например, Notepad или Notepad++). Действительно ли в файле CSV отсутствуют начальные нули? Или Excel удаляет их при импорте файла CSV? В последнем случае обязательно укажите столбец импортированного почтового индекса как текстовый (во время процесса импорта до его записи на лист). И как отформатированы 9-значные почтовые индексы в файле CSV.
 – 
Ron Rosenfeld
7 Ноя 2019 в 20:03

1 ответ

В поддержку моего комментария я бы закодировал что-то в этом духе. Я бы также проверил, как говорит Рон, проверил, куда они упали раньше.

Sub TestPadding()

Dim r As Excel.Range
Dim c As Excel.Range

Application.Calculation = xlCalculationManual

Set r = ThisWorkbook.Worksheets("TestData").Range("a1:a10000")

For Each c In r.Cells
    c.value = "'" & PadString(c.Text)
Next c

Application.Calculation = xlCalculationAutomatic

End Sub

Function PadString(strInput As String) As String

Dim b As Boolean
Dim l As Byte

b = Len(strInput) < 5
l = IIf(b, 5, 10)

PadString = Right(String(l, "0") & strInput, l)

End Function
1
Nathan_Sav 7 Ноя 2019 в 20:10