excel - 将前导零/文本添加到 VBA 中的字母数字列
问题描述
我正在使用区域 ID 为也具有唯一 ID 的工人创建特定过滤器,这些 ID 由 DB 自动生成,其中第一个数字是特定于员工的,然后是区号,其中一些是整数和其他字符串。
例如:
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 中完成,有什么帮助吗?
解决方案
我认为解决此问题的最简单方法是忽略特定于类型的函数并利用更动态的东西,例如:
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(),它会抛出一个不匹配错误。
推荐阅读
- api - CRUD 应用程序是否始终是 Web 世界中的 API?
- laravel - 我想在提交表单后保持选择选项。我正在使用 Laravel 7 和 Bootstrap
- javascript - 如何解决链接到输入字段的 Angular FormArray 和 mat-select 选项?
- python - 如何匹配csv文件中的确切单词?
- android - android camera2 createCaptureSession 已弃用
- php - 尝试在 cfgroovy 上使用 Coldfusion 运行 PHP 代码
- django - django:可选字段上的值错误
- python - 问题排序文件夹中的文件“ValueError:int()的无效文字,基数为10:''
- python - 从 DataFrame 到嵌套字典
- android - android studio 显示语言的问题