Vba 基于多个条件提取项目的更好方法?
我有一个大约40000-60000行的数据范围,格式如下:Vba 基于多个条件提取项目的更好方法?,vba,excel,excel-formula,Vba,Excel,Excel Formula,我有一个大约40000-60000行的数据范围,格式如下: CustomerID | Item_Code | Product 我需要选择所有的客户ID,这些ID与特定的项目(u代码)和产品(通常少于1000行)匹配 我编写了以下公式,粘贴为数组公式: =IFERROR( INDEX( MyDataRange, SMALL( IF(
CustomerID | Item_Code | Product
我需要选择所有的客户ID,这些ID与特定的项目(u代码)和产品(通常少于1000行)匹配
我编写了以下公式,粘贴为数组公式:
=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\u CodeRange”和“ProductRange”匹配的项目,这两个项目都是使用VBA
更改的命名范围。公式的“小(
”和“行(
”部分只是根据它们在数组中的位置将它们从最小到最大排列
我每分钟将这个公式粘贴几次,每次组合Item_coderage和DayRange我都需要迭代,其中大约有250个组合。正是这个数组公式占用了我程序中的大部分时间
是否有更好的方法查询此信息以最大限度地提高速度?非VBA方法 您可以手动设置自动筛选。要了解有关自动筛选的详细信息,请参阅 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
输出
非VBA方法 您可以手动设置自动筛选。要了解有关自动筛选的详细信息,请参阅 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
输出
@pnuts我尝试过数据透视表解决方案,但必须循环所有可能的条件才能将其设置为“visible=false”,结果花费的时间比数组公式长。我支持Sid对自动筛选的建议。您尝试过吗?@pnuts我尝试过数据透视表解决方案,但必须循环所有可能的条件才能将其设置为“visibl”e=false'最终花费的时间比数组公式要长。我支持Sid对autofilter的建议。您尝试过吗?谢谢siddharth,autofilter是一种方法,它比数据透视表快得多!谢谢siddharth,autofilter是一种方法,它比数据透视表快得多!