[英]Calculate date overlap in months
需要一点帮助,如果你这么好心的话。
在 MS Excel 中,我试图根据学年计算出学生上大学的月数。
例如,学生在以下日期注册并完成大学学业:
学生参加多个学年:
2017 年 1 月 8 日 - 2018 年 7 月 31 日
01/08/2018 - 31/07/2019
2018 年 1 月 8 日 - 2020 年 7 月 31 日
我想计算学生每个学年上学的月份:
2017 年 1 月 8 日 - 2018 年 7 月 31 日(1 个月)
2018 年 1 月 8 日 - 2019 年 7 月 31 日(12 个月)
2018 年 1 月 8 日 - 2020 年 7 月 31 日(11 个月)
我已经设法使用这个 function 计算了天数:
=MAX(MIN(term_end_date, student_,end_date) - MAX(term_start_date, student_start_date)+1,0)
但是,如果可能的话,我需要几个月的时间。
提前感谢帮助。
=DATEDIF(A1,B1,”M”) 将给出在 A1 和 B1 中输入日期的两个日期(即不包括开始和结束月份)之间的整月数。 “M”表示您希望以月为单位报告信息。
要获得更准确的结果,请尝试:=(DATEDIF(A1,B1,”D”) / 365) * 12。如果日期跨越多年 - 包括闰年 - 尝试除以 365.25 和 365。
请试试这个 UDF。
Function MonthsOverlap(Rng As Range, _
AccYear As Integer) As String
' 016
Const Ststart As Long = 1 ' index of array 'Study'
Const Stend As Long = 2 ' index of array 'Study'
Dim Fun As Integer ' Months of overlap
Dim YearStart As Date, YearEnd As Date
Dim Study As Variant
YearStart = DateSerial(AccYear, 8, 1) ' modify year and day as required
YearEnd = DateAdd("yyyy", 1, YearStart)
Study = Rng.Value ' Rng columns must be adjacent
With Application.WorksheetFunction
If Study(1, Ststart) <= YearStart Then
Fun = DateDiff("m", .Max(Study(1, Ststart), YearStart), .Min(Study(1, Stend), YearEnd))
ElseIf Study(1, Ststart) <= YearEnd Then
Fun = DateDiff("m", .Max(Study(1, Ststart), YearStart), YearEnd)
End If
Fun = .Max(Fun, 0)
End With
MonthsOverlap = Fun & " month" & IIf(Fun = 1, "", "s")
End Function
我在一张如下图所示的表格中对其进行了测试。 请注意公式栏中的公式。
如您所见,function 在 2017 年和 2019 年返回了意想不到的结果。我认为它们没有错。 该公式仅使用与您的系统不同的月份四舍五入。 我认为一旦你知道 function 可以修改以适应你的规则。 同时它遵循微软的规则,坦率地说,我也不知道。 但是,请注意,学习的总时间是 24 个月,这是正确的,因此足以说服我让今天足够好:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.