Excel中的年度差异

时间:2018-11-14 14:09:44

标签: excel excel-formula excel-2010 formula

我在Excel工作表中有两列year作为year.months格式(第一列为1.11表示1年11个月,第二列为0.7表示7个月)。我需要两列之间的差异作为year.months格式。即1.11-0.7 = 1.4表示1年4个月。

3 个答案:

答案 0 :(得分:1)

此方法将通过将所有内容转换为与月相同的基本单位来执行数学运算。您可以在多列上执行步骤,这将使阅读,维护和故障排除变得更加容易。当一切正常时,您可以将其组合为一个公式,这将是一种难以理解的怪兽,将来可能被其他人维护。

对于此解决方案,假设您的1.11日期位于A1中,而您0.7日期位于B1中。

第1步)将A1和B1转换为月

在C1中放置以下公式并将其复制到D1

=C1-D1

第2步)找出月份差异

在E1中放置以下公式

=INT(E1/12)&"."&(E1-INT(E1/12)*12)

第3步)将月份之间的差异转换回year.month格式

在F1中放置以下公式

=INT(((LEFT(A1,FIND(".",A1)-1)*12+RIGHT(A1,LEN(A1)-FIND(".",A1)))-(LEFT(B1,FIND(".",B1)-1)*12+RIGHT(B1,LEN(B1)-FIND(".",B1))))/12)&"."&(((LEFT(A1,FIND(".",A1)-1)*12+RIGHT(A1,LEN(A1)-FIND(".",A1)))-(LEFT(B1,FIND(".",B1)-1)*12+RIGHT(B1,LEN(B1)-FIND(".",B1))))-INT(((LEFT(A1,FIND(".",A1)-1)*12+RIGHT(A1,LEN(A1)-FIND(".",A1)))-(LEFT(B1,FIND(".",B1)-1)*12+RIGHT(B1,LEN(B1)-FIND(".",B1))))/12)*12)

现在,如果您将公式相互替换,因此所有公式都放在一个单元格中,则公式将显示以下内容。

{{1}}

我不想成为新来的人,看着它,试图弄清楚它的作用,更不用说在需要更改的三个月内对其进行编辑了。

POC

一些警告,请确保A中的日期大于B中的日期。对于负值,它给出不好的结果。同时确保始终有一个“。”日期,否则会发生错误。如果有12个月的差异,则当前将显示1.0作为差异,而不是0.12。如果需要更高版本,则当差异导致12个差异的倍数时,将需要开发一种特殊情况。

答案 1 :(得分:1)

使用DatedIF

假设开始日期在B1中,结束日期在A1中。

第1步)转换日期

将字符串转换为实际的Excel序列日期

在C1中,使用以下公式并将其复制到D1

=DATE(LEFT(A1,FIND(".",A1)-1),RIGHT(A1,LEN(A1)-FIND(".",A1)),1)

转换假定为每月的第一天

第2步)确定月数差异

将以下内容放入E1

=DATEDIF(D1,C1,"M") 

请注意,开始日期必须早于结束日期,否则会出现#NUM错误。

第3步)转换回y.m的字符串格式

将以下内容放入F1

=INT(E1/12)&"."&(E1-INT(E1/12)*12)

并合并为一个单元格公式的丑陋形式:

=INT((DATEDIF(DATE(LEFT(B1,FIND(".",B1)-1),RIGHT(B1,LEN(B1)-FIND(".",B1)),1),DATE(LEFT(A1,FIND(".",A1)-1),RIGHT(A1,LEN(A1)-FIND(".",A1)),1),"M"))/12)&"."&((DATEDIF(DATE(LEFT(B1,FIND(".",B1)-1),RIGHT(B1,LEN(B1)-FIND(".",B1)),1),DATE(LEFT(A1,FIND(".",A1)-1),RIGHT(A1,LEN(A1)-FIND(".",A1)),1),"M"))-INT((DATEDIF(DATE(LEFT(B1,FIND(".",B1)-1),RIGHT(B1,LEN(B1)-FIND(".",B1)),1),DATE(LEFT(A1,FIND(".",A1)-1),RIGHT(A1,LEN(A1)-FIND(".",A1)),1),"M"))/12)*12)

答案 2 :(得分:0)

让我们说A1=1.11B1=0.7,那么公式将是:

=LEFT(A1;FIND(".";A1;1)-1)-LEFT(B1;FIND(".";B1;1)-1)&"."&(MID(A1;FIND(".";A1;1)+1;2)-MID(B1;FIND(".";B1;1)+1;2))

enter image description here