使用带有数组的自动过滤器作为条件并搜索包含

时间:2015-05-25 19:56:08

标签: excel vba excel-vba

我做了大量的谷歌搜索,找不到任何解决方案。我在A列中列出了5-10个项目,在B列中我有大约500k行(如果它少了我可以循环它们)。

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

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

pkg-config --libs glib-2.0 --msvc-syntax

我已经尝试过各种各样的方法来包含通配符,但它不起作用。

我只想到了一个可能的解决方案,循环遍历if语句,找到准确的标准数量,并制作10个左右不同的自动过滤器代码。我不确定这是否会起作用,但它根本不会很优雅。

1 个答案:

答案 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列中的每个值进行过滤(由程序通配)。

相关问题