根据多个标准提取项目的更好方法?

我有大约40,000-60,000行的数据范围,格式如下:

CustomerID | Item_Code | Product 

我需要select与特定Item_codeProduct (通常less于1,000行)匹配的所有CustomerID

我写了下面的公式,它被粘贴为一个数组公式:

 =IFERROR( INDEX( MyDataRange, SMALL( IF( (Item_Code=Item_CodeRange)*(Product=ProductRange), ROW(Item_Code)-ROW($C$2)+1, ROW($C$100000) ), ROW()-1 ), 1 ), 0) 

它索引我的数据并返回与“ Item_CodeRange ”和“ ProductRange ”相匹配的项目,这些项目的命名范围都是用VBA更改的。 根据数组中的位置,“ Small( ”)和“ row( ”)部分简单地将它们按从小到大的顺序排列。

我每分钟粘贴一次这个公式,每个组合Item_codeRangeDayRange需要迭代,其中大约有250个组合。 这是我的程序中大部分时间占用的数组公式。

有没有更好的方法来查询这个信息来最大限度地提高速度?

非VBA方法

您可以手动设置自动filter。 要了解有关自动filter的更多信息,请参阅本文

VBA方法

可以说你的工作表看起来像这样。

在这里输入图像说明

使用这个代码。 请注意,这只是一个示例代码,你将不得不编辑它以适应你的情况。

 Sub Sample() Dim ws As Worksheet Dim MyRange As Range Dim CustomerID As String, Item_Code As String, Product As String Dim lRow As Long CustomerID = "100" Item_Code = "ABC" Product = "Blah Blah" Set ws = ThisWorkbook.Worksheets("Sheet1") With ws lRow = .Range("A" & .Rows.Count).End(xlUp).Row Set MyRange = .Range("A1:C" & lRow) '~~> Remove any filters .AutoFilterMode = False With MyRange .AutoFilter Field:=1, Criteria1:="=" & CustomerID .AutoFilter Field:=2, Criteria1:="=" & Item_Code .AutoFilter Field:=3, Criteria1:="=" & Product End With '~~> Remove any filters '.AutoFilterMode = False End With End Sub 

产量

在这里输入图像说明