数组,SUM + INDEX/MATCH

Arrays, SUM + INDEX/MATCH

注意:试过 Excel 和 Google 表格,但我更喜欢表格。

基本上我想使用 INDEXMATCH 获取一组数据的总和(因为参数将取决于下拉菜单):

期望的结果是:

所以这需要一些东西:

  1. Converting the cell D13(April) to a Month
  2. Converting the "weekof" column to a Month
  3. Using INDEX and MATCH and MATCH again, I'm assuming because it's multiple cell references.

这是我目前的解决方案:

=SUM(INDEX(D5:I9, MATCH(MONTH(D13&1),ARRAYFORMULA(MONTH(C5:C9)),0), MATCH(E12,D4:I4,0)))

这个returns最近的值:

270

而不是:

804

为什么这个值?

270+500+34 = 804

如果你对INDEX和MATCH的使用不是很严格,可以采用以下解决方案:

添加额外的列名称“月”,此列将使用 TEXT 函数从日期列中提取月份名称,如下所示:

=IF(C3<>"",TEXT(C3,"mmmm"),"")

if 语句确保只有填充的日期才会有月份值,因为对于一定数量的单元格,您必须使用上述公式填充此列。

现在您可以在单元格 E13 中或任何您想要的地方简单地使用 SUMIF 函数:

=SUMIF(B:B,D13,D:D)

如果您不希望“月份”列出现在您的数据中 table,您可以将其放在 table 的末尾并隐藏它。

您可以使用数据透视表 table 并按年和月对日期进行分组。

您可以直接使用 FILTER 然后 SUM 结果来简化您的公式:

公式:

=SUM(FILTER(D:D, TEXT(C:C,"MMMM") = E13))

输出:

更新:

  • 上面的公式也应该在下拉值时更新。 Dropdown 只是可以用预定值更改的数据,除此之外,使用普通单元格时应该是相同的。
  • 要匹配列,请将 MATCHINDEX 与上述公式一起使用。请参阅下面的修改公式。
  • 注意循环依赖。确保您的范围不会干扰您放置公式的实际单元格。

列匹配:

=SUM(INDEX(FILTER(D:E, TEXT(C:C, "MMMM") = E13),,MATCH(F12, D4:4, 0)))