【问题标题】:Finding closest greater from a filtered range从过滤范围中找到最接近的更大
【发布时间】:2020-02-19 17:12:10
【问题描述】:

我有一张关于两台机器运行时间的信息表。它具有三个主要列:“A”是机器编号; “B”是开始运行的时间和日期;而“C”是操作的结束时间和日期。

我正在尝试编写一个公式(第四列)来查找下一个操作的“开始时间” - 以机器编号为条件。为此,我必须输入“结束时间”并从另一行找到最接近的更大“开始时间” - 以机器编号为条件。

我已经尝试了两种方法来做到这一点,没有一种方法 100% 正确。

首先,我“过滤” B 的范围,以 A 为条件。然后,我将此过滤后的范围插入到一个公式中,以寻找最接近的更大值。

示例表如下(颜色仅用于跟踪/调试目的,它们不必在公式中):

这是我尝试过的两个公式:

=small(filter(B:B;A:A=A1);COUNTIF(filter(B:B;A:A=A1);"<"&C1)+1)

=INDEX(filter(B:B;A:A=A1);MATCH(MIN(ABS(filter(B:B;A:A=A1)-C1));ABS(filter(B:B;A:A=A1)-C1);0))

在第一个示例中,只有最后一个结果正确返回。该列的其余部分重复相同的值。

第二个是不稳定的,有时会带来最接近的较大数字,有时会带来最接近的较小数字,但比第一个效果更好。

【问题讨论】:

  • 分享您的工作表副本以及所需输出的示例
  • 忘记添加,已编辑!

标签: google-sheets google-sheets-formula array-formulas counting gs-vlookup


【解决方案1】:

尝试:

=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A&
 COUNTIFS(A2:A; A2:A; ROW(A2:A); "<="&ROW(A2:A))+1; FILTER({A2:A&
 COUNTIFS(A2:A; A2:A; ROW(A2:A); "<="&ROW(A2:A))\ 
 TEXT(B2:B; "dd/mm/yyyy hh:mm:ss")}; 
 COUNTIFS(A2:A; A2:A; ROW(A2:A); "<="&ROW(A2:A))>1); 2; 0)))

【讨论】:

  • 我试过了,但没用。出于某种原因,我只得到空白单元格。
  • 它工作得几乎完美,非常感谢!但是只有一个问题:如果重复行,则第一行获取第二行的开始时间,而不是以下事件。为此,我想可能会制作一个条件列和一个额外的列,将它们过滤掉..你怎么看?
  • 不太清楚你的意思...i.stack.imgur.com/o38cH.png
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2017-07-17
  • 2011-03-22
  • 2019-12-15
  • 2023-02-17
  • 1970-01-01
相关资源
最近更新 更多