如何计算两个date之间的年数

这个macros计算工作经历的第一个和最后一个date之间的年数。 我做了这个工作,但以奇怪的格式(像一个date而不是一个数字)得到这个数字。 看起来有些事情可能是错的。 在此先感谢您的意见。

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 

只需使用=DAYS(end_date,start_date)公式,然后除以365得到年数; 不需要使用VBA。 如果你正在做一个更大的VBAmacros的一部分,你可以使用WorksheetFunction.Days(end_date,start_date)

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

你应该注意到,简单地除以365并不能解释闰年,这就给答案带来了一些错误。 尽pipe在这种情况下这个错误是微不足道的,但是您可以简单地通过使用=YEARFRAC(start_date, end_date, [basis])并使用1作为基本参数来避免它。 这将强制使用实际的日历date,这将正确地说明闰年。 否则, YEARFRAC每个月都会有一个标准的30天的月份,而您的回答会越来越不准确。

或者你可以使用这样的Datedifffunction…

 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