SUMIF排除隐藏行。小计? SUMPRODUCT?

时间:2015-12-03 16:24:37

标签: excel excel-formula excel-2010

我有2个大型事件表。第一个表是一个数据表(tblData),它包含日期,持续时间和代码(用于标识事件)。第二个表是每个事件所用总时间的汇总表(tblSummary)。

如何过滤tblData并更新tblSummary

以下是tblData的一小部分。请注意,第2级代码有3列(L2aL2bL2c);这意味着如果我要查找级别2代码“EL”的总持续时间,我必须检查所有3列并添加他们的Duration次。如下图所示,总“EL”时间为9.9

tblData

下面是一段tblSummary

tblSummary

对于Total列,我使用SUMIF (tblData[L2a], [@[Lvl 2 Code]], tblData[Duration])来获取代码的总时间,但这包括隐藏的行。当我更改tblSummary上的过滤器时,tblData不会更新。

我相信使用SUBTOTAL是一个死胡同。这将解决隐藏列问题,但由于无法设置标准,因此我无法将其应用于tblSummary

我是SUMPRODUCT的新手,但我确实尝试使用

=SUMPRODUCT(SUBTOTAL(109,tblData[Duration]),--(tblData[L2a]="EL"))

但收到了#VALUE!。我按了Ctl + Shift + Enter

1 个答案:

答案 0 :(得分:2)

SUMIF function的列值条件耦合在一起,同时忽略隐藏的行意味着我们必须在SUBTOTAL function上强制执行额外的计算层,并使用{{3的循环计算来收集聚合}}。处理的额外“层”将通过SUMPRODUCT function完成。

OFFSET function¹

tblSummary sumif_hidden1 总计列(又名K15)第一行的标准公式为,

=SUMPRODUCT((SUBTOTAL(103, OFFSET(tblData, ROW(tblData)-ROW(INDEX(tblData, 1, 0)), 0, 1, 1))=1)*(tblData[L2a]=[@[Lvl 2 Code]]), tblData[Duration])

如果表格没有为您执行此操作,请填写。

当我们过滤 tblData 表的日期列以隐藏2015年11月24日,2015年11月27日和2015年11月28日时,新的总数显示在 tblSummary 表。

structured table

¹当整个工作簿中的任何内容发生变化时,不仅在影响其结果的某些内容发生变化时,挥发性函数都会重新计算。 易失性函数的示例包括sumif_hidden2INDIRECTOFFSETTODAYNOWRANDRANDBETWEENCELL工作表函数的某些子函数也会使它们变得不稳定。