Excel 2013 – 与date范围求和

美好的一天,我终于决定寻求帮助。 我有1个工作簿,多个工作表。 公式给了我#Value! 我知道它有一个错误的数据types。 我只是想看一个date范围内的一个范围内,然后添加一列数字在2个单独的列,并将这两列分开乘以30.它相当于这个。 SUM(D31 / C31)* 30。 这个小公式在使用数字时效果很好。 我把总小时数除以产量乘以每小时30美元。 很明显,我会为每年的每个月做这个。

2张标签如下所示。 以下公式在“每月”表中。 它是参考表“总体成本”。 我希望给你足够的信息,或许你可能有时间来帮助我。 注:我有这个范围很长,因为这应该是全年工作,所以我做了10000行深。

式:

=SUMPRODUCT(('Overall Cost'!$B$3:$B$10000<=DATE(2015,9,30))*('Overall Cost'!$B$3:$B$10000>=DATE(2015,9,1)),SUM(('Overall Cost'!$D$3:$D$10000)/SUM('Overall Cost'!$C$3:$C$10000))*30) 

样本数据:

  "B" "C" "D" SQ FT Hours Date OH OH Wednesday 8/10/15 3427 232 Thursday 8/11/15 5536 232 Friday 8/12/15 2364 232 Monday 8/1/15 6408 232 Tuesday 9/4/15 2499 232 Wednesday 9/5/15 870 232 

您不能像SUMPRODUCT函数那样使用SUM函数 。 SUMPRODUCT正在尝试逐行处理每行,SUM将所有行合计为一个数字。

你也会得到一些#DIV/0! 由于SUMPRODUCT强大的计算模式而导致的错误。 您的额外行低至10000可以截至B列date的范围内,因为它们的标准,这意味着列C和D中的数字不会超过最后一天的行有意义。

 =SUMPRODUCT(('Overall Cost'!B$3:INDEX('Overall Cost'!B:B, MATCH(1E+99, 'Overall Cost'!B:B ))<DATE(2015, 10, 1))* ('Overall Cost'!B$3:INDEX('Overall Cost'!B:B, MATCH(1E+99, 'Overall Cost'!B:B ))>=DATE(2015, 9, 1)), 'Overall Cost'!$D$3:INDEX('Overall Cost'!D:D, MATCH(1E+99,'Overall Cost'!B:B)), 30/'Overall Cost'!$C$3:INDEX('Overall Cost'!C:C, MATCH(1E+99,'Overall Cost'!B:B ))) 

我也调整了你的math层次。 乘以列C和D的分割与乘以列D乘以由列30创build的分数C相同。

与INDEX限制器SUMPRODUCT

如果你在C列中没有零值,你应该没问题。 如果你这样做,那么IFERROR函数或其他标准可能不得不被带入。这个公式也限制了只计算空白单元格没有空白“安全区域”所需的计算。

如果哟仍在接收#DIV/0! 错误,那么在列C中必须有空单元格或0单元格。A #DIV/0! 错误是字面上的; 你正试图把一个数字除以零。

这可以通过IFERROR函数来解决,但需要额外的一层处理,因此您需要使用Ctrl + Shift + Enter 来完成以下公式。

 =SUMPRODUCT((oc!B$3:INDEX(oc!B:B, MATCH(1E+99, oc!B:B ))<DATE(2015, 10, 1))* (oc!B$3:INDEX(oc!B:B, MATCH(1E+99, oc!B:B ))>=DATE(2015, 9, 1)), oc!$D$3:INDEX(oc!D:D, MATCH(1E+99,oc!B:B)), IFERROR(30/oc!$C$3:INDEX(oc!C:C, MATCH(1E+99,oc!B:B )), 0)) 

当遇到#DIV/0!时,可以用非CSE公式来模拟分子为零和分母为1的情况#DIV/0! 情况。

 =SUMPRODUCT((oc!B$3:INDEX(oc!B:B, MATCH(1E+99, oc!B:B ))<DATE(2015, 10, 1))* (oc!B$3:INDEX(oc!B:B, MATCH(1E+99, oc!B:B ))>=DATE(2015, 9, 1))* (oc!$C$3:INDEX(oc!C:C, MATCH(1E+99,oc!B:B ))<>0), oc!$D$3:INDEX(oc!D:D, MATCH(1E+99,oc!B:B)), 30/(oc!$C$3:INDEX(oc!C:C, MATCH(1E+99,oc!B:B ))+ (oc!$C$3:INDEX(oc!C:C, MATCH(1E+99,oc!B:B ))=0)))