根据多个标准提取项目的更好方法?
我有大约40,000-60,000行的数据范围,格式如下:
CustomerID | Item_Code | Product
我需要select与特定Item_code和Product (通常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_codeRange和DayRange需要迭代,其中大约有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
产量