从动态列选择中删除INDIRECT

时间:2017-11-14 17:59:10

标签: excel

我在发布之前已经彻底研究过,但仍然无法解决这个问题。

我目前有一个使用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计算。

有关如何解决此问题的任何想法或建议?

2 个答案:

答案 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/

我建议你再进一步:

  • Ditch SUMPRODUCT如果可以,请改用SUMIF或SUMIFS。
  • 完全抛弃公式,取消您的数据,并使用数据透视表 代替。

请参阅以下问题的答案,以提高效率: Optimizing Excel formulas - SUMPRODUCT vs SUMIFS/COUNTIFS

如果您想要更多关于透视,请在此处查看我的答案: convert cross table to list to make pivot table

请注意,INDEX是半易失性的,这意味着它仍会在文件打开和保存时重新计算。