其中一个浪费我工作时间的报告是名册。它是当前分配给特定客户的每个员工的多站点,多合同列表。目前,它有20多个字符串,超过6,000行,针对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兼容。
答案 0 :(得分:0)
如果您的来源是数据透视表,请尝试使用GETPIVOTDATA
功能。您可以在没有INDIRECT
和INDEX
的情况下完成所需的工作。
答案 1 :(得分:0)
我所理解的是,每个人都已经/没有参加过培训,并且您想要检索该培训的名称,如果他没有,则需要在单元格中留出空白。如果此描述正确,您可以尝试此表格,按ctrl + shift + enter执行。
=IFERROR(INDEX('Site Totals'!B$1:B$12,MATCH(A2&"Trainer",'Site Totals'!A$1:A$12&'Site Totals'!B$1:B$12)),"")
这里A2包含了这个人的名字。如果你能提供一些样本数据,我可以更精确地使用这个公式,但我建议不要使用整个B&amp; “站点总计”中的列工作正常,因为这将明确减慢计算过程,而您可以使用B1:B8000或更小的范围来加速过程。希望有所帮助。