VBA excel筛选第一个“_”之前的匹配字符串和第二个“_”之后的匹配字符串

oknwwptz  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(302)

我几天前刚开始学习VBA,试图解决一个过滤问题,希望能得到一些想法。
我有一列ID,其格式类似于“C_1_1”、“C_1_11”、“C_12_11”。
条件是使用第一个“”符号之前的字符串和第二个“”符号之后的字符串来查找匹配的ID,如头和尾,例如“C_20_2”〈--“C_”和“2”。在VBA中,我尝试使用筛选器函数筛选匹配“C”的数据,然后使用第二个筛选器筛选匹配“_2”x1c 0d1x的数据
然而,我面临的问题是,因为ID的中间部分也是“_xx”格式,所以会有不需要的数据,如下图所示,所有未突出显示的数据都是不相关的。有什么建议,我可以过滤或提取只有黄色的数据?任何建议将不胜感激。非常感谢

mkshixfv

mkshixfv1#

过滤器数据

电子表格

如果您使用Microsoft 365,无需过多考虑,在单元格G2中可以简单地用途:

=FILTER(FILTER(A2:A100,LEFT(A2:A100,LEN(H2))=TEXT(H2,"@")),RIGHT(FILTER(A2:A100,LEFT(A2:A100,LEN(H2))=TEXT(H2,"@")),LEN(H3))=TEXT(H3,"@"))

VBA语言

Sub FilterData()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim ws As Worksheet: Set ws = wb.Sheets("Data")
    
    Dim sStr As String: sStr = CStr(ws.Range("H2").Value)
    Dim eStr As String: eStr = CStr(ws.Range("H3").Value)
        
    Dim rg As Range
    Set rg = ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp))
    
    Dim Data(): Data = rg.Value
    
    Dim sr As Long, dr As Long, cString As String
    
    For sr = 1 To UBound(Data, 1)
        cString = CStr(Data(sr, 1))
        If cString Like sStr & "*" & eStr Then
            dr = dr + 1
            Data(dr, 1) = cString
        End If
    Next sr
    
    With rg.EntireRow.Columns("G")
        .Resize(dr).Value = Data
        .Resize(ws.Rows.Count - .Row - dr + 1).Offset(dr).ClearContents
    End With

End Sub

相关问题