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

时间:2017-09-22 18:47:58

标签: 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, -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

2 个答案:

答案 0 :(得分:3)

或者您可以像这样使用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

答案 1 :(得分:2)

只需使用=DAYS(end_date,start_date)公式,然后除以365即可获得年数;无需使用VBA。如果您将其作为更大的VBA宏的一部分,则可以使用WorksheetFunction.Days(end_date,start_date)

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

您应该注意,简单地除以365并不能解释闰年,这会在答案中引入一些错误。虽然在这种情况下此错误很简单,但您只需使用=YEARFRAC(start_date, end_date, [basis])并使用1作为基本参数即可避免此错误。这将强制使用实际日历日,这将正确计算闰年。否则,YEARFRAC假定每月标准的30天月份,您的答案将越来越不准确。