過于簡化我有兩列:日期和文本;我想根據第 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,但不確定這是否符合此目的。我想避免在我的布爾回傳中有一個額外的列,而是讓這個單元格為我提供所有資訊組合。
uj5u.com熱心網友回復:
不引入另一列,使用DAY和MONTH
幾乎不可能,而且是不必要的...
請重新考慮一下,如果您想將 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指的是文本列
所以在未來,你最不想做的就是設定任意約束。此外,為什么要使用類似的功能MONTH以及DAY何時可以閱讀文本?這樣,您甚至可以創建一個假期表來進行搜索。有了這個設定,這將不是一個有趣的任務。(哦,如果是因為年份,當您只想知道月份和日期時,只需將其從文本中洗掉即可。
祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/392751.html
