You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel计算两日期间特定月份住宿晚数问题求助

修正跨月住宿晚数计算公式

你的思路方向是对的,问题出在原公式没有考虑退房当天不算住宿晚数的核心逻辑——你用B3-A3计算总晚数时,本质上是默认退房当天的夜晚不算住宿(比如15/01到25/01,实际是住到24/01的晚上,共10晚),但原公式在计算当月晚数时,没有把退房日期往前推一天,导致跨月时少算1晚。

修正后的公式

把D列的公式替换为:

=MAX(0, MIN(EOMONTH(D$1,0), $B3-1) - MAX(D$1, $A3) + 1)

公式逻辑拆解

我们一步步看为什么这样改:

  • $B3-1:将退房日期提前1天,因为退房当天的夜晚不属于住宿时段,这和你总晚数B3-A3的逻辑保持一致。
  • MIN(EOMONTH(D$1,0), $B3-1):取当月最后一天和退房前一天中更早的日期,确保我们只计算当月内的住宿结束点。
  • MAX(D$1, $A3):取当月第一天和入住日期中更晚的日期,确保我们只计算当月内的住宿起始点。
  • [结束日期]-[起始日期]+1:计算这段区间内的住宿晚数(加1是因为要包含入住当天的夜晚)。
  • MAX(0, ...):兜底处理负数情况(比如入住日期在当月之后,或退房日期在当月之前,此时当月晚数为0)。

验证你的例子

  • D2单元格(15/01入住,25/01退房):
    MIN(31/01,24/01)=24/01,MAX(01/01,15/01)=15/01,24-15+1=10,结果正确。
  • D3单元格(28/01入住,04/02退房):
    MIN(31/01,03/02)=31/01,MAX(01/01,28/01)=28/01,31-28+1=4,正好得到你需要的结果。

这个公式可以直接下拉填充到所有月份列,混合引用的设置(D$1锁定行,$A3/$B3锁定列)会自动适配不同行和列的日期。

内容的提问来源于stack exchange,提问作者Mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:14:59