我正在尝试识别其中包含特殊字符串的列。为了简化问题,这里是我正在使用的列的一小部分样本。
该列包含人员姓名,但是我们看到某些记录在单元格的最后7到8位数字中具有特殊的键ID。我感兴趣的是一个以大写字母“ C”开头,后跟6个数字的数字。
我正在尝试获得与此类似的结果。
B列(Cab ID)仅从右边取7位数字,这可以通过vba中的excel函数轻松完成。我正在尝试获取列C(标志),在这里我确定它们是否是我感兴趣的记录,这些记录以大写“ C”开头,后跟6个数字。如果是,我将它们标记为“ Y”,否则标记为“ N”。
如果需要添加任何其他详细信息,请告诉我,我将尽快对问题进行快速编辑。
答案 0 :(得分:1)
检查后七个字符中的第一个是否为大写“ 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
答案 1 :(得分:1)
在列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")
答案 2 :(得分:1)
您也可以直接使用以下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。请参考快照。