Excel:通过多个工作表进行相关的下拉计算(具有不同的列位置)

Posted

技术标签:

【中文标题】Excel:通过多个工作表进行相关的下拉计算(具有不同的列位置)【英文标题】:Excel: Dependent drop-down calculations through multiple sheets (with different columns position) 【发布时间】:2020-09-16 06:30:59 【问题描述】:

我正在尝试做的是通过同一工作簿中具有相似结构的不同工作表进行一些计算(在主工作表上),因此一旦我从下拉列表中选择某些内容,它应该计算例如总吨位通过所有的工作表,它会给我主页(J4)上的结果。有更多的字段要计算,但我只需要另一个想法或意见如何继续..工作表相似但不一致,组合数字/文本,实际上只是一些随机数据。

这是我在 J4 - J7 列上使用的公式

J4=IF($A$4=Calculation!$A$2&" ";SUM(tbl_CS1B[Menge '[t']]);IF($A$4=Calculation!$A$4&" ";SUM(tbl_CS2A[Menge '[t']]);IF($A$4=Calculation!$A$7&" ";SUM(tbl_CS3E[Menge '[t']]);IF($A$4=Calculation!$A$8&" ";SUM(tbl_CS3F[Menge '[t']]);IF($A$4=Calculation!$A$9&" ";SUM(tbl_CS3G[Menge '[t']]);IF($A$4=Calculation!$A$10&" ";SUM(tbl_CS3H[Menge '[t']]);IF($A$4=Calculation!$A$11&" ";SUM(tbl_CS3K[Menge '[t']]);IF($A$4=Calculation!$A$12&" ";SUM(tbl_CS3P[Menge '[t']]);IF($A$4=Calculation!$A$15&" ";SUM(tbl_CS7A[Menge '[t']]);IF($A$4=Calculation!$A$16&" ";SUM(tbl_CS7B[Menge '[t']]);IF($A$4=Calculation!$A$17&" ";SUM(tbl_CS7D[Menge '[t']]);IF($A$4=Calculation!$A$18&" ";SUM(tbl_CS7E[Menge '[t']]);""))))))))))))

J5=IF($A$4=Calculation!$A$2&" ";SUMPRODUCT(1/COUNTIF(tbl_CS1B[Charge];tbl_CS1B[Charge]));IF($A$4=Calculation!$A$4&" ";SUMPRODUCT(1/COUNTIF(tbl_CS2A[Charge];tbl_CS2A[Charge]));IF($A$4=Calculation!$A$7&" ";SUMPRODUCT(1/COUNTIF(tbl_CS3E[Charge];tbl_CS3E[Charge]));IF($A$4=Calculation!$A$8&" ";SUMPRODUCT(1/COUNTIF(tbl_CS3F[Charge];tbl_CS3F[Charge]));IF($A$4=Calculation!$A$9&" ";SUMPRODUCT(1/COUNTIF(tbl_CS3G[CS3G Charge];tbl_CS3G[CS3G Charge]));IF($A$4=Calculation!$A$10&" ";SUMPRODUCT(1/COUNTIF(tbl_CS3H[Charge];tbl_CS3H[Charge]));IF($A$4=Calculation!$A$11&" ";SUMPRODUCT(1/COUNTIF(tbl_CS3K[Charge];tbl_CS3K[Charge]));IF($A$4=Calculation!$A$12&" ";SUMPRODUCT(1/COUNTIF(tbl_CS3P[Charge];tbl_CS3P[Charge]));IF($A$4=Calculation!$A$15&" ";SUMPRODUCT(1/COUNTIF(tbl_CS7A[Charge];tbl_CS7A[Charge]));IF($A$4=Calculation!$A$16&" ";SUMPRODUCT(1/COUNTIF(tbl_CS7B[Charge];tbl_CS7B[Charge]));IF($A$4=Calculation!$A$17&" ";SUMPRODUCT(1/COUNTIF(tbl_CS7D[Charge];tbl_CS7D[Charge]));IF($A$4=Calculation!$A$18&" ";SUMPRODUCT(1/COUNTIF(tbl_CS7E[Charge];tbl_CS7E[Charge]));""))))))))))))

