Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel总和(间接)_Excel_Vba - Fatal编程技术网

Excel总和(间接)

Excel总和(间接),excel,vba,Excel,Vba,我创建了一个代码,其中的用户类型表示需要多少个阶段,然后从“stage1”工作表中复制这些阶段。在另一张纸上,我试图创建一个求和(间接)公式来查找物料编号,然后对应于“订单金额”列。我创造了这个公式: =SUMIF(间接(“阶段1!$C$6:$C$18”)、$A5,间接(“阶段1!$E$6:$E$18”))+SUMIF(间接(“阶段2!$C$6:$C$18”)、$A5,间接(“阶段2!$E$6:$E$18”)+SUMIF(间接(“阶段3!$C$6:$C$18”)、$A5,间接(“阶段3!$E$E

我创建了一个代码,其中的用户类型表示需要多少个阶段,然后从“stage1”工作表中复制这些阶段。在另一张纸上,我试图创建一个求和(间接)公式来查找物料编号,然后对应于“订单金额”列。我创造了这个公式:

=SUMIF(间接(“阶段1!$C$6:$C$18”)、$A5,间接(“阶段1!$E$6:$E$18”))+SUMIF(间接(“阶段2!$C$6:$C$18”)、$A5,间接(“阶段2!$E$6:$E$18”)+SUMIF(间接(“阶段3!$C$6:$C$18”)、$A5,间接(“阶段3!$E$E$6:$E$E$18”)+SUMIF(间接(“阶段4!$C$6:$C$18”)、$E$E4!$E$E$18”)、$C$18,$A5,间接的($Stage5!$E$6:$E$18”)+SUMIF(间接的($Stage6!$C$6:$C$18”),$A5,间接的($Stage6!$E$6:$E$18”)+SUMIF(间接的($Stage7!$C$6:$E$18”),$A5,间接的($Stage8!$C$C$C$18”),$A5,间接的($Stage8!$E$6:$E$E$18”)+SUMIF(间接的($Stage9!$C$C$6:$C:$18),间接的($6:$C$C$C$5)(阶段10!$C$6:$C$18”)、$A5,间接(阶段10!$E$6:$E$18”)+SUMIF(间接(阶段11!$C$6:$C$18”)、$A5,间接(阶段11!$E$6:$E$18”)+SUMIF(间接(阶段12!$C$6:$C$18”)、$A5,间接(阶段12!$E$6:$E$E$18”)+SUMIF(间接(阶段13!$C$C$6:$C$18”)、$A5,间接(阶段13!$E$E$E$6:$C$18)、$C$A5)(“阶段14!$E$6:$E$18”)+SUMIF(间接(“阶段15!$C$6:$C$18”)、$A5,间接(“阶段15!$E$6:$E$18”))+SUMIF(间接(“阶段16!$C$6:$C$18”)、$A5,间接(“阶段17!$C$6:$C$C$18”)、$A5,间接(“阶段17!$E$E$6:$E$E$E$18”))+SUMIF(间接(“阶段18!$C$C$C$18”)、$A5,间接”)第19阶段:$C$6:$C$18”)、$A5,间接(第19阶段:$E$6:$E$18”)+SUMIF(间接(第20阶段:$C$6:$C$18”)、$A5,间接(第20阶段:$E$6:$E$18”)+SUMIF(间接)(第21阶段:$C$18”)、$A5,间接(第21阶段:$E$6:$E$E$18”)+SUMIF(间接(第22阶段:$C$6:$C$18”)、$C$A5,间接(第22阶段:$E$E$6:$C$18)+SUMIF(第12阶段:$C$C$18)和第18阶段:$C$C$5,间接(第12阶段:$C$C$C$C$18)和第5阶段:$C$C$C$18第23阶段:$E$6:$E$18“)+SUMIF(间接(“第24阶段:$C$6:$C$18”)、$A5,间接(“第24阶段:$E$6:$E$18”))+SUMIF(间接(“第25阶段:$C$6:$C$18”)、$A5,间接(“第26阶段:$C$6:$C$C$18”)、$A5,间接(“第26阶段:$E$E$6:$E$E$E$18”)+SUMIF(间接(“第27阶段:$C$6:$C$C$18”)、$E$18”)+SUMIF(间接(“第27阶段:$C$C$6:$C$E$18”)、$C:$E阶段:)+SUMIF)(间接(“第17阶段:$C$C$C$C$18”)、$C$E阶段:)+SUMIF”)阶段28!$C$6:$C$18”),$A5,间接的(阶段28!$E$6:$E$18”)+SUMIF(间接的(阶段29!$C$6:$C$18”),$A5,间接的(阶段29!$E$6:$E$18”)+SUMIF(间接的(阶段30!$C$6:$C$18”),$A5,间接的(阶段30!$E$6:$E$18”))

但当我使用它时,用户只输入了9个阶段,然后出现了#REF!错误。任何帮助都会很好!我已经被困了一段时间


谢谢!

我想我明白了您的意图。您希望间接应用程序将本质上相同的SUMIF应用于多个工作表。下面是一个使用减少工作表数量的示例

我创建了4个相同的工作表,Stage1、Stage2、Stage3和Stage4,其中包含以下数据

然后在表1(我计划使用公式的地方)中,我列出了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

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

现在,您应该能够通过创建要小计的工作表列表,并调整上述公式来显著减少公式

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

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

TRUE表示工作表存在于工作簿中,FALSE表示您在某个地方出错。

我想我知道您正在尝试做什么。您希望间接应用程序将基本相同的SUMIF应用于多个工作表。下面是一个使用减少工作表数量的示例

我创建了4个相同的工作表,Stage1、Stage2、Stage3和Stage4,其中包含以下数据

然后在表1(我计划使用公式的地方)中,我列出了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

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

现在,您应该能够通过创建要小计的工作表列表,并调整上述公式来显著减少公式

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

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

TRUE表示工作表存在于工作簿中,FALSE表示您在某个地方出错。

INDIRECT(“Stage1!C$6:$C$18”)
这样的范围引用可以像
Stage1!C$6:$C$18:
一样容易编写。您使用INDIRECT似乎完全没有必要。@Jeeped打败了我……总是尽量避免
INDIRECT()
尽可能地,它是不稳定的(在工作簿中任何地方进行更改时都会重新计算),因此可以快速增加文件使用的资源。范围引用如
间接(“Stage1!