我有一个12x18 Excel范围,它根据12x18范围的页面,行和列标题(标准1,标准2和标准3)从823x20工作表(Results!$A:$T
)中提取数据
={INDEX(Results!$A:$T,
MATCH(1, (criterion1 = Results!$A:$A) * (criterion2 = Results!$B:$B), 0),
MATCH(criterion3, Results!$A$1:$T$1, 0))}
正如您所看到的,数据并不多,但是当我更改页面标题时,我的计算机(2 GHz Intel Xeon和24 GB RAM)大约需要一分钟来更新216(12x18)索引搜索而且我甚至没有完成创建搜索的一半。
在我的项目早期,这些搜索只有一个标准,所以我使用了VLOOKUP()
,结果非常快。但是,现在我需要根据三个标准找到值,上面的函数是我设法完成此任务的最佳方法。然而,它似乎是我得到的长计算时间的原因。所以我的问题是:如何优化VLOOKUP()
多个条件?我应该调整INDEX(1, MATCH()*MATCH(), MATCH())
还是有更快的方法来做到这一点?
以下是12x18索引搜索的示例(分支名称是最终用户可以更改的唯一变量):
在它搜索的823x20工作表中(实际上A列没有合并):
答案 0 :(得分:1)
答案 1 :(得分:0)
首先,这不能简单地通过过滤“结果”表中的A列来实现吗?我认为这是最直接的解决方案。
但是,我已根据您描述的标准创建了一个示例工作簿。可以找到here
首先,我使用“高级过滤器”为工作表“结果”列A上的唯一值创建了一个唯一分支列表,并将它们放在工作表“列表”中,我创建了一个命名范围listUnqBranches。我使用该命名范围在工作表'Sheet1'单元格A1上创建数据验证下拉列表,以便用户可以选择他们想要查看的分支。我把那个单元格命名为。
接下来,我创建了两个命名范围。 rngDate由此动态命名范围公式定义:
=INDEX(Results!$B:$B,MATCH(Branch,Results!$A:$A,0)):INDEX(Results!$B:$B,MATCH(Branch,Results!$A:$A,0)+COUNTIF(Results!$A:$A,Branch)-1)
使用此动态命名范围公式定义rngLookup:
=INDEX(Results!$C:$C,MATCH(Branch,Results!$A:$A,0)):INDEX(Results!$T:$T,MATCH(Branch,Results!$A:$A,0)+COUNTIF(Results!$A:$A,Branch)-1)
最后,在工作表'Sheet1'单元格B2中,上下复制的是这个公式:
=IF(Branch="","",INDEX(rngLookup,MATCH($A2,rngDate,0),MATCH(B$1,Results!$C$1:$T$1,0)))
请注意,具有命名范围的公式解决方案取决于按“分支”排序的“结果”表中的数据。这对你有用吗?