计算 Excel 中两个日期之间的月数
Counting Number of Months between Two Dates in Excel
所以我试图简单地计算较早日期和今天之间的月数,这将在 B:B 列中;计算完月数后,将结果乘以 28,然后加回原始日期。注意要求:Result >= Today,所以基本上如果结果小于今天就需要再增加 28 天。我制作的当前公式仅在日期为当年时才有效(我不是 100% 确定此公式是否有效,但到目前为止似乎如此。)
这是我的失效公式,但也许有人可以从我上面的评论和下面我试图在这里实现的公式中得到一个大概的想法:
=IF(B89="","",IF(I89="X","LEG",IFERROR(IF((MONTH(TODAY()-B89)*28)+B89<TODAY(),(MONTH(TODAY()-B89)*28)+B89+28,(MONTH(TODAY()-B89)*28)+B89),"Future")))
提前感谢您的协助!
注意:我只是想指出上面提到的I89是无关紧要的。我只是不想删除它以防我删除了错误的括号或其他拼写错误,所以我决定保留在那里。所以基本上你不必担心前两个 "IF" 语句,也不必担心 IFERROR,除非你只是想!
第二次编辑:好吧,我决定精简公式,原始 post 的公式在上面,精简版本如下:
IF((MONTH(TODAY()-B89)*28)+B89<TODAY(),(MONTH(TODAY()-B89)*28)+B89+28,(MONTH(TODAY()-B89)*28)+B89)
这样的事情怎么样:
=IF(B89="","",IF(I89="X","LEG",IF(IF(B89<=TODAY(),B89+28*IF(AND(B89<TODAY(),TEXT(B89,"mmyy")=TEXT(TODAY(),"mmyy")),"1",(TEXT(TODAY(),"yy")*12+MONTH(TODAY()))-(TEXT(B89,"yy")*12+MONTH(B89))),"Future")<TODAY(),TODAY(),IF(B89<=TODAY(),B89+28*IF(AND(B89<TODAY(),TEXT(B89,"mmyy")=TEXT(TODAY(),"mmyy")),"1",(TEXT(TODAY(),"yy")*12+MONTH(TODAY()))-(TEXT(B89,"yy")*12+MONTH(B89)))))))
时间有点长,但是你有很多标准:)
您不应为此目的使用 MONTH()
,因为这在某些情况下会导致错误的结果,当然当 B89
日期在另一年时。
相反,请查看自 B89
以来您已经过了 28 天的最后一个倍数多少天,然后返回该日期(通过减去),然后再添加 28:
=TODAY() + 28 - MOD((TODAY()-B89), 28)
这个能给出的最早日期是明天的日期。如果今天应该是公式的可接受结果,则将 TODAY()
替换为 TODAY()-1
,这将导致此公式:
=TODAY() + 27 - MOD((TODAY()-1-B89), 28)
所以我试图简单地计算较早日期和今天之间的月数,这将在 B:B 列中;计算完月数后,将结果乘以 28,然后加回原始日期。注意要求:Result >= Today,所以基本上如果结果小于今天就需要再增加 28 天。我制作的当前公式仅在日期为当年时才有效(我不是 100% 确定此公式是否有效,但到目前为止似乎如此。)
这是我的失效公式,但也许有人可以从我上面的评论和下面我试图在这里实现的公式中得到一个大概的想法:
=IF(B89="","",IF(I89="X","LEG",IFERROR(IF((MONTH(TODAY()-B89)*28)+B89<TODAY(),(MONTH(TODAY()-B89)*28)+B89+28,(MONTH(TODAY()-B89)*28)+B89),"Future")))
提前感谢您的协助!
注意:我只是想指出上面提到的I89是无关紧要的。我只是不想删除它以防我删除了错误的括号或其他拼写错误,所以我决定保留在那里。所以基本上你不必担心前两个 "IF" 语句,也不必担心 IFERROR,除非你只是想!
第二次编辑:好吧,我决定精简公式,原始 post 的公式在上面,精简版本如下:
IF((MONTH(TODAY()-B89)*28)+B89<TODAY(),(MONTH(TODAY()-B89)*28)+B89+28,(MONTH(TODAY()-B89)*28)+B89)
这样的事情怎么样:
=IF(B89="","",IF(I89="X","LEG",IF(IF(B89<=TODAY(),B89+28*IF(AND(B89<TODAY(),TEXT(B89,"mmyy")=TEXT(TODAY(),"mmyy")),"1",(TEXT(TODAY(),"yy")*12+MONTH(TODAY()))-(TEXT(B89,"yy")*12+MONTH(B89))),"Future")<TODAY(),TODAY(),IF(B89<=TODAY(),B89+28*IF(AND(B89<TODAY(),TEXT(B89,"mmyy")=TEXT(TODAY(),"mmyy")),"1",(TEXT(TODAY(),"yy")*12+MONTH(TODAY()))-(TEXT(B89,"yy")*12+MONTH(B89)))))))
时间有点长,但是你有很多标准:)
您不应为此目的使用 MONTH()
,因为这在某些情况下会导致错误的结果,当然当 B89
日期在另一年时。
相反,请查看自 B89
以来您已经过了 28 天的最后一个倍数多少天,然后返回该日期(通过减去),然后再添加 28:
=TODAY() + 28 - MOD((TODAY()-B89), 28)
这个能给出的最早日期是明天的日期。如果今天应该是公式的可接受结果,则将 TODAY()
替换为 TODAY()-1
,这将导致此公式:
=TODAY() + 27 - MOD((TODAY()-1-B89), 28)