【问题标题】:Check if date ranges overlap within the same cell Excel 365检查日期范围是否在同一单元格 Excel 365 中重叠
【发布时间】:2021-05-22 13:51:02
【问题描述】:

我正在尝试寻找一种方法来查看同一单元格中的日期范围是否重叠。我尝试了SUMPRODUCT 公式方法,但它似乎不起作用,因为开始日期和结束日期没有分开。每行的日期数量可能会有所不同,并且我的数据中没有一种好的方法可以在每条记录的多行的单独列中列出开始/结束日期。

示例(在 Excel 工作簿中的一个单元格中):

4/20/2021 - 5/21/2021, 4/20/2021 - 5/20/2021, 4/26/2021 - 4/27/2021, 4/29/2021 - 5/4/2021

【问题讨论】:

  • “重叠”是指某个时间点位于单元格内的所有范围内(所有范围相互重叠)?你的意思是某个时间点在一个单元格内至少两个范围(至少两个范围重叠)?还是别的什么?
  • 如果至少 2 个日期范围重叠,那么对于我需要的内容,它会“算作”重叠。每个单元格中的日期范围数可以更改,一个单元格可能只有 2 个日期,下一个单元格可能有 5 个日期,所以我需要一些可以处理的东西。我希望这有助于澄清。

标签: excel excel-formula


【解决方案1】:

这类似于this question,可以用同样的方式解决,方法是用逗号分隔,然后用连字符分隔,然后检查是否有重叠:

=LET(Split,FILTERXML("<s><t>"&SUBSTITUTE(A2,",","</t><t>")&"</t></s>","//s/t"),
Ncomp,COUNTA(Split)-1,
Left,LEFT(Split,FIND("-",Split&"-")-1),
Right,RIGHT(Split,LEN(Split)-FIND("-",Split)),
Lsort,SORT(DATEVALUE(Left)),
Rsort,SORTBY(DATEVALUE(Right),DATEVALUE(Left)),
Lstart,INDEX(Lsort,SEQUENCE(Ncomp,1,2)),
Rend,INDEX(Rsort,SEQUENCE(Ncomp,1,1)),
(SUM(--(Rend>=Lstart))))

B-J 列显示分解为阶段的工作,使用组合“让”公式的最终结果在 K 列中。我必须将日期更改为 DD/MM/YYYY,以便我可以在我的语言环境中使用 Datevalue。

【讨论】:

  • 感谢您的解决方案!这是能够做到这一点的唯一方法吗?我有近 20,000 行需要为此执行此操作,并且希望找到一种不必拆分日期范围的方法。如果不可能,我理解,但只是想看看。
  • 我认为没有比这更简单的公式了 - 至少它是一个可以下拉的公式(中间列仅用于解释)。另一种方法是使用 VBA,这在某些方面更容易。
  • 我明白了,对我的误解深表歉意。看起来我还没有使用 LET 功能的时间,但能够让它解决我的问题。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多