用于计算利息。例如,任何按 30/365 计算的事物都会每天累积利息,但每月的 31 号除外。我想找出一种方法来判断两个日期之间 31 号出现的频率 - 例如,从 2017 年 3 月 15 日到今天,有 2 个 31 号 - 3 月 31 日和 5 月 31 日。除了在公式中列出每个月之外,有没有其他好的方法可以在 Excel 中解决这个问题?
答案1
答案2
出于兴趣,即使有一个可以接受的答案,这也会起作用,并且会更短一些:
=SUMPRODUCT(N(DAY(ROW(INDIRECT(StartDate &":"&EndDate)))=31))
它创建一个包含从开始到结束的所有日期的数组,并计算天数 = 31。
这种方法会遇到可怕的25 Nov 4770
问题,除非 Excel 已经增加了行数 :-)
答案3
你可以利用每年有 7 个 31 日这一事实。开始日期B1
和结束日期分别为B2
:
=(YEAR(B2)-YEAR(B1)+1)*7-INDEX({0,1,1,2,2,3,3,4,5,5,6,6},MONTH(B1))-INDEX({7,6,6,5,5,4,4,3,2,2,1,1},MONTH(B2))+(DAY(B2)=31)
理由:
- 计算开始日期和结束日期的年份差值(不考虑月份)。将差值加上 1 乘以 7。这将提供 31 个月份的基数超额计数,我们将从中减去该数。
- 接下来,查找与开始日期在同一日历年中的前 31 个日期的数量。这由数组处理,数组为每个月提供此值。从总数中减去此值。
- 然后,对结束日期进行类似操作,但查找与结束日期相同的日历年中剩余的 31 个数字。这个值也被减去。
- 最后,纠正结束日期为某月 31 日的特殊情况。在这种情况下,将总数加 1。
例子:
开始:9/6/2013
结束:12/31/2016
- 年份差异 = 2016 - 2013 = 3 --> 将 (3 + 1) * 7 = 28 添加到 31 的数字上。
- 查找开始日期日历年份之前的 31 号:9 月有 5 个之前的 31 号。--> 从 31 号的数量中减去 5:28 - 5 = 23
- 查找结束日期日历年的剩余 31 个 31 日:12 月日期剩余 1 个 31 日。--> 从 31 日的数量中减去 1:23 - 1 = 22
- 检查 31 日的结束日期:结束日期是 31 日,因此将 31 日的数字加 1:22 + 1 = 23。