使用多个条件优化vlookup(索引+匹配)

时间:2013-08-14 13:30:30

标签: excel optimization indexing excel-match

我有一个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索引搜索的示例(分支名称是最终用户可以更改的唯一变量):

Index

在它搜索的823x20工作表中(实际上A列没有合并):

enter image description here

2 个答案:

答案 0 :(得分:1)

有关具有多个条件的查找的摘要和选项,您可以查看this

我使用了很多方法2 here(它是非数组公式)和方法here

我想你应该试着检查一下他们的速度。

答案 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)))

请注意,具有命名范围的公式解决方案取决于按“分支”排序的“结果”表中的数据。这对你有用吗?