【发布时间】:2014-01-02 02:45:11
【问题描述】:
花名册是我在工作中浪费大量时间的报告之一。这是当前分配给特定客户的每个员工的多站点、多合同列表。目前,它有 6,000 多行,20 多列,针对 3 个不同的数据集进行索引。不是世界上最大的混乱,但仍然很痛苦。而且几乎都在 excel 中,因为不知何故我没有 Access 的商业案例。
但是这个怪物的一部分与众不同。每个站点一个标签Site Totals,每次任何代理接受培训时都会列出。第二个标签(同样,每个站点一个)Site Data 仅显示最近的培训课程,以及他们在该课程中获得的证书。
第二个选项卡由该数组公式的变体驱动 - Last_Row 是另一个选项卡上的命名范围,A 列是 Site Totals 上的 UID 列的轴心。为了便于阅读,我将其分开:
=IF(INDEX('Site Totals'!B:B,LARGE(($A2=INDIRECT("'Site Totals'!$A$1:$A$"&Last_Row))*
(INDIRECT("'Site Totals'!B1:B"&Last_Row)<>"")*
ROW(INDIRECT("'Site Totals'!$A$1:$A$"&Last_Row)),1))="Trainer",
"",
INDEX('Site Totals'!B:B,LARGE(($A2=INDIRECT("'Site Totals'!$A$1:$A$"&Last_Row))*
(INDIRECT("'Site Totals'!B1:B"&Last_Row)<>"")*
ROW(INDIRECT("'Site Totals'!$A$1:$A$"&Last_Row)),1)))
我知道这个公式的作用,但我不知道如何改进它。这个公式需要改,因为目前是5亿计算量级(我不允许删除历史数据),计算工作簿需要3个小时...如果它不崩溃Excel首先。
我对 VBA 和/或自定义函数持开放态度,但更愿意使用本机 Excel 函数。我无法安装任何东西,所以任何解决方案都必须是原生 Excel,并且必须与 Excel 2007 兼容。
【问题讨论】:
-
在我的脑海中,删除
Trainer的检查已经可以加快速度了。这是因为您已经在应用您需要的公式,然后检查它是否符合您的IF条件,如果检查结果为 @,则仅重复整个计算987654327@。另外,就个人而言,我认为此时 UDF 更有帮助,因此无需多次应用INDIRECT,这已经是一个相对较慢的公式。 -
@BK201 在这种情况下什么是 UDF?
标签: excel excel-2007 vba