将数组作为标准使用自动筛选器并searchContains

我做了大量的search,并找不到任何解决scheme。 列A中有5-10个项目列表,列BI中有大约500k行(如果less了,我可以通过它们循环)。

B列中的所有单元格都有大量数据,我想过滤包含A列中某个项目的项目。

我的问题是,因为我使用一个数组作为标准,我似乎无法有效地添加通配符。 有没有人有办法解决吗? 这是我目前的代码:

Dim LastRow As Integer LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "a").End(xlUp).Row Range("b1").AutoFilter Dim Cri() As String ReDim Cri(2 To LastRow) Dim i As Integer For i = 2 To LastRow Cri(i) = Cells(i, 1).Value Next With ActiveSheet .Range("b1").AutoFilter Field:=2, Criteria1:=Cri, Operator:=xlFilterValues End With 

我尽我所能地想方设法包含通配符,但是它不起作用。

我只是想到了一个可能的解决scheme,通过if语句循环,find准确的标准数量,并做出10个左右不同的可能自动filter代码。 我不确定这样做是否会起作用,但是它不会很优雅。

这个短小的部分似乎很快就能做到。

 Sub collect_and_filter_Bs() Dim c As Long, v As Long, vVALs As Variant, vCRITs As Variant, rng As Range Application.ScreenUpdating = False With ActiveSheet '<-set this worksheet reference properly If .AutoFilterMode Then .AutoFilterMode = False If IsEmpty(.Cells(2, 1)) Then Exit Sub vCRITs = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Value2 For c = 1 To UBound(vCRITs, 1) vCRITs(c, 1) = Chr(42) & vCRITs(c, 1) & Chr(42) Next c ReDim vVALs(1 To 1) With Intersect(.Columns(2), .Cells(1, 1).CurrentRegion) For c = 1 To UBound(vCRITs, 1) Step 2 If c = UBound(vCRITs, 1) Then .AutoFilter Field:=1, Criteria1:=vCRITs(c, 1) Else .AutoFilter Field:=1, Criteria1:=vCRITs(c, 1), Operator:=xlOr, Criteria2:=vCRITs(c + 1, 1) End If With .Offset(1, 0).Resize(.Rows.Count - 1, 1) If CBool(Application.Subtotal(103, .Columns(1))) Then For Each rng In .SpecialCells(xlCellTypeVisible) vVALs(UBound(vVALs)) = rng.Value2 ReDim Preserve vVALs(1 To UBound(vVALs) + 1) Next rng End If End With .AutoFilter Field:=1 Next c ReDim Preserve vVALs(1 To UBound(vVALs) - 1) .AutoFilter Field:=1, Criteria1:=(vVALs), Operator:=xlFilterValues End With End With Application.ScreenUpdating = True End Sub 

testing了50K行的随机数据。 将工作表中的列B过滤为列A中的每个值(程序通配符)。