使用 google 表格 arrayformula 从一定时间范围内的每一天获取最大值

Get max value from each day from a range of time using google sheets arrayformula

Example

范围 A 存储时间及其值,并且会动态更新(示例中没有)。

从那个范围 A,我想制作一个每天的动态范围 B 及其最大值。

Filter() 不适用于 arrayformula,我不知道查询是否也适用。

你可以试试这个(在 Excel 上测试过,因为你的 Google Sheet 被阻止了,但它应该可以正常工作)

=SUMPRODUCT(MAX(--($A:$A>D5)*--($A:$A<D5+1)*$B:$B))

这是它的工作原理:

    如果单元格值高于日期引用,
  1. --($A:$A>D5) 将 return 为 1 和 0 的数组。假设日期参考是 24/01/2020,那么 returned 数组将是 {1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1}
  2. --($A:$A<D5+1) 会做同样的事情,但前提是单元格值低于 d5+1(第二天)。因此,对于 24/01/2020,我们将获得 {1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
  3. 首先*将两个数组相乘,所以{1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1} * {1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0} = {1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
  4. 第二个 * 会将前一个数组乘以 B5:B31 范围内的值,这意味着 {1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0} * {0,333;0,667;0,667;0,667;0,667;0,667;0,667;0,667;0,667;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,667} = {0,333;0,667;0,667;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
  5. MAX 将从上一个数组中获取 max 值(在本例中,0,667
  6. SUMPRODUCT 已添加,因此我们可以使用数组。 Normal Max自己是不会做的

注意:请注意,我的小数点分隔符是逗号,参数分隔符是分号,因此您可能需要根据您的语言设置来修复此问题

您只需查询即可:

=ArrayFormula(query({int(A4:A),B4:B},"select Col1,max(Col2) where Col2 is not null group by Col1 label Col1 'Date'"))

只要您适当地格式化结果中的日期列。

编辑

要删除列标签,只需输入一个空字符串,如下所示:

=ArrayFormula(query({int(A4:A),B4:B},"select Col1,max(Col2) where Col2 is not null group by Col1 label Col1 '',max(Col2) ''"))