我有一系列大约40,000-60,000行的数据,格式如下:
CustomerID | Item_Code | Product
我需要选择所有 CustomerID ,它们与特定 Item_code 和产品相匹配,通常少于1,000行。
我写了下面的公式,它被粘贴为数组公式:
=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种组合。正是这个数组公式在我的程序中占用了大部分时间。
有没有更好的方法来查询此信息以最大化速度?
答案 0 :(得分:1)
非VBA方法
您可以手动设置自动过滤器。要了解有关自动筛选的详情,请参阅THIS
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
<强>输出强>