簡體   English   中英

Excel - 計算兩個日期之間每個月的天數

[英]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)))))))))

無論如何,這里是基於標准公式的完整性的替代方法

=max(0,min(end1,end2)-max(start1,start2)+1)

對於 2 個日期范圍之間的重疊,這給出了

=MAX(0,MIN(IF($B2="",TODAY(),$B2),EOMONTH(DATEVALUE(C$1&"-17"),0))-MAX($A2,DATEVALUE(C$1&"-17"))+1)

在此處輸入圖片說明

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM