将日期与假期列表进行比较

将日期与假期列表进行比较

在 excel 中,我想将一个日期(比如说 A1 列)与矩阵 A2:F9 中的日期列表进行比较,并报告它是否是“假日”。我在矩阵中列出了所有假日,其中年份列在左行,假日列在顶列。下面的第一组是所有日期。我确实要到 2050 年。第二组是矩阵,我只显示部分假日。但我想比较,比如说第一组中的第一个日期“2018 年 4 月 27 日”,在假日下,通过输入“是”或“假日”来注释它是否在下面的第二组中

Date        day    month    year   Holiday 
4/27/2018   Fri    Apr      2018     ??
4/28/2018   Sat    Apr      2018     
4/29/2018   Sun    Apr      2018    
4/30/2018   Mon    Apr      2018    
5/1/2018    Tue    May      2018    


        New Years Day   Martin Luther King Jr.  Presidents Day
2018    1/1/2018        1/20/2018               2/19/2018
2019    1/1/2019        1/18/2019               2/18/2019
2020    1/1/2020        1/17/2020               2/17/2020
2021    1/1/2021        1/16/2021               2/15/2021
2022    1/1/2022        1/15/2022               2/21/2022

答案1

... 通过输入“是”或“假日”来注释它是否属于下面的第二组

看来你只是想知道这一天是否是假期。

以下公式应该适用于您的样本数据:

{=IF(OR(A2=$B$10:$D$14),"Yes", "No")}

这是一个数组公式。不要手动输入第二个括号,而是同时按下 CTRL+SHIFT+ENTER,括号就会自动出现。

请参见下图中公式栏中的公式。

在此处输入图片描述

答案2

您可以使用 Aggregate 将正确的列号返回到 INDEX:

=IFERROR(INDEX($J$1:$L$1,AGGREGATE(15,6,(COLUMN($J$2:$L$6)-MIN(COLUMN($J$2:$L$6))+1)/($J$2:$L$6=A2),1)),"")

在此处输入图片描述


如果你只想要 TRUE/FALSE 返回,那么输入以下数组即可:

=OR(A2=$J$2:$L$6)

作为数组公式,退出编辑模式时必须使用 Ctrl-Shift-Enter 而不是 Enter 进行确认。

如果第二个列表中的任何日期与所引用的日期匹配,它将返回 TRUE。

在此处输入图片描述

答案3

这是一个使用应该在 Excel 2007 中运行的旧函数的解决方案(我实际上在使用 LO Calc,它可以在那里运行)。

在此处输入图片描述 点击图片查看大图

您要求仅显示“是”或“假日”。此解决方案显示实际假日。如果您只想要一般参考,公式会更简单一些。

E2 中的公式(复制到该列)是:

=IFERROR(INDEX($H$1:$J$1,1,MATCH(A2,INDIRECT("H"&MATCH(D2,$G$2:$G$6,1)+1&":J"&MATCH(D2,$G$2:$G$6,1)+1),0)),"")

我将从内到外进行解释。

MATCH(D2,$G$2:$G$6,1)

这将在假日矩阵中找到年份的行。该行与矩阵的范围有关,数据从第 2 行开始,因此我们需要在该行上加 1 以获得工作表中的实际行。

INDIRECT("H"&MATCH(D2,$G$2:$G$6,1)+1&":J"&MATCH(D2,$G$2:$G$6,1)+1)

INDIRECT 函数会构建对您查找日期的范围的引用。对于 2018 年,这将产生一个范围 H2:J2(根据实际范围调整公式)。为了便于阅读,我将在下面的解释中将上面的公式称为 INDIRECT()。

MATCH(A2,INDIRECT(),0)

Match 随后会在该范围内查找 A2 中日期所在的列。如果未找到该日期(即不是假日),则会生成错误。

如果您只想要一个通用结果,您可以停在那里并将其包装在 IF 测试中以检查错误情况(错误 = 无假期,非错误结果 = 假期),并显示您选择的任一结果的措辞。

INDEX($H$1:$J$1,1,MATCH(A2,INDIRECT(),0))

这将查找包含节日名称的顶行中已识别的列。为了便于阅读,我将在下面的解释中将其称为 INDEX()。

IFERROR(INDEX(),"")

这会将结果包装在 IFERROR 函数中,如果不是假日,则隐藏错误消息。

相关内容