我需要帮助。我开发了一个Excel表格,当我扫描员工条形码时,它将提取base-32代码信息,这样我就可以使用不同的公式获得员工ID号、名字和姓氏。Excel表
唯一的问题是提取这些数据的公式是不同的,基于如何开始的代码在Excel工作表中看到。我可以在O365上的Excel中使用IFS公式,但我们所有的机构都使用标准桌面版本的Excel。
我的问题;是否有一种方法来编码出在VBA,当一个ID被扫描,不管什么扫描的代码开始,它将执行所需的公式提取三项我需要这是ID,名字和姓氏?下面是我使用的公式:
以" "开头扫描
Base-32 =中期(A2、2、7)
First Name =PROPER(MID(A2,17,20))
Last Name =PROPER(MID(A2,38,20))
扫描以"N"开头
Base-32 =中期(A3 9 7)
First Name =PROPER(MID(A3,16,20))
Last Name =PROPER(MID(A3,36,26))
扫描以"C"开头
Base -32 =MID(A4,8,7)
First Name =PROPER(MID(A4,15,20))
Last Name =PROPER(MID(A4,35,20))
ID号
它们每个的ID号计算相同(基于扫描进入的单元格),使用:
=如果(C2 =","0",SUMPRODUCT(权力(32岁,LEN (C2)行(间接("1:",LEN (C2)))),(代码(上层(中期(C2,行(间接("1:",LEN (C2))), 1))) -48 *(代码(中期(C2,行(间接("1:",LEN (C2))), 1)) & lt; 58) -55 *(代码(中期(C2,行(间接("1:",LEN (C2))), 1))在64年))))
提前感谢任何可以帮助你的人。
不确定这是否完全符合您的需求,但是可以使用以下UDF来检索数据:
Function GetData(inp As String, grp As Long) As String
With CreateObject("VBScript.RegExp")
.Pattern = "^(?:M|N.{7}|C.{6})(.{7})S*([A-Z][a-z]+)s*(S+)"
If .Test(inp) Then
GetData = .Execute(inp)(0).Submatches(grp - 1)
Else
GetData = "No Data Found"
End If
End With
End Function
这是一个在线演示模式是如何工作的。它将匹配:
^
-起始行锚。(?:M|N.{7}|C.{6})
-一个非捕获组,用于捕获文字'M',或文字'N'后面跟着7个字符,换行符、或除外一个文字'C'后面跟着6个这样的字符。(.{7}
-然后第一个捕获组7个字符模仿MID()
功能,捕获Base-32代码。S*
- 0+(贪婪)非空白字符,最多:([A-Z][a-z]+)
-第二个捕获组,通过单个大写字母和1+(贪心)小写字母捕获姓氏。s*
- 0+(贪婪)空白字符最多:(S+)
-通过1+(贪婪)非空白字符捕获第一个名称的第三个捕获组。
您将通过=GetData(A1,1)
在工作表中调用此函数以获得'Base-32'代码,并使用整数2获得姓氏,使用3获得名字。我希望这对你有帮助。