我正在开发一个酒店预订日历工具,我需要计算出现在 2 个任意搜索日期之间的预订的每晚平均价格。需要考虑的事项:
- 使用入住日期和退房日期记录预订
- 连同一个单一的预订价格(一切都在同一行)
- 退房日期算作空置,因为在每日入住时间之前房间将是空的
- 我们只想要搜索 2 个日期之间的日期的预订值
- 需要明确的是,预订可以延长粘贴第 1 次和第 2 次搜索日期,但我们将忽略超出日期极限的那些日子的每日值
- 我真的很想使用公式而不是代码来做到这一点
我整天都在玩 SUMPRODUCT 公式,并且已经非常接近预期的结果 - 这个特定的再现只捕获了在此期间填充的房间总数,但修改它以返回值不是问题:
=ARRAYFORMULA(SUMPRODUCT(GTE(Bookings_EndDate,ReportExec_StartDate+1), LTE(Bookings_StartDate,ReportExec_EndDate+0),IF((Bookings_StartDate<=ReportExec_StartDate)*(Bookings_EndDate>=ReportExec_EndDate),((ReportExec_EndDate-ReportExec_StartDate+1)),IF(Bookings_StartDate<ReportExec_StartDate,Bookings_EndDate-ReportExec_StartDate,IF(Bookings_EndDate>ReportExec_EndDate,(ReportExec_EndDate+1)-Bookings_StartDate,0)))))
我认为这里的问题是数组计算只输出第一个 IF() 满足的条件,所以我很确定这是错误的方法。命名范围的快速定位:
- ReportExec_StartDate / ReportExec_EndDate = 搜索日期 1 / 搜索日期 2
- Bookings_StartDate / Bookings_EndDate = 包含入住/退房日期的列
第一个 IF() 条件搜索所有延长到/超过搜索日期的预订 第二个嵌套 IF() 搜索仅在第一个搜索日期之前延长的预订 第三个嵌套 IF() 搜索仅延长到第二个搜索日期之后的预订
在 Excel 中这会更容易,但 Google 对我来说是一个新玩具 - 欢迎任何想法!