Hàm tính tuổi bằng VBA

Quảng cáo

Quang_Hải

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,801
Được thích
7,443
Điểm
3,168
Nơi ở
Thuận An, Bình Dương
Mấy hôm rồi có công việc liên quan đến việc cần tính tuổi chính xác của người phụ thuộc để hưởng giảm trừ thuế TNCN
Nếu dùng hàm Datedif thì VBA không hỗ trợ. Loay hoay tìm trên GPE nhưng không tìm được (chắc trước giờ không ai có nhu cầu). Sau mấy hôm vật vã thì mình tạm thời áp dụng code này. Nay post lên để mọi người góp ý nếu cần phải hoàn thiện thêm, và cũng để cho ai có nhu cầu
Mã:
Public Function ExactAge(BirthDate As Variant) As String
Dim YearOld As Integer, MonthOld As Integer, DayOld As Integer, DOB As Date
 If Not IsDate(BirthDate) Then Exit Function
 DOB = CDate(BirthDate)
 If DOB > Date Then Exit Function
 YearOld = Year(DOB)
 MonthOld = Month(DOB)
 DayOld = Day(DOB)
 YearOld = Year(Date) - YearOld
 MonthOld = Month(Date) - MonthOld
 DayOld = Day(Date) - DayOld
 If Sgn(DayOld) = -1 Then
     DayOld = 30 - Abs(DayOld)
     MonthOld = MonthOld - 1
 End If
 If Sgn(MonthOld) = -1 Then
     MonthOld = 12 - Abs(MonthOld)
     YearOld = YearOld - 1
 End If
ExactAge = YearOld & " Year(s) " & MonthOld & " Month(s) " & DayOld & " Day(s) old."
End Function
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
11,050
Được thích
13,713
Điểm
4,868
Hàm như thế là bị giới hạn.
Nếu làm đúng thì phải có (optional) tham số thứ hai, "tính đến ngày". Nếu tham số này là 0 thì lấy ngày hiện tại.
 

Quang_Hải

Thành viên gạo cội
Tham gia ngày
21 Tháng hai 2009
Bài viết
5,801
Được thích
7,443
Điểm
3,168
Nơi ở
Thuận An, Bình Dương
Hàm như thế là bị giới hạn.
Nếu làm đúng thì phải có (optional) tham số thứ hai, "tính đến ngày". Nếu tham số này là 0 thì lấy ngày hiện tại.
Ah, đúng ra phải nên thêm tham số mà anh góp ý. Sẽ bổ sung tham số này cho hoàn thiện thêm.
Cảm ơn anh
 
Quảng cáo
Top Bottom