我做了大量的谷歌搜索,找不到任何解决方案。我在A列中列出了5-10个项目,在B列中我有大约500k行(如果它少了我可以循环它们)。
B列中的所有单元格都有大量数据,我想过滤其中包含A列中某个项目的单元格。
我的问题是,由于我使用数组作为条件,我似乎无法有效地添加通配符。有没有人有办法解决吗?这是我目前的代码:
pkg-config --libs glib-2.0 --msvc-syntax
我已经尝试过各种各样的方法来包含通配符,但它不起作用。
我只想到了一个可能的解决方案,循环遍历if语句,找到准确的标准数量,并制作10个左右不同的自动过滤器代码。我不确定这是否会起作用,但它根本不会很优雅。
答案 0 :(得分:0)
这个短子似乎可以很快地完成你的要求。
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
测试了50K行的随机数据。将列B的工作表留下,对A列中的每个值进行过滤(由程序通配)。