Excel 如何计算两个日期之间的年数

Excel 如何计算两个日期之间的年数,excel,vba,date,time,offset,Excel,Vba,Date,Time,Offset,此宏计算工作经历的第一个日期和最后一个日期之间的年数。我做了这项工作,但得到了一个奇怪的数字格式(像一个日期,而不是一个数字)。看起来好像有点不对劲。 提前感谢您的评论 Sub CuentaExperiencia() Worksheets("Candidatos").Activate 'esta macro contabiliza los años de experiencia sumados Range("T2").Select Do Until ActiveCell.Offset(0, -

此宏计算工作经历的第一个日期和最后一个日期之间的年数。我做了这项工作,但得到了一个奇怪的数字格式(像一个日期,而不是一个数字)。看起来好像有点不对劲。 提前感谢您的评论

Sub CuentaExperiencia()
Worksheets("Candidatos").Activate
'esta macro contabiliza los años de experiencia sumados

Range("T2").Select
Do Until ActiveCell.Offset(0, -18).Value = ""
    If ActiveCell.Value = "" Then
    ActiveCell.FormulaR1C1 = DateDiff("d", (ActiveCell.Offset(0, -2)), (ActiveCell.Offset(0, -1)))
    End If
    ActiveCell.Offset(1, 0).Select
Loop

Range("AE2").Select
Do Until ActiveCell.Offset(0, -29).Value = ""
    If ActiveCell.Value = "" Then
    ActiveCell.FormulaR1C1 = DateDiff("d", (ActiveCell.Offset(0, -2)), (ActiveCell.Offset(0, -1)))
    End If
    ActiveCell.Offset(1, 0).Select
Loop

Range("AP2").Select
Do Until ActiveCell.Offset(0, -40).Value = ""
    If ActiveCell.Value = "" Then
    ActiveCell.FormulaR1C1 = DateDiff("d", (ActiveCell.Offset(0, -2)), (ActiveCell.Offset(0, -1)))
    End If
    ActiveCell.Offset(1, 0).Select
Loop

Range("BA2").Select
Do Until ActiveCell.Offset(0, -51).Value = ""
    If ActiveCell.Value = "" Then
    ActiveCell.FormulaR1C1 = DateDiff("d", (ActiveCell.Offset(0, -2)), (ActiveCell.Offset(0, -1)))
    End If
    ActiveCell.Offset(1, 0).Select
Loop


End Sub
只需使用
=天(结束日期、开始日期)
公式,然后除以365即可得到年数;不需要使用VBA。如果您是作为更大的VBA宏的一部分执行此操作,则只需使用
工作表function.Days(结束日期、开始日期)

编辑:更简单:只需使用
=YEARFRAC()
。这一切都会为你做的

你应该注意到,简单地除以365并不代表闰年,这会在答案中引入一些错误。虽然在这种情况下此错误很小,但您可以通过使用
=YEARFRAC(开始日期、结束日期、[basis])
并使用
1
作为基本参数来避免此错误。这将强制使用实际日历日,这将正确解释闰年。否则,
YEARFRAC
假设每个月有30天的标准月,您的答案将越来越不准确。

只需使用
=DAYS(end\u date,start\u date)
公式,然后除以365即可得到年数;不需要使用VBA。如果您是作为更大的VBA宏的一部分执行此操作,则只需使用
工作表function.Days(结束日期、开始日期)

编辑:更简单:只需使用
=YEARFRAC()
。这一切都会为你做的


你应该注意到,简单地除以365并不代表闰年,这会在答案中引入一些错误。虽然在这种情况下此错误很小,但您可以通过使用
=YEARFRAC(开始日期、结束日期、[basis])
并使用
1
作为基本参数来避免此错误。这将强制使用实际日历日,这将正确解释闰年。否则,
YEARFRAC
假设每个月有一个标准的30天月,您的答案将越来越不准确。

或者您可以像这样使用Datediff函数

DateDiff("yyyy", StartDate, EndDate)
示例代码:

Sub NumberOfYears()
Dim StartDate As Date
Dim EndDate As Date
Dim Years As Integer

StartDate = #1/1/2015#
EndDate = #12/31/2017#

Years = DateDiff("yyyy", StartDate, EndDate)
MsgBox Years
End Sub

或者你可以像这样使用Datediff函数

DateDiff("yyyy", StartDate, EndDate)
示例代码:

Sub NumberOfYears()
Dim StartDate As Date
Dim EndDate As Date
Dim Years As Integer

StartDate = #1/1/2015#
EndDate = #12/31/2017#

Years = DateDiff("yyyy", StartDate, EndDate)
MsgBox Years
End Sub

将单元格格式更改为
General
同样,您将返回带有
“d”
的天数,并将其更改为
“y”
数年。将此数字粘贴到单元格
43000.8067708333
中,然后将单元格格式更改为
日期
,然后将单元格格式更改为
时间
。。。日期和时间实际上存储为一个数字。。。。整数部分(43000)是日期。小数部分是一天中的时间。您也可以在工作表中使用DATEDIF公式:将单元格格式更改为
General
,并且您将返回带有
“d”
的天数,将其更改为
“y”
数年。将此数字粘贴到单元格
43000.8067708333
,然后将单元格格式更改为
date
,然后将单元格格式更改为时间。。。日期和时间实际上存储为一个数字。。。。整数部分(43000)是日期。小数部分是一天中的时间,你也可以在表格中使用DATEDIF公式:除以365会给出不准确的结果,因为闰日(2月29日)被一年中的
1/365
减去,在确定工作经验年数时应该无关紧要。(a)它是
=天(结束日期,开始日期)
(即,您的参数是背对背的)(b)如果您在使用DAYS函数时遇到麻烦(而不仅仅是计算
=end\u date-start\u date
),那么您显然担心这两个参数的时间部分对结果的影响,因此这将意味着使用
365
(甚至除数中的
365.2425
)可能会引起问题。@Chilangosta,如果你从3月1日开始并加上365天,你大部分时间都可以在3月1日着陆,但也可以在2月29日着陆。如果你计算整个日历年,这是一年时间的25%。
=YEARFRAC()
Re(b)的升票是的,Excel有时在猜测应用哪种单元格格式时不是很聪明。当它识别出公式在减去两个日期时,通常会假定它正在返回一个数字,并将其格式化为
常规
。例如,
=TODAY()-DATE(2015,1,1)
(即使用日期而不是字符串作为减去的值)显示995。两个单元格的格式均为日期的
=A1-B1
也是如此。但是
=TODAY()-A1
将结果显示为日期,尽管两个值都可以识别为日期。奇怪的Excel。愚蠢的Excel。(但我们仍然喜欢它。)除以365会给出一个不准确的结果,因为闰日(2月29日)被一年的
1/365
,在确定工作经验年数时应该无关紧要。(a)它是
=天(结束日期,开始日期)
(即,您的参数前后颠倒)(b)如果您在使用days函数时遇到麻烦(而不是仅仅计算
=end\u date-start\u date
),那么您显然关心两个参数的时间部分对结果的影响,因此这意味着使用
365
(甚至
365.2425
)除数中的值可能会引起问题。@Chilangosta,如果你从3月1日开始,加上365天,你大部分时间都可以在3月1日着陆,但也可以在2月29日着陆。如果你计算整个日历年,这是一年时间差的25%。
=YEARFRAC()
Re(b)的向上投票是的,Excel有时在猜测应用哪种单元格格式时不是很聪明。当它识别出公式在减去两个日期时,通常会假定它正在返回一个数字,并将其格式化为
常规
。例如,
=TODAY()-DATE(2015,1,1)
(即使用日期而不是字符串作为减去的值)di