Function CalAge(Birthdate)
Dim ปีเต็ม As Integer, เดือนเต็ม As Integer, ผลต่างวันที่ As Integer
If IsNull(Birthdate) Then
' IsNull() กับ Nz() = "" มีค่าเท่ากัน
CalAge = ""
'*** ระวัง ค่าว่างนำไปจัดการต่ออาจเกิดปัญหา เปลี่ยนเป็นอย่างอื่น?
ElseIf Birthdate > Now() Then
CalAge = "ยังไม่เกิด" ‘ *** ระวัง เป็นข้อความนำไปคำนวนแบบตัวเลขไม่ได้ เปลี่ยนเป็นอย่างอื่น?
ElseIf Birthdate <= Now() Then
เดือนเต็ม = DateDiff("m", Birthdate, Now())
'อายุนับตั้งแต่เกิดนับเป็นเดือน เศษของเดือนนับเป็น 1 เดือน
ผลต่างวันที่ = DateDiff("d", DateAdd("m", เดือนเต็ม, Birthdate), Now())
'หาค่าวันที่ที่อายุครบเต็มตามเดือนที่คำนวนได้ ลบจาก ปัจจุบัน
If ผลต่างวันที่ < 0 Then
'ถ้ามีค่า < 0 แปลว่า มีการนับเศษของเดือนเป็น 1 เดือน
เดือนเต็ม = เดือนเต็ม - 1
'ลดการนับเดือนเต็มลงจึงจะถูกต้อง
ผลต่างวันที่ = DateDiff("d", DateAdd("m", เดือนเต็ม, Birthdate), Now())
'คำนวนผลต่างวันที่ใหม่อีกครั้ง
End If
'*ผลต่างวันที่เป็นจำนวนวันที่หักอายุเต็มเดือนออกแล้ว*
ปีเต็ม = Int(เดือนเต็ม / 12)
'อายุปีเต็ม นับเฉพาะค่าที่เป็นจำนวนเต็มของ (เดือนเต็ม/12)
เดือนเต็ม = เดือนเต็ม Mod 12
'เปลี่ยนเป็นเดือน ที่หักอายุเต็มปีออก คือนับเฉพาะค่าที่เป็นเศษของ (เดือนเต็ม/12)
CalAge = ปีเต็ม & "-" & เดือนเต็ม & "-" & ผลต่างวันที่
End If
End Function