此宏计算工作经历的第一个和最后一个日期之间的年数。我做了这个工作但是以一种奇怪的格式获得这个数字(比如一个日期而不是一个数字)。看起来有些事情可能是错的。 提前感谢您的意见。
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
答案 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天月份,您的答案将越来越不准确。