43

我有以下格式的excel数据。

Date        Amount

03-Jan-13   430.00 
25-Jan-13   96.00 
10-Jan-13   440.00 
28-Feb-13   72.10 
28-Feb-13   72.30

仅当月份位于Jan月份时,我才需要对金额字段求和。

我试过的是,

=SUMIF(A2:A6,"MONTH(A2:A6)=1",B2:B6)

但它回来了,

0

我需要的是,

Following values to be summed, 430.00 + 96.00 + 440.00 = 966.00
4

3 回答 3

61

试试这个:

  =SUM(IF(MONTH($A$2:$A$6)=1,$B$2:$B$6,0))

这是一个数组公式,因此您需要使用Control- Shift-Enter组合键输入它。

这是公式的工作原理。

  1. MONTH($A$2:$A$6) 为 A2:A6 中的日期创建月份数值数组,即
    {1, 1, 1, 2, 2}.
  2. 然后比较{1, 1, 1, 2, 2}= 1生成数组{TRUE, TRUE, TRUE, FALSE, FALSE},其中包含 IF 语句的条件。
  3. 然后,IF 语句返回一个值数组,{430, 96, 400..其中包含月份值等于 1 和..0,0}月份值不等于 1 的总和范围的值。
  4. 然后对该数组{430, 96, 400, 0, 0}求和以获得您正在寻找的答案。

这本质上等同于 SUMIF 和 SUMIFs 函数所做的事情。但是,这些函数都不支持您尝试包含在条件中的那种计算。

也可以完全删除 IF。由于 TRUE 和 FALSE 也可以被视为 1 和 0,所以这个公式=SUM((MONTH($A$2:$A$6)=1)*$B$2:$B$6)————也适用。

注意:这在 Google 电子表格中不起作用

于 2013-03-08T01:59:57.523 回答
25
=Sumifs(B:B,A:A,">=1/1/2013",A:A,"<=1/31/2013")

这个公式的美妙之处在于您可以向 A 列和 B 列添加更多数据,它只会重新计算。

于 2013-09-19T18:34:35.630 回答
18
=SUMPRODUCT( (MONTH($A$2:$A$6)=1) * ($B$2:$B$6) )

解释:

  • (MONTH($A$2:$A$6)=1)创建一个 1 和 0 的数组,当月份为 1 月时为 1,因此在您的示例中,返回的数组为[1, 1, 1, 0, 0]

  • SUMPRODUCT首先将在上述步骤中创建的数组的每个值与数组的值相乘($B$2:$B$6),然后将它们相加。因此,在您的示例中,它会这样做:(1 * 430) + (1 * 96) + (1 * 440) + (0 * 72.10) + (0 * 72.30)

这也适用于 OpenOffice 和 Google 电子表格

于 2014-08-09T17:42:35.110 回答