【问题标题】:Group by month using cell above filtered cells使用过滤单元格上方的单元格按月分组
【发布时间】:2019-12-10 22:59:27
【问题描述】:

我有一个如下所示的电子表格:

https://docs.google.com/spreadsheets/d/1b29gyEgCDwor_KJ6ACP2rxdvauOzacDI9FL2K-jgg5E/edit?usp=sharing

我有两列我感兴趣,日期和计数。每隔几个日期,就会有一个“TOTAL”行,其中与该 TOTAL 对应的所有计数将被求和。 我想要一个看起来像右边的单元格的输出,其中所有的总计数都是按月份求和的。问题在于 A 列只有日期或总计,在单独的行中,并且此布局无法更改,让我想我需要在 A 列中引用 直接上方的单元格 TOTAL,我想按正确的月份对 TOTAL 进行分组。

我不能只按日期范围过滤A列的原因是因为使用不一致,有时计数数据只输入在TOTAL行中。

我在互联网上搜索了 FILTER、INDIRECT、QUERY、SUMIFS 等...但找不到确切的方法。

我可以轻松过滤 A:A="TOTAL" 的 B 列,但我认为之后我需要做的是使用每个单元格 above 其中 A:A="TOTAL" 为月份标准的范围,不知何故使用了我在这里找到的:https://exceljet.net/formula/sum-by-month,由 ">="&D3 和 "

任何帮助或替代方法将不胜感激。谢谢。

【问题讨论】:

  • 完成!请查看添加的链接。

标签: date google-sheets google-sheets-formula array-formulas google-sheets-query


【解决方案1】:

或不同的(偏移)方法:

=QUERY(FILTER({EOMONTH(INDIRECT("A1:A"&ROWS(B2:B)), 0), B2:B}, A2:A="total"),
 "select Col1,sum(Col2) 
  group by Col1 
  label sum(Col2)'' 
  format Col1'mmmm'", 0)

【讨论】:

  • 这行得通!我会在查询中添加“order by Col1 desc”以使最新月份出现在顶部吗?
  • @Leanna 是的,去吧
  • 使用以下命令给我一个错误: =QUERY(FILTER({EOMONTH(INDIRECT("A1:A"&ROWS(C2:C)), 0), C2:C}, A2:A ="total"), "select Col1,sum(Col2) group by Col1 label sum(Col2) ' ' format Col1'mmmm' order by Col1 desc", 0) 这部分的顺序可能重要吗?
  • @Leanna 是的,参数的顺序很重要。使用:=QUERY(FILTER({EOMONTH(INDIRECT("A1:A"&ROWS(B2:B)), 0), C2:C}, A2:A="total"), "select Col1,sum(Col2) group by Col1 order by Col1 desc label sum(Col2)'' format Col1'mmmm'", 0)
  • 这是完美的。感谢您的参考。
【解决方案2】:

查询公式非常适合这类情况,但如果您打算查看多年数据,则按月查看会带来问题:

=arrayformula(QUERY(QUERY({row(A:A),TEXT(A:A,"MMMM"),B:B},"SELECT max(Col1),Col2,sum(Col3) where Col3 is not null group by Col2 order by max(Col1) label Col2 'Month', sum(Col3) 'Count'"),"SELECT Col2,Col3"))

【讨论】:

  • 这可以将 B 列中 A 列不是“TOTAL”的所有计数相加。但是,我需要将 B 列中每条 TOTAL 行的计数相加。然后,我需要按月对它们进行分组。那是因为有时只有 TOTAL 行会有我需要的计数。请查看我为这个场景添加视觉效果的编辑图。
  • @Leanna 看来您没有连贯的模式,一月份有多个总计,这有什么意义,是什么阻止了总计列使用两个不同月份的组合出乎意料?
【解决方案3】:

尝试:

=ARRAYFORMULA(QUERY({IF((B2:B="")*(A2:A=""),,VLOOKUP(ROW(A2:A), 
 IF(A2:A<>"total", {ROW(A2:A), DATEVALUE("01/"&MONTH(A2:A)&"/2000")}), 2, 1)), 
 IF(A2:A= "total", A2:A, ), B2:B}, 
 "select Col1,sum(Col3) 
  where lower(Col2) = 'total' 
  group by Col1 
  label sum(Col3)'' 
  format Col1'mmmm'", 0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    相关资源
    最近更新 更多