首页 > 解决方案 > 如何根据范围自动过滤 - VBA代码

问题描述

我想制作一个代码,根据这些数字的某个范围过滤掉采购订单(6 位数字)数字。

我的工作簿中有 2 张纸。第一个称为“开始”,包括范围 A1:A4 中的数字,即 180029、180298、181073、190152。在第二个选项卡上,称为 PO 列表,我有一个信息范围 - 15 列,23 行。PO 列表的其中一列包含几个 PO 编号,但我想只过滤掉 A1:A4 范围内的那些——我认为它是一个数组。

Sub auto_filter()
    Dim my_array() As Variant
    my_array = Sheets("Start").Range("A1:A4").Value

    Sheets("PO list").Range("A1").AutoFilter Field:=7, Criteria1:=my_array
    'Operator:=xlFilterValues

我希望得到的结果是 A1:A4 范围内的 PO 编号将在选项卡 PO 列表中被过滤掉。我编写的代码只过滤掉了采购订单号 190152 - 其他三个被省略了。

标签: excelvba

解决方案


您将在此处遇到的问题与维度有关 -Range.Autofilter方法需要一个 1D 数组,但您传递给它的是 1×4 2D 数组

Dim RangeArray() As Variant, FilterArray() As Variant, ArrayPointer As Long
RangeArray = ThisWorkbook.Worksheets("Start").Range("A1:A4").Value

'Copy to a Base0 1D Array
ReDim FilterArray(1 To uBound(RangeArray,1)-lBound(RangeArray,1))

For ArrayPointer = 0 To uBound(FilterArray)
    FilterArray(ArrayPointer) = RangeArray(ArrayPointer+lBound(RangeArray,1), lBound(RangeArray,2))
Next ArrayPointer

'Use the 1D Array
ThisWorkbook.Worksheets("PO List").Range("A1").Autofilter Field:=7, Criteria1:=FilterArray, Operator:=xlFilterValues

推荐阅读