两个日期之间有多少天是在某个月?

时间:2015-06-05 07:31:12

标签: excel

在单元格中使用Excel公式,我想计算某个月内>= startdate<= enddate的天数。

实施例 startdate:2014-01-15

enddate:2015-04-02

月:january

公式结果:17 january days in 2014 + 31 january days in 2015 = 48

这可能吗?

3 个答案:

答案 0 :(得分:2)

我的方法: 使用数组公式创建从开始日期到startdate + 9999的日期数组。为此,它将0,1,2,... 9999天添加到开始日期,直到添加9999天。然后计算这些天数在所需月份中的数量,并且低于或等于结束日期。

enter image description here

E2中的公式是

=SUMPRODUCT((MONTH(A2+ROW($A$1:$A$10000)-1)=D2)*((A2+ROW($A$1:$A$10000)-1)<=B2))

请注意,如果开始日期和结束日期之间的间隔超过9999天,则无法正常工作。

答案 1 :(得分:2)

这是第一个答案的变体,使用INDIRECT在开始日期和结束日期之间生成日期数组(F1): -

=SUMPRODUCT(--(MONTH(A2-1+ROW(INDIRECT("1:"&(B2-A2+1))))=D2))

如Axel Richter所述,您还可以使用INDEX生成日期数组(F2): -

=SUMPRODUCT(--(MONTH(A2-1+ROW($A$1:INDEX($A:$A,B2-A2+1)))=D2))

使用这些公式的优点是对开始日期和结束日期之间的差异没有限制。

使用INDIRECT的缺点是它具有挥发性并且会产生“保存”。文件关闭时提示。

INDEX方法的缺点是容易受到行插入/删除的影响。

enter image description here

答案 2 :(得分:0)

最好通过使用自定义公式来实现。您需要进入VBA(右键单击工作表名称&gt;编辑代码),插入一个模块(右键单击VBA面板中的工作表名称&gt;插入&gt;模块)并粘贴此代码:

Function DaysInMonthBetween(startDate As Date, endDate As Date, chosenMonth As Integer)
Dim startYear, startMonth, startDay As Integer
Dim endYear, endMonth, endDay As Integer
Dim currentDate As Date
Dim sumDays, daysInMonth As Integer

sumDays = 0

startYear = Year(startDate)
startMonth = month(startDate)
startDay = Day(startDate)

endYear = Year(endDate)
endMonth = month(endDate)
endDay = Day(endDate)

If (startMonth > chosenMonth) Then startYear = startYear + 1
If (endMonth < chosenMonth) Then endYear = endYear - 1

If (endYear >= startYear) Then
    For i = startYear To endYear

        currentDate = DateSerial(i, chosenMonth, 1)
        daysInMonth = Day(Application.WorksheetFunction.EoMonth(currentDate, 0))


        sumDays = sumDays + daysInMonth
    Next

    If (startMonth = chosenMonth) Then sumDays = sumDays - (startDay - 1)
    If (endMonth = chosenMonth) Then
        currentDate = DateSerial(endYear, endMonth, 1)
        daysInMonth = Day(Application.WorksheetFunction.EoMonth(currentDate, 0))
        sumDays = sumDays - (daysInMonth - endDay)
    End If
End If


DaysInMonthBetween = sumDays
End Function

然后,您可以通过键入=DaysInMonthBetween(startDate, endDate, chosenMonth)来使用此自定义公式和工作表,因此,如果您的开始日期和结束日期分别位于A1和A2中,则应键入=DaysInMonthBetween(A1,A2,1)以获取结果1月,=DaysInMonthBetween(A1,A2,2) 2月等等。