簡體   English   中英

識別Excel VBA中的字符串模式

[英]Identifying a string pattern in Excel VBA

我正在嘗試識別具有特殊字符串類型的列。 為了簡化問題,這里是我正在使用的列的一小部分樣本。

PIC1

該列包含人員姓名,但是我們看到某些記錄在單元格的最后7到8位數字中具有特殊的鍵ID。 我感興趣的是一個以大寫字母“ C”開頭,后跟6個數字的數字。

我正在嘗試獲得與此類似的結果。

PIC2

B列(Cab ID)僅取右邊的7位數字,這很容易通過vba中的excel函數完成。 我正在嘗試獲取列C(標志),在這里我確定它們是否是我感興趣的記錄,這些記錄以大寫“ C”開頭,后跟6個數字。 如果是,我將它們標記為“ Y”,否則標記為“ N”。

如果需要添加任何其他詳細信息,請告訴我,我將盡快對該問題進行快速編輯。

沒有RegExp

檢查最后七個字符中的第一個是否為大寫“ 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。 請參考快照。

具有數據的Excel快照

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM