Excel总和(间接))

时间:2018-07-05 14:16:05

标签: excel vba

我创建了一个代码,该代码的用户类型需要多少个阶段,然后从那里从“ stage1”工作表中复制这些阶段。在另一张纸上,我试图创建一个sum(indirect))公式来查找物料编号,然后对应于“按订单量”列。我创建了这个公式:

  

= SUMIF(INDIRECT(“ Stage1!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage1!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage2!$ C $ 6” :$ C $ 18“),$ A5,INDIRECT(” Stage2!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage3!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage3 !$ E $ 6:$ E $ 18“)))+ SUMIF(INDIRECT(” Stage4!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage4!$ E $ 6:$ E $ 18“)))+ SUMIF( INDIRECT(“ Stage5!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage5!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage5!$ C $ 6:$ C $ 18”) ,$ A5,INDIRECT(“ Stage6!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage7!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage7!$ E $ 6:$ E $ 18“)))+ SUMIF(INDIRECT(” Stage8!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage8!$ E $ 6:$ E $ 18“)))+ SUMIF(INDIRECT(” Stage9!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage9!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage10!$ C $ 6:$ C $ 18“),$ A5,INDIRECT( “ Stage10!$ E $ 6:$ E $ 18”)))+ SUMIF(INDIRECT(“ Stage11!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage11!$ E $ 6:$ E $ 18”)))+ SUMIF(INDIRECT(“ Stage12!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage12!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage13!$ C $ 6:$ C $ 18 “),$ A5,INDIRECT(” Stage13!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage14!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage14!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage15!$ C $ 6:$ C $ 18“),$ A5,INDIRECT( “ Stage15!$ E $ 6:$ E $ 18”)))+ SUMIF(INDIRECT(“ Stage16!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage16!$ E $ 6:$ E $ 18”)))+ SUMIF(INDIRECT(“ Stage17!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage17!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage18!$ C $ 6:$ C $ 18 “),$ A5,INDIRECT(” Stage18!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage19!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage19!$ E $ 6“ :$ E $ 18“)))+ SUMIF(INDIRECT(” Stage20!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage20!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage20!$ C $ 6:$ C $ 18“)) !$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage21!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage22!$ C $ 6:$ C $ 18“),$ A5, INDIRECT(“ Stage22!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage23!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage23!$ E $ 6:$ E $ 18”) )+ SUMIF(INDIRECT(“ Stage24!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage24!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage25!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage25!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage26!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage26!$ E $ 6:$ E $ 18“)))+ SUMIF(INDIRECT(” Stage27!$ C $ 6:$ C $ 18“), $ A5,INDIRECT(“ Stage27!$ E $ 6:$ E $ 18”))+ SUMIF(INDIRECT(“ Stage28!$ C $ 6:$ C $ 18”),$ A5,INDIRECT(“ Stage28!$ E $ 6:$ E $ 18“))+ SUMIF(INDIRECT(” Stage29!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage29!$ E $ 6:$ E $ 18“)))+ SUMIF(INDIRECT(” Stage30!$ C $ 6:$ C $ 18“),$ A5,INDIRECT(” Stage30!$ E $ 6:$ E $ 18“))

但是当我使用它并让用户仅输入9个阶段时,然后#REF!错误回来了。任何帮助将是巨大的!我被困了一段时间。

谢谢!

1 个答案:

答案 0 :(得分:2)

我想我明白了您要做什么。您希望INDIRECT将本质上相同的SUMIF应用于多个工作表。这是减少工作表数量的示例。

我使用以下数据创建了四个相同的工作表,分别为Stage1,Stage2,Stage3和Stage4。

enter image description here

然后在Sheet1(我打算使用该公式的地方)中,我列出了F2:F5中相同的工作表。在A5中,我为标准使用了一个值,然后在B5中,我使用了此公式。

'standard formula with known number of worksheets
 =SUMPRODUCT(SUMIF(INDIRECT(TEXT(F$2:F$5, "'@'!")&"C6:C18"),$A5,INDIRECT(TEXT(F$2:F$5, "'@'!")&"E6:E18")))
'array formula for unknown number of worksheets
=SUMPRODUCT(IFERROR(SUMIF(INDIRECT(TEXT(F$2:F$5, "'@'!")&"C6:C18"),$A5,INDIRECT(TEXT(F$2:F$5, "'@'!")&"E6:E18")), 0))

在下面的示例图像中,您可以看到该公式正在从每个工作表中提取SUMIF小计并产生总计。

如果您不想修改工作表列表,则可以使用第二个公式。如果找不到工作表,它将为列表中的该名称返回零,而不是#REF!错误。

请注意,第二个公式是数组公式,必须以ctr + shift + enter结束,而不仅仅是输入。

enter image description here

第二个数组公式和列表中不存在的工作表名称。

enter image description here

现在,您应该可以通过创建要汇总的工作表列表来显着减少公式。并调整上述公式以适合。

您可以通过将此公式放在Sheet1!G2中并填写来测试列表中的工作表名称。

=NOT(ISERROR(INDIRECT(TEXT(F2, "'@'!")&"A1")))

TRUE表示工作表存在于工作簿中,FALSE表示您在某处犯规。

相关问题