【发布时间】:2020-10-13 14:18:39
【问题描述】:
如果使用 Excel 的 YEARFRAC(date1,date2,1) 函数,则 Excel 将根据第二个参数使用基础。如果 date1 和 date2 在同一年,则无关紧要,但如果 date1 是闰年(例如 2020 年)而 date2 是非闰年(例如 2021 年),则很重要
我认为更准确的计算会考虑到date1 的基础可能与date2 的基础不同。
例如YEARFRAC(15/12/2020,15/01/2021,1) 返回0.08493151
但真正的计算是(31/12/2020-15/12/2020)/366 + (15/01/2020-31/12/2020)/365 = 0.084811737
我在 VBA 中实现了以下内容。有没有人有任何从根本上更好的方法(在 Excel 或 VBA 中)? (我不是在寻找对我匆忙的 VBA 代码的微小改进)
使用yearFracVBA("AA1","AA2")调用它
Function yearFracVBA(aDate1, aDate2)
result = 0
y1 = Application.Evaluate("=YEAR(" & aDate1 & ")")
y2 = Application.Evaluate("=YEAR(" & aDate2 & ")")
For Y = y1 To y2
fraction = 0
If Y = y1 And Y = y2 Then fraction = Application.Evaluate("=YEARFRAC(" & aDate1 & "," & aDate2 & ",1)")
If Y = y1 And Y < y2 Then fraction = Application.Evaluate("=YEARFRAC(" & aDate1 & ",DATE(YEAR(" & aDate1 & "),12,31),1)")
If Y > y1 And Y < y2 Then fraction = 1
If Y > y1 And Y = y2 Then fraction = Application.Evaluate("=YEARFRAC(DATE(YEAR(" & aDate2 & ")-1,12,31)," & aDate2 & ",1)")
result = result + fraction
Next Y
yearFracVBA = result
End Function
【问题讨论】: