Excel公式返回日期范围内的最早日期和最新日期

问题描述 投票:0回答:1

UPDATED sample input and output table

请参见附件中的示例数据(左表)和预期结果(右表)。

我曾尝试使用此网站上提供的示例公式来提供类似的问题,但未能针对我的特定问题进行定制。希望得到一些针对我的案例的投入和指导。

我在表中有1000行数据,类似于图中所示。

  • 第1列-ID
  • 第2列-起始范围
  • 第3列-结束范围
  • 第4列-开始日期
  • 第5列-结束日期

我想根据第2列和第3列中重叠的日期范围来合并行以显示第1列,第4列和第5列(即合并具有重叠日期范围的行),以得到类似于右侧表格的表格其中仅显示每个组的最早日期和最新日期。

供参考,以下是我到目前为止的内容。该公式为我提供了输出第二列(开始日期)所需的一切,除了它返回的是与所有条件匹配的第一个值,而不是返回最小值(不确定在此公式的何处添加MIN函数)。

=IFERROR(INDEX([Start Date],MATCH(1, IF([Start Date]>=[@[Start Range]], IF([Start Date]<=[@[End Range]], IF([Key1]=[@Key1],1),0),0),0)),"")

请让我知道是否需要其他信息。谢谢!

excel date range formula overlapping
1个回答
0
投票

MATCH只能返回一个行号,但是您需要一个匹配的所有行的数组,以便可以选择最小/最大的行-您需要一个数组公式。

您有多个条件,但是AND和OR在数组公式中不起作用,因此需要一个技巧来模拟AND和OR:

AND(a=b,c=d)OR(a=b,c=d)a=bc=d视为TRUE / FALSE值,但将它们视为FALSE = 0和TRUE <> 0同样有效。如果这样做,则(a=b)*(c=d)与使用AND相同,(a=b)+(c=d)与OR相同。

首先,我们使用MIN查找匹配的最小项。匹配的是显示为日期的数字。不匹配的呢?我们需要一个比任何可能的日期都大的数字。数字2958465是31/12/9999(最大日期),因此我们可以使用更大的数字-我们将使用9999999,这绝对不是有效日期。

最后,我们使用MAX查找匹配的最大项目。匹配的是显示为日期的数字。对于不匹配的日期,我们需要一个小于任何可能日期的数字。数字0是最小的有效日期,因此我们将使用-1,这绝对不是有效日期。

所以我们需要使用的数组公式是:

对于ID,将此公式放在G2中,然后将原始数据的每一行的结果复制下来:

=A2

对于开始日期,将此公式放在H2中,然后按Control-Shift-Enter而不是Enter键,然后向下复制原始数据的每一行的结果:

=MIN(IF((D2>=B:B)*(D2<=C:C)*(A2=A:A)+(E2>=B:B)*(E2<=C:C)*(A2=A:A),B:B,9999999))

对于结束日期,将此公式放在I2中,然后按Control-Shift-Enter而不是Enter键,然后向下复制原始数据的每一行的结果:

=MAX(IF((D2>=B:B)*(D2<=C:C)*(A2=A:A)+(E2>=B:B)*(E2<=C:C)*(A2=A:A),C:C,-1))

[当使用Control-Shift-Enter将单元格作为数组公式输入时,Excel将大括号括起来,以便您可以分辨出它是数组公式。

现在,这并不完美,因为您想要一个没有重复项的单独结果表,并且该表有很多重复项。您可以使用高级过滤器仅显示唯一值-您可以选择进行过滤以隐藏行或将其复制到其他位置。

如果此单独的结果表与原始数据在同一张纸上,则适当的过滤也会隐藏原始数据中的行,因此最好将此单独的表放在另一张纸上。

如果您通过复制到新位置(可能在右边)进行过滤,则可以只将结果列与重复项一起隐藏-请当心,因为您制作的副本只是值,它们不会自动更新。

© www.soinside.com 2019 - 2024. All rights reserved.