Excel 2013 - 与日期范围相加的总和

时间:2015-09-30 14:23:15

标签: excel excel-formula

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

2张标签如下。以下公式位于“每月”表格中。它是参考表“总成本”。我希望我已经给你足够的信息,也许你可能有时间来帮助我。注意:我的范围非常长,因为这应该适用于全年,因此我将其设置为10,000行。

公式:

=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

1 个答案:

答案 0 :(得分:0)

您不能在SUM function内使用SUMPRODUCT function。 SUMPRODUCT正在尝试逐行处理,并且SUM将所有行合计为一个数字。

由于SUMPRODUCT强大的计算模式,您还会遇到一些#DIV/0!错误。您的额外行(范围低至10000)可以截断到B列中日期的范围。由于它们是标准,因此可以确定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 )))

我还调整了你的数学层次。将列C和D的除法相乘与将列D乘以由列C在30上创建的分数相同。

SUMPRODUCT with INDEX limiters

如果您在C栏中没有零值,那么您应该没问题。如果您这样做,则可能必须引入IFERROR function或其他标准。此公式还将计算仅限于完全没有空白单元格的空白“安全区”所需的条件。

如果您仍然接收#DIV/0!错误,那么C列中必须有空白单元格或 0 的单元格。#DIV/0!错误是从字面上看;你试图将数字除以零。

这可以通过IFERROR function解决,但需要额外的处理层,因此您需要使用 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!情况时,可以通过强制分子归零和分母为1来模拟非CSE公式。

=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)))