Excel - 计算两个日期之间每个月的天数

时间:2017-06-12 12:10:40

标签: excel excel-formula

我正在尝试编写一个excel公式,可以在一行单元格中拖动,以给出两个指定日期之间每个月的天数。 E.g:

         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和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)))))))))

2 个答案:

答案 0 :(得分:2)

使用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以获得计数。

enter image description here

如果标题的日期格式为mmm,请改用:

=SUMPRODUCT(--(MONTH(ROW(INDIRECT($A2 & ":" & IF($B2="",TODAY(),B2))))=MONTH(C$1)))

enter image description here

答案 1 :(得分:2)

无论如何,这里是基于标准公式的完整性的替代方法

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

表示

的两个日期范围之间的重叠
=MAX(0,MIN(IF($B2="",TODAY(),$B2),EOMONTH(DATEVALUE(C$1&"-17"),0))-MAX($A2,DATEVALUE(C$1&"-17"))+1)

enter image description here