-1

我的 Excel 文件中有以下数据:

表 1

Product      Quantity
Alpha        100
Bravo        200
Charlie      300

表 2

Product      Quantity
Bravo        100
Delta        200

表 3

Product      Quantity
Charlie      100
Delta        200

我想获取多个工作表中的所有记录,并提供一个总结顶级产品的 Excel 工作表:

概括

Product      Quantity
Charlie      400
Delta        400
Bravo        300
Alpha        100

有什么办法可以做到这一点?

4

3 回答 3

1

假设:

1) 每个选项卡中的数据从 A 到 B 列的第 2 行开始,产品在 A 列

2)在这些选项卡中,数据都没有超过第 1000 行(如果有,则将此值的公式(和命名范围)中的所有出现更改为适当更大的数字)

3)任何选项卡中的数据之间都没有空白单元格

4) 您使用的是 Excel 2007 或更高版本

然后,首先,在摘要表中某处的水平范围内列出所有相关的工作表名称(不包括摘要表),例如 D1:F1,确保您准确地列出它们在选项卡上显示的内容。

其次,转到名称管理器并定义两个新名称:

名称: Arry1

指: =MMULT(TRANSPOSE(COUNTIFS(INDIRECT("'"&$D$1:$F$1&"'!A2:A1000"),A$2:A2,INDIRECT("'"&$D$1:$F $1&"'!A2:A1000"),"<>")),ROW(INDIRECT("1:"&COUNTA(A$2:A2)))^0)

名称: Arry2

指: =SUBTOTAL(3,INDIRECT("'"&$D$1:$F$1&"'!A2:A1000"))

(确保当您创建这些时,它们与此处显示的完全相同。有时,如果粘贴进去,您可能会在公式周围加上引号,这是不正确的。)

在摘要表的单元格 A2 中输入:

=工作表1!A2

(或者不管你的第一张纸的名字是什么。)

然后,在摘要表的 A3 中,此数组公式**

=IFERROR(INDEX(INDIRECT("'"&INDEX($D$1:$F$1,MATCH(FALSE,Arry1=TRANSPOSE(Arry2),0))&"'!A2:A1000"),MATCH(0,COUNTIF( A$2:A2,INDIRECT("'"&INDEX($D$1:$F$1,MATCH(FALSE,Arry1=TRANSPOSE(Arry2),0))&"'!A2:A1000")),0))," ")

复制下来,直到你开始得到空白。

在 B2(非数组)中:

=IF(A2="","",SUMPRODUCT(SUMIF(INDIRECT("'"&$D$1:$F$1&"'!A:A"),A2,INDIRECT("'"&$D$1: $F$1&"'!B:B"))))

再一次,复制下来,直到你开始得到空白。

问候

**数组公式的输入方式与“标准”公式不同。不是只按 ENTER,而是先按住 CTRL 和 SHIFT,然后再按 ENTER。如果操作正确,您会注意到 Excel 在公式周围放置了大括号 {}(尽管不要尝试自己手动插入这些括号)。

于 2014-05-30T15:07:12.307 回答
1

编辑:比在单元格中使用工作表名称更好的方法是将它们作为另一个命名范围,例如Sheets

={"Sheet1","Sheet2","Sheet3"}

那么公式是:

=IFERROR(INDEX(INDIRECT("'"&INDEX(Sheets,MATCH(FALSE,Arry1=TRANSPOSE(Arry2),0))&"'!A2:A1000"),MATCH(0,COUNTIF(A$2:A2,INDIRECT ("'"&INDEX(Sheets,MATCH(FALSE,Arry1=TRANSPOSE(Arry2),0))&"'!A2:A1000")),0)),"")

问候

于 2014-05-30T16:59:29.577 回答
0

创建具有多个合并范围的数据透视表。对于带有图像的示例(但您的情况更简单),请参见此处

于 2014-05-30T13:24:54.537 回答