我在发布之前已经彻底研究过,但仍然无法解决这个问题。
我目前有一个使用INDIRECT
逻辑的文件,用于将信息从一个工作表收集到摘要工作表。该文件完美无缺。但是我正在努力提高它的效率,因为由于波动太多,计算时间很长。
在数据工作表中,我有很多列,每个列都有一个概念和一个分配给它的帐号。 所以,例如:
5014255 5324232 5566544 Name Store Salary Taxes Other Benefit P1 Weight P2 Weight John Main 222222 50000 30000 0.4 0.6 Jane Annex 222224 50002 30004 0.3 0.7
然后在摘要页面中,我使用SUMPRODUCT
收集每个帐户的每个商店的信息并按期间分隔,如下所示:
Store Account Concept P1 P2 Main 5014255 Salary 88888.8 133333.2 Main 5324232 Taxes 20000.0 30000.0 Main 5566544 Other Benefit 12000.0 18000.0 Annex 5014255 Salary 66667.2 155556.8 Annex 5324232 Taxes 15000.6 35001.4 Annex 5566544 Other Benefit 9001.2 21002.8
这当然只是一个基本的例子。真实文件有几个验证和几个权重类别,用于不同的帐户。为了获取信息,我有以下公式。
=IFNA(SUMPRODUCT(
INDIRECT(INDEX("'Sheet1'!"&ADDRESS(6,COLUMN($A$5)+MATCH($N5,Sheet1!$1:$1,0)-1,4)&":"&SUBSTITUTE(ADDRESS(1,COLUMN($A$5)+MATCH($N5,Sheet1!$1:$1,0)-1,4),"1","")&$AU$1,1,1)),
--(Sheet1!$C$6:$C$1754=2018),
--(Sheet1!$J$6:$J$1754=$I5),
IF($G5=1,Sheet1!$BN$6:$BN$1754,IF($F5=1,Sheet1!$BA$6:$BA$1754,Sheet1!$AN$6:$AN$1754))
),0)
重要的代码是:
INDIRECT(INDEX("'Sheet1'!"&ADDRESS(6,COLUMN($A$5)+MATCH($N5,Sheet1!$1:$1,0)-1,4)&":"&SUBSTITUTE(ADDRESS(1,COLUMN($A$5)+MATCH($N5,Sheet1!$1:$1,0)-1,4),"1","")&$AU$1,1,1))
这使用字符串操作根据帐号生成列范围。例如,帐号5014255
会生成Sheet1!$C$6:$C$1754
,因此可以根据权重和验证收集该列中的值。
所以,我正试图改变逻辑以消除挥发物。但到目前为止,我还没能做到。
我基本上需要我的摘要才能找到帐号所在的列,因此可以使用该列进行sumproduct计算。
有关如何解决此问题的任何想法或建议?
答案 0 :(得分:0)
要获得没有使用挥发物的完整色谱柱:
INDEX(Sheet1!$C$6:$E$1754,0,MATCH($N5,Sheet1!$C$1:$E$1,0))
这会将正确的列返回到SUMPRODUCT公式
答案 1 :(得分:0)
很高兴听到你正在摆脱挥发性功能。一段时间以来,我一直在讲述他们的邪恶,包括: https://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/
我建议你再进一步:
请参阅以下问题的答案,以提高效率: Optimizing Excel formulas - SUMPRODUCT vs SUMIFS/COUNTIFS
如果您想要更多关于透视,请在此处查看我的答案: convert cross table to list to make pivot table
请注意,INDEX是半易失性的,这意味着它仍会在文件打开和保存时重新计算。