Excel基于两个输入字段计算下一个到期日期的问题求助
需求与问题描述

我希望通过上述输入字段实现以下功能:
- 让Excel提取上方单元格的值作为日期的日部分,若该值大于当月最后一天(例如31日用于只有30天的月份),则返回当月最后一天。
- 若请求日期是该日的前一天、当天或之后(例如请求日期为
09/02/2024、10/02/2024或15/02/2024,而月度纪念日字段为10),则需在请求日期基础上加1个月,同时保留月度纪念日的日部分;否则返回以月度纪念日为日部分的请求日期当月日期。
简言之:若请求日期是月度纪念日的前一天、当天或之后,则返回下一个月的月度纪念日;否则返回当月的月度纪念日。
我已实现大部分功能,但存在一个问题:当月度纪念日大于请求日期所在月份的天数时,公式会跳转到下一个月而非保留当月。
现有公式
我使用两个配合的公式:
- 手动计算下一个月的月度纪念日(位于B20单元格):
=IF(B4 > DAY(EOMONTH(B5,1)), EOMONTH(B5,1), DATE(YEAR(B5), MONTH(B5) + 1, DAY(B4))) - 处理其他逻辑的计算(位于B19单元格):
=IF(AND(B4 = 1, DAY(B5) = DAY(EOMONTH(B5, 0))), EDATE(B20, 1), IF(B4 <= DAY(B5), B20, IF(B4 > DAY(EOMONTH(B5, 0)), EDATE(B20,0), IF(B4 - DAY(B5) = 1, B20, EDATE(B20, -1)))))
错误案例展示
更新后的表格展示了预期结果与当前公式的问题(仅在月末日期场景出错):
| 月度纪念日 | 请求日期 | 预期下一个纪念日 | 当前公式效果 |
|---|---|---|---|
| 15 | 10/03/2024 | 15/03/2024 | 正常 |
| 15 | 20/03/2024 | 15/04/2024 | 正常 |
| 15 | 15/03/2024 | 15/04/2024 | 正常 |
| 15 | 14/03/2024 | 15/04/2024 | 正常 |
| 1 | 29/02/2024 | 01/04/2024 | 正常 |
| 1 | 31/03/2024 | 01/05/2024 | 正常 |
| 1 | 30/03/2024 | 01/04/2024 | 正常 |
| 1 | 25/03/2024 | 01/04/2024 | 正常 |
| 31 | 01/02/2024 | 29/02/2024 | 正常 |
| 31 | 01/03/2024 | 31/03/2024 | 异常 - 返回30/03/2024 |
| 31 | 30/04/2024 | 31/05/2024 | 正常 |
| 31 | 30/03/2024 | 30/04/2024 | 异常 - 返回30/03/2024 |
| 31 | 29/02/2024 | 31/03/2024 | 正常 |
| 30 | 01/02/2024 | 29/02/2024 | 异常 - 返回30/03/2024 |
| 30 | 01/03/2024 | 30/03/2024 | 正常 |
| 30 | 29/03/2024 | 30/04/2024 | 正常 |
| 30 | 31/03/2024 | 30/04/2024 | 正常 |
希望能得到帮助解决该问题。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

