[英]Identifying a string pattern in Excel VBA
我正在嘗試識別具有特殊字符串類型的列。 為了簡化問題,這里是我正在使用的列的一小部分樣本。
該列包含人員姓名,但是我們看到某些記錄在單元格的最后7到8位數字中具有特殊的鍵ID。 我感興趣的是一個以大寫字母“ C”開頭,后跟6個數字的數字。
我正在嘗試獲得與此類似的結果。
B列(Cab ID)僅取右邊的7位數字,這很容易通過vba中的excel函數完成。 我正在嘗試獲取列C(標志),在這里我確定它們是否是我感興趣的記錄,這些記錄以大寫“ C”開頭,后跟6個數字。 如果是,我將它們標記為“ Y”,否則標記為“ N”。
如果需要添加任何其他詳細信息,請告訴我,我將盡快對該問題進行快速編輯。
檢查最后七個字符中的第一個是否為大寫“ C”。 如果是這樣,請檢查最后6個字符是否為數字。 只有這樣才能返回“ Y”。
Sub LeftRightArray()
Const cSheet1 As Variant = "Sheet1" ' Sheet Name/Index
Const cFirst As Integer = 2 ' Source First Row
Const cSourceC As Variant = "A" ' Source Column
Const cTargetC As Variant = "B" ' Target Column
Const cSearch As String = "C" ' Search String
Dim lastR As Long ' Source Last Row Number
Dim i As Long ' Array Row Counter
Dim j As Integer
Dim vnt As Variant ' Array
Dim strCompare ' Compare String
' Paste Source Range into Array
With Worksheets(cSheet1)
lastR = .Cells(.Rows.Count, cSourceC).End(xlUp).Row
vnt = .Range(.Cells(cFirst, cSourceC), .Cells(lastR, cSourceC))
End With
' Change data in Array.
For i = 1 To UBound(vnt)
' Check if C is the first char of last 7 chars.
If Left(Right(vnt(i, 1), 7), 1) = cSearch Then
' Check if last 6 chars are numeric.
If IsNumeric(Right(vnt(i, 1), 6)) Then
vnt(i, 1) = "Y"
Else
vnt(i, 1) = "N"
End If
Else ' C is not the first letter of last 7 chars.
vnt(i, 1) = "N"
End If
Next
' Paste Array into Target Range
With Worksheets(cSheet1).Cells(cFirst, cTargetC)
.Resize(UBound(vnt), UBound(vnt, 2)) = vnt
End With
End Sub
在C
列中使用以下公式: =IFERROR(IF(AND(MID(A2,FIND("*",A2)+1,1)="C",LEN(A2)-(FIND("*",A2)+1)=6),"Y","N"),"N")
備選:將此公式放在B
列中
=IFERROR(IF(AND(MID(A2,FIND("*",A2)+1,1)="C",LEN(A2)-(FIND("*",A2)+1)=6),MID(A2,FIND("*",A2)+1,7),""),"")
和C
列中的這個公式
=IF(LEN(B2)<>0,"Y","N")
您也可以直接使用以下excel公式。 只需稍加修改,即可在VBA代碼中使用此公式。
=IF(COUNT(FIND({0,1,2,3,4,5,6,7,8,9},A2))=0,"N",IF(EXACT(LEFT(B2,1),"C"),"Y","N"))
注意:A2是包含您的數據的單元格,例如:Joe * C5464647。 請參考快照。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.