Excel formula 如何计算特定年份中两个日期之间的月数

Excel formula 如何计算特定年份中两个日期之间的月数,excel-formula,Excel Formula,我在Excel/Google表格中有一组可能是随机的开始日期和学期长度 Example - considering 2019 as the year in question January 2017, 24 months January 2019, 12 months April 2019, 12 months May 2020, 7 months 我需要计算一年中每个学期的月数 Example answers - number of months in given timeframe tha

我在Excel/Google表格中有一组可能是随机的开始日期和学期长度

Example - considering 2019 as the year in question
January 2017, 24 months
January 2019, 12 months
April 2019, 12 months
May 2020, 7 months
我需要计算一年中每个学期的月数

Example answers - number of months in given timeframe that are in 2019
February 2017, 24 months A: 1 months
January 2019, 12 months A: 12 months
April 2019, 12 months A: 9 months
May 2020, 7 months A: 0 months

使用
DATEDIFF
计算开始和结束日期很容易。如果没有极其复杂的逻辑,我无法确定一年中会有多少个月

除了一系列嵌套条件之外,我是否遗漏了一些东西来确定起始月份是否在指定的年份中

获取嵌套太深的条件语句并不理想,因为需要添加额外的层,例如是否更新术语等,这会增加额外的复杂性

假设 开始日期和月份都是单独列中的字符串。 可以将它们转换为帮助器列中的实际日期。 数据按下图进行布局

一般的 我只是用一种简化的方法来阐述我的解决方案。您可以依次嵌套公式、硬代码项等以满足您的需要

过程 将开始日期从A6中的字符串转换为实际的excel日期,并将其置于D6中。我只是使用了以下公式,但根据系统设置,还存在其他方法,可能需要其他方法

=DATEVALUE(A6)
根据月份偏移计算结束日期,并将其放入E6中。为了实现这一点,我使用了以下公式,这与您似乎理解的DATEDIFF不同

=EOMONTH(D6,LEFT(B6,FIND(" ",B6)-1)-2)+1
将您要查找的给定年份放在指定的单元格中。在这种情况下,我选择了F1

根据F1中的整数生成一年中第一个月和最后一个月的实际日期。我把它们分别放在F2和F3中

=DATE(F1,1,1)

=DATE(F1,12,1)

Note:  These can easily be embedded in formulas but can be cleaner and make formulas easier to read.
接下来,您需要测试6个条件:

  • 整个期间在给定年份=>0之前
  • 整个期间在给定年份=>0之后
  • 该期间在给定年份之前开始,在给定年份结束后结束=>12
  • 该期间在给定年份之前开始,在给定年份内结束=>公式1
  • 该期间从给定年份开始,在给定年份结束=>公式2
  • 该期间在给定年份内开始,在给定年份内结束=公式3
  • 我将使用嵌套的IF来处理这个问题,并将分步骤进行解释。条件1和2都会导致0。因此,检查任一条件是否为真,如果为真,则返回0:

    =IF(OR(E6<$F$2,D6>$F$3),0,
    
    =IF(或(E6$F$3),0,
    
    注:公式未完成。if的错误部分未提供,我们可以在其中检查条件3

    =IF(OR(E6<$F$2,D6>$F$3),0,IF(AND(D6<=$F$2,E6>=$F$3),12,
    
    =IF(OR(E6$F$3)、0、IF(AND(D6=$F$3)、12、,
    

    这样,检查开始日期和结束日期是否跨越当前年。注意我使用= =,如果周期开始日期等于当前年的开始,或者结束日期等于当前年份的结尾,则其结果相同,并保存以后进行数学计算。再次,没有提供虚假的一面。输入,你需要检查条件4

    检查周期开始日期是否早于给定的年份。您不需要同时检查结束日期,因为如果结束日期是在您知道之前的条件3检查已经捕捉到它之后。如果是,结束日期的月份将告诉您给定年份中有多少个月。周期结束的月份计算公式为1

    =IF(OR(E6<$F$2,D6>$F$3),0,IF(AND(D6<=$F$2,E6>=$F$3),12,IF(D6<=$F$2,MONTH(E6),
    

    =IF(OR(E6$F$3)、0、IF(AND(D6=$F$3)、12、IF(D6这个建议很有效。下面是我做的一些额外修改

    无论是自动续约,还是预期终止,都必须添加。不过,根据您的建议,这只是一个简单的修改

    参考图像

    审查的年份是R2——在本例中为2019年 开始日期-H列 术语长度-第I列 续订状态-第K列(如果设置为“是”,则假定期限无限期地继续) 结束日期-第P列 Q列所述年度内发生的从给定期限算起的月份

    第二季度是年度审查中的门店 示例中使用的行是208(对不起)

    第p列中的公式检查续期是否设置为Y或N。如果N使用所示的期限结束。如果Y将期限结束设置为相关年份的12/31

    =IF(K208="N",EOMONTH(H208,I208-1),DATE($Q$2,12,31))
    
    请注意,有一个细微的变化将结束日期表示为月底,因为我关心的是完整的月份,而不是截止日期

    例子 从2019年2月开始为期一个月的期限为2019年2月1日至2019年2月28日(不是2019年2月1日至2019年3月1日) 从2019年2月开始为期三个月的期限为2019年2月1日至2019年4月30日(不是2019年2月1日至2019年5月1日)

    然后,我基本上使用了Forward Ed for的公式,根据他描述的逻辑来计算我关心的月份数

    =IF(OR(P208<DATE($Q$2,1,1),H208>DATE($Q$2,12,31)),0,IF(AND(H208<=DATE($Q$2,1,1),P208>=DATE($Q$2,12,31)),12,IF(H208<=DATE($Q$2,1,1),MONTH(P208),IF(P208>=DATE($Q$2,12,31),12-MONTH(H208)+1,MONTH(P208)-MONTH(H208)+1))))
    
    =IF(或(P208日期($2,12,31))、0、IF(和(H208=日期($2,12,31))、12、IF(H208=日期($2,12,31))、12个月(H208)+1个月(P208)-月(H208)+1个月)
    
    你能解释用于推导答案的逻辑吗?不要遵循“大量复杂的逻辑”->你可以分享这个版本来澄清你尝试了什么+你要去哪里(逻辑)。请编辑您的问题,并提供更多关于逻辑的详细信息。您想要实现的目标完全不清楚。当然,我很高兴其他人不这么做。这个问题的措辞就像是一个更简单的解决方案,但我找不到给定日期、给定条款和解决方案之间的模式。给定年份是2019年
    =IF(K208="N",EOMONTH(H208,I208-1),DATE($Q$2,12,31))
    
    =IF(OR(P208<DATE($Q$2,1,1),H208>DATE($Q$2,12,31)),0,IF(AND(H208<=DATE($Q$2,1,1),P208>=DATE($Q$2,12,31)),12,IF(H208<=DATE($Q$2,1,1),MONTH(P208),IF(P208>=DATE($Q$2,12,31),12-MONTH(H208)+1,MONTH(P208)-MONTH(H208)+1))))