Добавление начальных нулей / текста в буквенно-цифровой столбец в VBA - PullRequest
0 голосов
/ 10 января 2019

Я работаю с идентификаторами областей, чтобы создать специальные фильтры для работников, которые также имеют уникальный идентификатор, эти идентификаторы автоматически генерируются БД, где первые цифры относятся к конкретному сотруднику, а затем код области, где некоторые являются целыми числами и другие строки.

Например:

981505 '9815 is employee id and 05 his area
1340A '134 is employee and 0A his area (aphanumeric are managers)

Для числовых данных у меня нет проблем с выполнением .NumberFormat = "00####", но для буквенно-цифровых символов я не могу применить ту же логику, я попытался сделать IF:

If Len(pd.Range("C2:C" & fi).Value) < 10 And pd.Range("C2:C" & fid).Value Then
    pd.Range("C2:C" & fid).Value = WorksheetFunction.Rept("0", 9 - Len(pd.Range("C2:C" & fid).Value))
End If

А также использование VBA WorksheetFunction возвращает ошибку not optional:

pd.Range("C2:C" & fid).Value = WorksheetFunction.Text("00########")

Что мне нужно:

00981505 'Lead zeros
0001340A 'I need lead zeros for future records as id's fluctuate a lot ( i don't know what process goes in the DB for the ids 

Ради скорости и требований мне нужно сделать это в VBA, любая помощь?

1 Ответ

0 голосов
/ 10 января 2019

Я думаю, что самый простой способ сделать это - игнорировать функции, которые зависят от типа, и использовать что-то более динамичное, например:

Dim endRow as long

endRow = pd.range("C" & Rows.Count).End(xlUp).Row

For fid = 2 to endRow
    If Len(pd.Range("C" & fid)) < 10 Then
        Do
            pd.Range("C" & fid) = "'0" & pd.Range("C" & fid)
        Loop Until Len(pd.Range("C" & fid)) = 10
    End if
next fid

Это добавит значения в левом столбце C независимо от его типа примитива.

EDIT:

Причина, по которой вы видите ошибки при попытке применить ту же логику, заключается в том, что вы не можете взять значение диапазона, превышающее 1 ячейку, и применить к нему такие функции, как Len (). Как только ячейка будет несколько раз, ее тип будет строго диапазоном, а диапазоны не будут иметь Len (), это приведет к ошибке несоответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...