将前导零/文本添加到VBA中的字母数字列

时间:2019-01-10 19:51:26

标签: excel vba

我正在使用区域ID为工人创建especific过滤器,该过滤器也具有唯一的id,这些ID由数据库自动生成,其中前几位数字是员工特定的,然后是区号,其中某些数字是int和其他字符串。

例如:

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 :(得分:0)

我认为解决此问题的最简单方法是不理会特定于类型的函数,而使用更具动态性的函数,例如:

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列中保留您的值。

编辑:

尝试应用相同逻辑时看到错误的原因是由于您不能接受大于1个单元格的范围值,并且无法对其应用Len()之类的函数。一旦它是一个以上的单元格,它的类型严格地是一个范围,而范围没有Len(),它将引发不匹配错误。