arrays - 无法根据 VBA 中另一个工作表中的值的数组过滤掉一个工作表上的行

标签 arrays vba excel autofilter

我的意图是让以下代码将我的“低 CPM 1”工作表中的数据编译成一个数组,然后根据这个数组过滤我的事件工作表。虽然宏似乎确实会影响过滤器,但没有任何值被过滤掉。对此事的任何帮助将不胜感激

  Sub Macro1()

Dim CPM1Array(0 To 300) As Variant

For i = 2 To UBound(CPM1Array)
    CPM1Array(i) = Sheets("Low CPM 1").Cells(i, 2).Value
Next i

    ActiveSheet.Range("$A$1:$H$251").AutoFilter Field:=3, Criteria1:=("<>1 to Ubound(CPM1Array)"), Operator:=xlFilterValues

End Sub

最佳答案

使用自动过滤器没有简单的方法来实现您想要的。您不能使用 Criteria1:="<>MyArray"
备选

  • 我们知道我们不想要哪些值。我们可以找出相关列的值是什么
  • 只需将相关列的值存储在一个数组中,然后通过将其与具有我们不想要的值的数组进行比较来从中删除不必要的值。
  • 从数组中删除空白单元格
  • 将最终数组传递给自动过滤器。

  • 在行动

    假设我们的工作表如下图所示。我举一个只有 15 行的例子。

    enter image description here

    代码
    Sub Sample()
        Dim ws As Worksheet
        Dim MyAr(1 To 5) As String
        Dim tmpAr As Variant, ArFinal() As String
        Dim LRow As Long
    
        ReDim ArFinal(0 To 0)
    
        Set ws = ActiveSheet
    
        '~~> Creating an array of values which we do not want
        For i = 1 To 5
            MyAr(i) = i
        Next i
    
        With ws
            '~~> Last Row of Col C sice you will filter on 3rd column
            LRow = .Range("C" & .Rows.Count).End(xlUp).Row
    
            '~~> Storing the values form C in the array
            tmpAr = .Range("C2:C" & LRow).Value
    
            '~~> Compare and remove values which we do not want
            For i = 1 To LRow - 1
                For j = 1 To UBound(MyAr)
                    If tmpAr(i, 1) = MyAr(j) Then tmpAr(i, 1) = ""
                Next j
            Next i
    
            '~~> Remove blank cells from the array by copying them to a new array
            For i = LBound(tmpAr) To UBound(tmpAr)
                If tmpAr(i, 1) <> "" Then
                    ArFinal(UBound(ArFinal)) = tmpAr(i, 1)
                    ReDim Preserve ArFinal(0 To UBound(ArFinal) + 1)
                End If
            Next i
    
            '~~> Filter on values which you want. Change range as applicable
            .Range("$A$1:$H$15").AutoFilter Field:=3, Criteria1:=ArFinal, Operator:=xlFilterValues
        End With
    End Sub
    

    输出

    enter image description here

    关于arrays - 无法根据 VBA 中另一个工作表中的值的数组过滤掉一个工作表上的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700261/

    相关文章:

    vba - 使用 ThisWorkbook.Sheets(1).Range 的 Excel vba 代码不起作用,但 Sheet1.Range 工作正常。为什么?

    python - 如何使用 xlwings 保存工作簿?

    excel - 删除指示解锁单元格受 VBA 保护的错误

    Perl - 无法访问 Excel 文件

    javascript - 序列化 JSON 数组并将其解析为数组

    在 C 中将短语转换为数字

    vba - 暂停 Outlook 给定的时间

    Excel VBA - 错误 1004

    C++从 double 组中减去均值

    java - 在 Java 中每月组合日期数组和总和值