Excel |使用日期的嵌套 IF 语句
Excel | nested IF statements using dates
我正在尝试计算 2019 年给定时间范围内的月数。
我的数据是这样的:
我将开始日期和结束日期列的格式更改为 "date"。 "Duration in months" 和输出列具有数字格式。
我是这样处理的:
- 如果开始日期(年)< 2019 AND 结束日期(年)= 2019,取 1-1-2019 和结束日期之间的月数。
- 如果开始日期(年)< 2019 AND 结束日期(年)> 2019,则 2019 年的月数 = 12
- 如果开始日期(年)= 2019 AND 结束日期(年)= 2019,取开始日期和结束日期之间的月数。
- 如果开始日期(年)= 2019 AND 结束日期(年)> 2019,取开始日期和 1-1-2020 之间的月数。
- 对于所有其他情况,月数 = 0。
然后我按照 this website 中的说明进行嵌套 IF 函数。
我想出了以下公式:(编辑:将 last datedif 更改为 2020 而不是 2019)
=IF(AND(YEAR(A3)<2019;YEAR(C3)=2019);DATEDIF(DATE(2019;1;1);C3;"m");IF(AND(YEAR(A3)<2019;YEAR(C3)>2019);12;IF(AND(YEAR(A3)=2019;YEAR(C3)=2019);DATEDIF(A3;C3;"m");IF(AND(YEAR(A3)=2019;YEAR(C3)>2019); DATEDIF(A3;DATE(2020;1;1);m);0))))
对于前 4 行,正确 returns 12。
但是,对于第 7 行和第 8 行,它 returns #NAME? .
无论我怎么尝试,我似乎都无法让它工作。关于如何解决这个问题的任何想法?
非常感谢!
艾米
你错过了决赛的报价 "m" - 试试
=IF(AND(YEAR(A3)<2019;YEAR(C3)=2019);DATEDIF(DATE(2019;1;1);C3;"m");IF(AND(YEAR(A3)<2019;YEAR(C3)>2019);12;IF(AND(YEAR(A3)=2019;YEAR(C3)=2019);DATEDIF(A3;C3;"m");IF(AND(YEAR(A3)=2019;YEAR(C3)>2019); DATEDIF(A3;DATE(2019;1;1);"m");0))))
对于整个公式,除了最后一个 IF 语句外,您在 DATEDIF(
语句中出错的地方是一致的:
DATEDIF(A3;DATE(2019;1;1);m);0)
首先你忘了把 m
放在引号里:"m"
其次,您不小心交换了日期和单元格引用,所以它会解决 #NUM
。完整正确的公式应该是:
=IF(AND(YEAR(A7)<2019;YEAR(C7)=2019);DATEDIF(DATE(2019;1;1);C7;"m");IF(AND(YEAR(A7)<2019;YEAR(C7)>2019);12;IF(AND(YEAR(A7)=2019;YEAR(C7)=2019);DATEDIF(A7;C7;"m");IF(AND(YEAR(A7)=2019;YEAR(C7)>2019);DATEDIF(DATE(2019;1;1);A7;"m");0))))
这将为您提供结果 4
。
或者,以下内容将为您提供两个日期之间的完整月数。这适用于您的示例,您的日期从一个月的第一天开始:
D2
中的公式:
=SUMPRODUCT((DATE(2019,ROW(:),1)>=A2)*(DATE(2019,ROW(:),1)<=C2))
我正在尝试计算 2019 年给定时间范围内的月数。
我的数据是这样的:
我将开始日期和结束日期列的格式更改为 "date"。 "Duration in months" 和输出列具有数字格式。
我是这样处理的:
- 如果开始日期(年)< 2019 AND 结束日期(年)= 2019,取 1-1-2019 和结束日期之间的月数。
- 如果开始日期(年)< 2019 AND 结束日期(年)> 2019,则 2019 年的月数 = 12
- 如果开始日期(年)= 2019 AND 结束日期(年)= 2019,取开始日期和结束日期之间的月数。
- 如果开始日期(年)= 2019 AND 结束日期(年)> 2019,取开始日期和 1-1-2020 之间的月数。
- 对于所有其他情况,月数 = 0。
然后我按照 this website 中的说明进行嵌套 IF 函数。
我想出了以下公式:(编辑:将 last datedif 更改为 2020 而不是 2019)
=IF(AND(YEAR(A3)<2019;YEAR(C3)=2019);DATEDIF(DATE(2019;1;1);C3;"m");IF(AND(YEAR(A3)<2019;YEAR(C3)>2019);12;IF(AND(YEAR(A3)=2019;YEAR(C3)=2019);DATEDIF(A3;C3;"m");IF(AND(YEAR(A3)=2019;YEAR(C3)>2019); DATEDIF(A3;DATE(2020;1;1);m);0))))
对于前 4 行,正确 returns 12。 但是,对于第 7 行和第 8 行,它 returns #NAME? .
无论我怎么尝试,我似乎都无法让它工作。关于如何解决这个问题的任何想法?
非常感谢!
艾米
你错过了决赛的报价 "m" - 试试
=IF(AND(YEAR(A3)<2019;YEAR(C3)=2019);DATEDIF(DATE(2019;1;1);C3;"m");IF(AND(YEAR(A3)<2019;YEAR(C3)>2019);12;IF(AND(YEAR(A3)=2019;YEAR(C3)=2019);DATEDIF(A3;C3;"m");IF(AND(YEAR(A3)=2019;YEAR(C3)>2019); DATEDIF(A3;DATE(2019;1;1);"m");0))))
对于整个公式,除了最后一个 IF 语句外,您在 DATEDIF(
语句中出错的地方是一致的:
DATEDIF(A3;DATE(2019;1;1);m);0)
首先你忘了把 m
放在引号里:"m"
其次,您不小心交换了日期和单元格引用,所以它会解决 #NUM
。完整正确的公式应该是:
=IF(AND(YEAR(A7)<2019;YEAR(C7)=2019);DATEDIF(DATE(2019;1;1);C7;"m");IF(AND(YEAR(A7)<2019;YEAR(C7)>2019);12;IF(AND(YEAR(A7)=2019;YEAR(C7)=2019);DATEDIF(A7;C7;"m");IF(AND(YEAR(A7)=2019;YEAR(C7)>2019);DATEDIF(DATE(2019;1;1);A7;"m");0))))
这将为您提供结果 4
。
或者,以下内容将为您提供两个日期之间的完整月数。这适用于您的示例,您的日期从一个月的第一天开始:
D2
中的公式:
=SUMPRODUCT((DATE(2019,ROW(:),1)>=A2)*(DATE(2019,ROW(:),1)<=C2))