我需要幫助。 我開發了一個Excel作業表,當我掃描員工的條形碼時,它將提取base-32代碼資訊,這樣我就可以使用不同的公式得到員工的ID號碼、名字和姓氏。 Excel表
唯一的問題是,根據Excel作業表中看到的代碼開頭方式,提取這些資料的公式是不同的。 我可以在O365的Excel中使用IFS公式,但我們所有的機構都使用標準的桌面版本的Excel。
我的問題是;是否有辦法在VBA中編碼,當掃描ID時,無論掃描的代碼以什么開頭,它都會執行所需的公式來提取我需要的三個專案,即ID、名字和姓氏? 以下是我使用的公式:
掃描代碼開始時是什么?
以 "M "開始的掃描 Base-32 =MID(A2,2,7) 名字=PROPER(MID(A2,17,20)) 姓氏=PROPER(MID(A2,38,20)) 以 "N "開頭的掃描 Base-32 =MID(A3,9,7) 名 =PROPER(MID(A3,16,20)) 姓 =PROPER(MID(A3,36,26)) 以 "C "開頭的掃描 基數-32 =MID(A4,8,7) 名 =PROPER(MID(A4,15,20)) 姓氏=PROPER(MID(A4,35,20)) 身份證號碼 他們每個人的ID號碼的計算方法是一樣的(基于掃描進入的單元格),使用:
提前感謝能夠提供幫助的人。
uj5u.com熱心網友回復:
不確定這是否與你的要求完全一致,但是下面的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[/span].
GetData = "沒有找到資料"。
End If
End With[/span
End Function
這里是一個在線演示,該模式如何作業。它將匹配:
^- 起始行錨。(?:M|N.{7}|C.{6})- 一個非捕獲組,可以捕獲一個字面的'M',或一個字面的'N',后面有除換行以外的7個字符,或一個字面的'C',后面有其中的6個字符。(.{7}- 然后是第一組7個字符的捕獲,模仿MID()功能,捕獲Base-32代碼。S*- 0 (貪婪的)非空白字符,直到:([A-Z][a-z] )- 第2個捕獲組,通過一個大寫字母和1個以上(貪婪的)小寫字母捕獲姓氏。s*- 0 (貪婪的)空白字符,直到:(S )- 第3個捕獲組,通過1 (貪婪的)非空格字符來捕獲第一個名字。
你可以通過=GetData(A1,1)在你的作業表中呼叫這個函式,以獲得 "Base-32 "代碼,并使用整數2來獲得姓氏,用3來獲得名字。我希望這對你有一點幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/332381.html
標籤:
上一篇:我的自動過濾器過濾了錯誤的標準