J6=IF($A$4=Calculation!$A$2&" ";SUMPRODUCT((tbl_CS1B[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS1B[Rohstoff-Charge];tbl_CS1B[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$4&" ";SUMPRODUCT((tbl_CS2A[Rohware Charge]<>"")/COUNTIF(tbl_CS2A[Rohware Charge];tbl_CS2A[Rohware Charge]&""));IF($A$4=Calculation!$A$7&" ";SUMPRODUCT((tbl_CS3E[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS3E[Rohstoff-Charge];tbl_CS3E[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$8&" ";SUMPRODUCT((tbl_CS3F[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS3F[Rohstoff-Charge];tbl_CS3F[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$9&" ";SUMPRODUCT((tbl_CS3G[Rohware Charge]<>"")/COUNTIF(tbl_CS3G[Rohware Charge];tbl_CS3G[Rohware Charge]&""));IF($A$4=Calculation!$A$10&" ";SUMPRODUCT((tbl_CS3H[Rohrware Charge]<>"")/COUNTIF(tbl_CS3H[Rohrware Charge];tbl_CS3H[Rohrware Charge]&""));IF($A$4=Calculation!$A$11&" ";SUMPRODUCT((tbl_CS3K[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS3K[Rohstoff-Charge];tbl_CS3K[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$12&" ";SUMPRODUCT((tbl_CS3P[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS3P[Rohstoff-Charge];tbl_CS3P[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$15&" ";SUMPRODUCT((tbl_CS7A[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS7A[Rohstoff-Charge];tbl_CS7A[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$16&" ";SUMPRODUCT((tbl_CS7B[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS7B[Rohstoff-Charge];tbl_CS7B[Rohstoff-Charge]&""));IF($A$4=Calculation!$A$17&" ";SUMPRODUCT((tbl_CS7D[Rohware Charge]<>"")/COUNTIF(tbl_CS7D[Rohware Charge];tbl_CS7D[Rohware Charge]&""));IF($A$4=Calculation!$A$18&" ";SUMPRODUCT((tbl_CS7E[Rohstoff-Charge]<>"")/COUNTIF(tbl_CS7E[Rohstoff-Charge];tbl_CS7E[Rohstoff-Charge]&""));""))))))))))))

J7=IF($A$4=Calculation!$A$2&" ";COUNTA(tbl_CS1B[Faß]);IF($A$4=Calculation!$A$4&" ";COUNTA(tbl_CS2A[Faß]);IF($A$4=Calculation!$A$7&" ";COUNTA(tbl_CS3E[Faß]);IF($A$4=Calculation!$A$8&" ";COUNTA(tbl_CS3F[Faß]);IF($A$4=Calculation!$A$9&" ";COUNTA(tbl_CS3G[Faß]);IF($A$4=Calculation!$A$10&" ";COUNTA(tbl_CS3H[Faß]);IF($A$4=Calculation!$A$11&" ";COUNTA(tbl_CS3K[Faß]);IF($A$4=Calculation!$A$12&" ";COUNTA(tbl_CS3P[Faß]);IF($A$4=Calculation!$A$15&" ";COUNTA(tbl_CS7A[Faß]);IF($A$4=Calculation!$A$16&" ";COUNTA(tbl_CS7B[Faß]);IF($A$4=Calculation!$A$17&" ";COUNTA(tbl_CS7D[Faß]);IF($A$4=Calculation!$A$18&" ";COUNTA(tbl_CS7E[Faß]);""))))))))))))

因此,您可以看到它有效,但公式长达数公里。有没有人可以通过任何其他解决方案或方法来帮助解决整个工作簿中的类似问题?我的 WB 被格式化为 Power Query 中的表格,这给了我更多的可能性,比如数据透视表等等。但我希望将这些信息放在一页而不是 XY 页面上,例如一种材料的数据透视表等等。

可以使用 INDIRECT 函数或其他组合来实现吗?

我正在使用 Office 2016。

【问题讨论】:

乍一看,似乎可以通过将嵌套的IFs 替换为CHOOSE(MATCH)) 来节省一些空间。如果您的表名遵循逻辑命名约定,那么您可以使用INDIRECTOFFSET 构建引用。但与在使用 PowerQuery 构建的主表上使用简单查找相比,这一切似乎都是不必要的复杂性。 YMMV。 @ProfoundlyOblivious 嗯,也许我应该多尝试一下 PQ 本身..你可能是对的 【参考方案1】:

Power Query 和 Power Pivot 可能是您的最佳选择。

您可以使用 INDIRECT,这是一个很好的解决方案,但会增加计算开销。

您还可以将计算的重复部分放入 VBA 函数中,并将工作表名称传递给它,但这会将 VBA 添加到文件中。

Power Query 可以从表中读取数据,包括一个工作簿中的多个表,然后您可以将数据一起附加到数据模型中。您可以为计算添加 DAX 度量。这还有一个副作用,就是更容易移植到 PowerBI,因为数据模型已经存在(如果你选择走这条路的话)。

很难详细说明,因为我看不到整个工作簿。我也不确定屏幕截图是计算工作表还是材料工作表之一。而且我不知道“仅在附近的一个实例”是什么意思。

如果您有完整工作簿的匿名副本,我可以更详细地查看它。

【讨论】:

感谢您的评论。我将更新一点我的描述,这些工作表实际上来自 Power Query,不幸的是,Power Pivot 在我的工作 Office 2016 版本上不可用。由于其他用户(与 Power BI 相关),我必须使用 Excel。工作表来自主工作表(材料),但可以更改。 如果您在 Office 2016 上安装了 Power Query,那么您就有了 Power Pivot - MS 删除了标识符。当您以正常方式创建数据透视表时,您应该看到一个选项“使用此工作簿的数据模型”而不是一个范围。所有有趣的东西都在 Power Query 中 我没有数据模型,也没有 Power Pivot 界面:D 我知道我在说什么……在家里我得到了。 试试这个:数据 -> 从表格/范围 -> 选择或填写表格范围 -> 点击确定。然后数据 -> 查询和连接。看看有没有什么事情发生。它曾经是一个附加组件,我认为它现在是内置的(只是工具栏等通常是隐藏的)

以上是关于Excel:通过多个工作表进行相关的下拉计算(具有不同的列位置)的主要内容,如果未能解决你的问题,请参考以下文章

如何将EXCEl中多张Sheet工作表转换成一个PDF

将具有多个表的 Access 数据库导出到具有多个工作表的 Excel

将多个 html 表转换为具有多个工作表的 Excel 工作簿

如何通过C++ 将数据写入 Excel 工作表

如何将html表格转换为具有多个工作表的excel?

使用 Jupyter notebook 将具有多个工作表的 Excel 文件转换为多个 csv 文件