如何根据范围自动过滤-VBA代码

时间:2019-06-27 13:32:34

标签: excel 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选项卡列表中被过滤掉。我编写的代码仅过滤出PO号190152-其他三个省略了。

1 个答案:

答案 0 :(得分:0)

您将遇到的问题与尺寸有关-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