这个查找(find最后一个相关项目)如何改进?

浪费了我一大堆工作时间的报告之一就是名册。 这是当前分配给特定客户的每个员工的多地点,多合同清单。 目前,它有超过6000行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和/或自定义函数,但宁愿有本地Excelfunction。 我无法安装任何东西,因此任何解决scheme都必须是本机Excel,并且必须与Excel 2007兼容。

如果您的源代码是数据透视表,请尝试使用GETPIVOTDATA函数。 你可以在没有INDIRECTINDEX情况下完成你想要的任务。

我所理解的是,每个人都没有参加过培训,如果你没有参加过这个培训,你想要回顾一下这个培训的名字,你希望在这个小组里有一个空白的空间。 如果这个描述是正确的,你可以试试这个formua,按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 contians人的名字。 如果您可以提供一些示例数据,我可以更精确地使用这个公式,但是我build议不要在Site Total worksshete中使用整个B和Columns,因为这会明显减慢计算过程,您可以使用B1:B8000或更小的范围,加快进程。 希望有所帮助。