今天使用Excel遇到一个问题,需要计算两个日期之间的月份数,精确到小数点后1位。表格如下图所示,参考C2中的结果计算C列的值。

要计算两个日期之间的天数、月数或年数,要用到Excel中隐藏函数DATEDIF,简单介绍一下DATEDIF的语法:
DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如 "2001/1/30")、系列数(例如,如果使用 1900 日期系统则 36921 代表 2001 年 1 月 30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。 
Unit     返回
"Y"     时间段中的整年数。
"M"     时间段中的整月数。
"D"     时间段中的天数。
"MD"     start_date 与 end_date 日期中天数的差。忽略日期中的月和年。
"YM"     start_date 与 end_date 日期中月数的差。忽略日期中的日和年。
"YD"     start_date 与 end_date 日期中天数的差。忽略日期中的年。
说明
Microsoft Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用 1900 日期系统,则 Excel 会将 1900 年 1 月 1 日保存为系列数 1。而如果工作簿使用 1904 日期系统,则 Excel 会将 1904 年 1 月 1 日保存为系列数 0,(而将 1904 年 1 月 2 日保存为系列数 1)。例如,在 1900 日期系统中 Excel 将 1998 年 1 月 1 日保存为系列数 35796,因为该日期距离 1900 年 1 月 1 日为 35795 天。
示例
DATEDIF("2001/1/1","2003/1/1","Y") 等于 2,即时间段中有两个整年。
DATEDIF("2001/6/1","2002/8/15","D") 等于 440,即在 2001 年 6 月 1 日和 2002 年 8 月 15 日之间有 440 天。
DATEDIF("2001/6/1","2002/8/15","YD") 等于 75,即在 6 月 1 日与 8 月 15 日之间有 75 天,忽略日期中的年。
DATEDIF("2001/6/1","2002/8/15","MD") 等于 14,即开始日期 1 和结束日期 15 之间的差,忽略日期中的年和月。

既然要计算两个日期之间相差的月份,一定要使用到"=DATEDIF(start_date,end_date,"m")"。但如果两个日期之间相差11天,比如2008 年 4 月 25 日和2008 年 5 月 5 日。那么计算出来的相差月份经过四舍五入取整数值的话误差将会很大,所以就像题干要求的那样至少也要保留1位小数。涉及到用小数表示月份其实就是对天数的计算,用"=DATEDIF(start_date,end_date,"md")"算出两个日期相差的天数再除以30就是折算出来的月份数。
下面利用"=DATEDIF(start_date,end_date,"md")"举一个例子,
start_date      end_date        Unit
2008-4-15       2008-5-5        -0.3
2008-4-15       2008-5-25        0.3
注意第一行end_date的d值比start_date的d值要小,所以结果为负值也很正常。但end_date的m值与start_date相差1,所以最后的结果是0.7。考虑到end_date有可能比start_date小这歌情况之后,整个公式也不难写出来了。
=DATEDIF(start_date,end_date,"m")+DATEDIF(start_date,end_date,"md")/30
以C3为例

拉住C3右下角的十字星,应用公式到整列

得到结果

设置单元格格式,数字类型为数值,精确到小数点后1位

可以对比上面两图中月份数,设置单元格格式之后,对C列的值会自动进行四舍五入的运算。也可以使用ROUND(number,num_digits)函数先进行四舍五入,再设置单元格格式。