我正在尝试编写一个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)))))))))
答案 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以获得计数。
如果标题的日期格式为mmm
,请改用:
=SUMPRODUCT(--(MONTH(ROW(INDIRECT($A2 & ":" & IF($B2="",TODAY(),B2))))=MONTH(C$1)))
答案 1 :(得分:2)