本帖最后由 龙送农 于 2016-6-17 11:07 编辑
VBA年龄工龄计算问题:M列和O列有数据时,自动计算“年龄”和“工龄”在N列P列,切换到“数据表”时,自动执行,达到附件公式效果。
代码放在sheet1的工作表事件中,但是我算的工龄有几个会相差一年,你先看下吧: - Private Sub Worksheet_Activate()
- Dim arr, y1 As Date, y2 As Date, y As Date, i&, n&
- n = Sheet1.Cells(Rows.Count, 13).End(xlUp).Row
- arr = Sheet1.Range("M5:p" & n)
- y = CDate(Left(Cells(2, 8), 4) & "-" & Mid(Cells(2, 8), InStr(Cells(2, 8), ".") + 1, 2) & "-01")
- For i = 1 To n - 4
- If arr(i, 1) <> "" And arr(i, 3) <> "" Then
- y1 = CDate(Left(arr(i, 1), 4) & "-" & Mid(arr(i, 1), InStr(arr(i, 1), ".") + 1, 2) & "-01")
- y2 = CDate(Left(arr(i, 3), 4) & "-" & Mid(arr(i, 3), InStr(arr(i, 3), ".") + 1, 2) & "-01")
- arr(i, 2) = DateDiff("yyyy", y1, Date)
- arr(i, 4) = DateDiff("yyyy", y2, y)
- End If
- Next
- Sheet1.Range("M5").Resize(n - 4, 4) = arr
- End Sub
- Private Sub Worksheet_Change(ByVal Target As Range)
- Dim r&, y1 As Date, y2 As Date, y As Date
- If Target.Count > 1 Then Exit Sub
- If Target.Column = 13 Or Target.Column = 15 Then
- r = Target.Row
- If Cells(r, 13) <> "" And Cells(r, 15) <> "" Then
- y1 = CDate(Left(Cells(r, 13), 4) & "-" & Mid(Cells(r, 13), InStr(Cells(r, 13), ".") + 1, 2) & "-01")
- y2 = CDate(Left(Cells(r, 15), 4) & "-" & Mid(Cells(r, 15), InStr(Cells(r, 15), ".") + 1, 2) & "-01")
- y = CDate(Left(Cells(2, 8), 4) & "-" & Mid(Cells(2, 8), InStr(Cells(2, 8), ".") + 1, 2) & "-01")
- Cells(r, 14) = DateDiff("yyyy", y1, Date)
- Cells(r, 16) = DateDiff("yyyy", y2, y)
- End If
- End If
- End Sub
复制代码
|