我有一个房屋租赁业务,我想计算入住率。 为此,我需要计算两个日期(登记入住和退房)之间特定月份的夜晚数量。
以下是一个例子:
A B C D E F
1 | IN | OUT | NIGHTS | 01/01/18 | 01/02/18 |...
------------------------------------------------------------
2 | 15/01/18 | 25/01/18 | 10 | 10 | 0 |...
------------------------------------------------------------
3 | 28/01/18 | 04/02/18 | 7 | 3 | 3 |...
以下是公式:
C3 = B3-A3
D3 = MAX(0; MIN(EOMONTH(D$1;0); $B3) - MAX(D$1; $A3))
我想我不是太远但公式仍然不正确。 如您所见,D2是正确的,但D3是错误的。 这是一个棘手的部分,当这种情况在1月和1月的2个月内重叠时。 D3应该显示4晚而不是3晚。
有人可以帮忙吗?提前谢谢!
PS:抱歉格式化但我无法添加屏幕截图..
答案 0 :(得分:1)
我原以为你只是无条件地在一个月末添加一天 - 我需要尝试使用一两个测试用例。
MAX(0; MIN(EOMONTH(D$1;0)+1; $B3) - MAX(D$1; $A3))
只是说明四种可能的情况 - 给定开始日期d1 / m1 / y1(A3),结束日期d2 / m2 / y2(B3),当前月份的第一天01 / mm / yy(D1)和最后一天当月的日期dd / mm / yy(D1中的最后一天)
(1) d1/m1/y1>=01/mm/yy and d2/m2/y2 <= dd/mm/yy -> d2/m2/y2 - d1/m1/y1
(Both days in current month - all nights between the two dates)
(2) d1/m1/y1 < 01/mm/yy and d2/m2/y2 <= dd/mm/yy -> d2/m2/y2 - 01/mm/yy
(Start before current month, end in current month - all nights from 1st of month up to end date)
(3) d1/m1/y1 >= 01/mm/yy and d2/m2/y2 > dd/mm/yy -> 01/(mm+1)/yy - d1/m1/y1
(Start in current month, end after current month - all nights from start date up to 1st of following month)
(4) d1/m1/y1 < 01/mm/yy and d2/m2/y2 > dd/mm/yy -> 01/(mm+1)/yy - 01/mm/yy
(Start before current month, end after current month - all nights in month).
换句话说,它会计算范围内一天后的每晚,但不会计算范围内一天之前的夜晚。
答案 1 :(得分:0)
您可以有条件地添加一个停留期延长的月份。这将使该时期具有包容性,而不是简单的减法。
=MAX(0, MIN(EOMONTH(D$1, 0), $B4)-MAX(D$1, $A4))+(EOMONTH(D$1, 0)<$B4)