4

我有一个 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) 索引搜索,而我' m 甚至还没有完成创建搜索的一半。

在我的项目早期,这些搜索只有一个标准,所以我使用VLOOKUP()了,结果很快就出来了。但是,现在我需要根据三个标准查找值,而上面的函数是我设法完成此任务的最佳方法。然而,它似乎是我得到的长计算时间的原因。所以我的问题是:如何优化VLOOKUP()多个标准?我应该调整INDEX(1, MATCH()*MATCH(), MATCH())还是有更快的方法来做到这一点?

这是 12x18 索引搜索的示例(分支名称是最终用户能够更改的唯一变量):

指数

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

在此处输入图像描述

4

2 回答 2

1

对于具有多个条件的查找的摘要和选项,您可以检查

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

我想你应该试试他们来检查他们的速度。

于 2014-12-21T15:47:36.700 回答
0

首先,这不能简单地通过在工作表“结果”中的 A 列上进行过滤来完成吗?我认为这是最直接的解决方案。

但是,我根据您描述的标准创建了一个示例工作簿。可以在这里找到

首先,我通过使用高级过滤器为工作表“结果”列 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)))

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

于 2013-08-14T15:35:18.793 回答