在基于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"
替代
- 我们知道我们不想要的价值。 我们可以找出相关栏目的价值
- 只需将相关列的值存储在数组中,然后通过将其与具有我们不想要的值的数组进行比较,从中删除不必要的值。
- 从arrays中删除空白单元格
- 将最后一个数组传递给自动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
产量