获取包含 "Vacation" 的单元格总和,除非相关日期与特定日期和月份匹配

Get sum of cells containing "Vacation" except when related date matches certain day & month

过于简单我有两列:日期和文本;我想根据第 2 行的第一个日期检查我当前的假期天数,所以我想出了以下公式:

="Available vacation days: "&YEARFRAC(A2;TODAY())*12*(25/12)

我根据第一个日期和今天的日期计算一年中的分数,将其乘以 12 得到月份,然后再次乘以合同中每个月的假期总天数。现在我得到了另一个公式来收集 B 列中包含“假期”的所有单元格,非常简单:

=COUNTIF(B:B;"Vacation")

现在是有趣的部分 - 如果日期时间匹配 12 月 24 日或 31 日,我得到了给我一个布尔值的公式:

=AND(OR(DAY(A53)=24;DAY(A53)=31);MONTH(A53)=12)

我想将 12 月 24 日或 31 日发生的假期计算为半休假 (0.5),否则为全休假 (1)。然后我想将我的第一条陈述与这个结果结合起来并减去已使用的休假天数。我阅读了有关 VLOOKUP 和 XLOOKUP 的信息,但不确定这是否符合此目的。我想避免在我的布尔值 returns 中有一个额外的列,而是让这个单元格为我提供所有信息的组合。

不引入另一列,并使用DAYMONTH 这几乎是不可能的,而且是不必要的…… 重新考虑一下,如果要将 7 月 4 日添加为假期会怎样?

您的公式 =AND(OR(DAY(A53)=24;DAY(A53)=31);MONTH(A53)=12) 一次只能用于 1 行。所以,我们不能将它与列表一起使用,因为你每次都会得到整个列表。您不能将它们分成更小的列表并将它们连接在一起,没有 VBA.

就没有这样的功能

以后不要乱设“不加列”之类的约束,不喜欢可以隐藏。如果您不需要它们,请删除不必要的行,例如非假期行。它们是无关紧要的,为什么不把两者分开呢。

为了证明我的观点,这是您想要的解决方案:

解决方案

=COUNTIFS(B2:B9;"Vacation") - (COUNT(IFERROR(FILTER(FILTER(FILTER(A2:A9;B2:B9="Vacation");MONTH(FILTER(A2:A9;B2:B9="Vacation"))=12);DAY(FILTER(FILTER(A2:A9;B2:B9="Vacation");MONTH(FILTER(A2:A9;B2:B9="Vacation"))=12))=31);0))+(COUNT(IFERROR(FILTER(FILTER(FILTER(A2:A9;B2:B9="Vacation");MONTH(FILTER(A2:A9;B2:B9="Vacation"))=12);DAY(FILTER(FILTER(A2:A9;B2:B9="Vacation");MONTH(FILTER(A2:A9;B2:B9="Vacation"))=12))=24);0))))*0,5

它有效,但阅读、使用和维护起来很痛苦。

A2:A9 指的是日期列 B2:B9 引用文本列

所以以后,你最不想做的就是设置任意约束。此外,当我们只能阅读文本时,为什么要使用像 MONTHDAY 这样的函数?这样您甚至可以创建一个 table 假期来搜索。使用此设置,这将不是一件有趣的任务。 (哦,如果是因为年份,当您只想知道月份和日期时,只需将其从文本中删除即可。

祝你好运!