在基于VBA中另一个工作表中的值使用数组的数组时,无法过滤出一个工作表上的行

我的意图是有以下代码从我的“低CPM 1”工作表中编译数据到一个数组,然后过滤我的活动工作表基于此数组。 虽然macros似乎影响filter,但没有任何值被过滤掉。 任何帮助这个问题将不胜感激

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 

自动filter没有简单的方法来实现你想要的。 你不能使用Criteria1:="<>MyArray"

替代

  1. 我们知道我们不想要的价值。 我们可以找出相关栏目的价值
  2. 只需将相关列的值存储在数组中,然后通过将其与具有我们不想要的值的数组进行比较,从中删除不必要的值。
  3. 从arrays中删除空白单元格
  4. 将最后一个数组传递给自动filter。

在行动

假设我们的工作表如下图所示。 我只以15行为例。

在这里输入图像说明

 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 

产量

在这里输入图像说明