![](/img/trans.png)
[英]Excel - count days in each month between two dates (both dates available)
[英]Excel - count days in each month between two dates
我正在嘗試編寫一個 excel 公式,該公式可以拖過一行單元格以給出兩個指定日期之間每個月的天數。 例如:
A B C D E F
1 | START DATE | END DATE | Jan | Feb | Mar | Apr |...
---------------------------------------------------------
2 | 10/02/17 | 15/03/17 | 0 | 19 | 15 | 0 |...
增加的復雜性是結束日期可能會留空,表明結束日期應視為今天。 我可以在從 C2 開始的單元格中放置一個公式,但必須保留 A 列和 B 列供用戶輸入。
我使用大量嵌套的 if 語句取得了一些進展,但是如果結束日期為空,我很難處理它。
任何人都可以幫忙嗎?
*編輯
我沒有展示我寫的公式,因為我擔心它有點亂,但是按照要求,我現在在下面展示(這個公式來自 C2)
=IF(AND($A2<C$1,$B2<D$1),DAY(A2),IF($A2>=D$1,0,IF(AND($A2<C$1,$B2=""),IF(TODAY()<C$1,0,IF(TODAY()>C$1,IF(TODAY()<D$1,DAY(TODAY()),D$1-C$1),IF(TODAY()<D$1,INT(TODAY()-$A2),$D1-$C1))),IF(AND($A2>=C$1,$B2=""),IF(TODAY()<D$1,INT(TODAY()-$A2+1),D$1-$A2),IF(AND($A2>=C$1,$B2<D$1),$B2-$A2+1,IF(AND($A2<C$1,$B2<C$1),0,IF(AND($A2>=C$1,$B2>=D$1),D$1-$A2,IF(AND($A2<C$1,$B2<D$1),DAY(B2),IF(AND($A2<C$1,$B2>=D$1),D$1-C$1,0)))))))))
使用 SUMPRODUCT:
=SUMPRODUCT(--(TEXT(ROW(INDIRECT($A2 & ":" & IF($B2="",TODAY(),B2))),"mmm")=C$1))
這將遍歷日期並將三個字母月份的文本與標題匹配。
這假設標題是文本而不是格式為mmm
的日期。
ROW(INDIRECT($A2 & ":" & $B2))
與我們可以通過公式獲得的 For 循環非常接近。 它將一次迭代 1 天。 因為日期在 excel 中存儲為數字,一天為1
我們可以從開始日期到結束日期進行迭代。
SUMPRODUCT 是一個數組類型的公式,它是導致公式循環並進行計數的原因。
(TEXT(ROW(INDIRECT($A2 & ":" & IF($B2="",TODAY(),B2))),"mmm")=C$1)
為每次迭代返回 TRUE/FALSE,而--
將其轉換為 1/0。
然后 SUMPRODUCT 將所有的 1/0 相加以獲得計數。
如果標題是格式為mmm
日期,請改用它:
=SUMPRODUCT(--(MONTH(ROW(INDIRECT($A2 & ":" & IF($B2="",TODAY(),B2))))=MONTH(C$1)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.