Int(DateDiff("m",[dep],Now())/12) & " ปี " & (DateDiff("m",[dep],Now()) Mod 12) & " เดือน"
ลองดูครับ เปลี่ยนชื่อฟิลล์ตรงตัวอักษรสีแดง
เรียน คุณ chya คำตอบของคุณ tes ตรงตามความต้องการคุณแล้วนะครับ นำไปใช้ได้เลยครับ
ส่วน Reply ของผมนี้คือขอร่วมตอบในแนวทางอื่นๆ เพิ่ม เพื่อรวมไว้ในกระทู้เดียวกัน และไว้ให้ท่านอื่นๆ ที่ยังไม่รู้ ได้ค้นหานะครับ
Dim a, b, i As Date
Dim y, m, d As Double
a = #1/2/2001# ' วันที่เริ่มต้น
b = #9/20/2008# ' วันที่สิ้นสุด
-------------------------------------------------------------------------------------------------
วิธีที่ 1 เรียงตามลำดับการคิด, หัดวางโฟลว์ชาร์ต
y = DateDiff("yyyy", a, b) ' หาส่วนต่างของปี
i = DateAdd("yyyy", y, a) ' วันที่เริ่มต้นที่ใช้คำนวน เมื่อบวกส่วนต่างของปี
m = DateDiff("m", i, b) ' จำนวนเดือนที่เหลือ จากเศษของปี
i = DateAdd("m", m, i) ' วันที่เริ่มต้นที่ใช้คำนวน เมื่อบวกส่วนต่างของเดือน
d = DateDiff("d", i, b) ' จำนวนวันที่เหลือ จากเศษของเดือน
Debug.Print y
Debug.Print m
Debug.Print d
-------------------------------------------------------------------------------------------------
วิธีที่ 2 ย่นรูปคำสั่ง จากวิธีที่ 1 , แยก 3 คำตอบ ปี,เดือน,วัน แต่ละบรรทัดคำสั่งยัง อ้างผลลัพธ์ที่ต่อเนื่อง
y = DateDiff("yyyy", a, b) ' หาส่วนต่างของปี
m = DateDiff("m", DateAdd("yyyy", y, a), b) ' จำนวนเดือนที่เหลือ จากเศษของปี
d = DateDiff("d", DateAdd("m", m, DateAdd("yyyy", y, a)), b) ' จำนวนวันที่เหลือ จากเศษของเดือน
Debug.Print y
Debug.Print m
Debug.Print d
-------------------------------------------------------------------------------------------------
วิธีที่ 3 ย่นรูปคำสั่งจากวิธีที่ 2 แยก 3 คำตอบ ปี,เดือน,วัน แต่ละบรรทัดคำสั่ง อิสระจากกัน
y = DateDiff("yyyy", a, b)
m = DateDiff("m", DateAdd("yyyy", DateDiff("yyyy", a, b), a), b)
d = DateDiff("d", DateAdd("m", DateDiff("m", DateAdd("yyyy", DateDiff("yyyy", a, b), a), b), DateAdd("yyyy", DateDiff("yyyy", a, b), a)), b)
Debug.Print y
Debug.Print m
Debug.Print d
-------------------------------------------------------------------------------------------------
วิธีที่ 4 หากเราเลิกคิดถึง ฟังก์ชั่น DateDiff() กับ DateAdd() แล้วลองมองหาฟังกชั่นอื่นๆ ดูบ้าง
' กับอีกทางเลือกหนึ่ง 3 คำตอบ แยกอิสระ
y = Year(b) - Year(a)
m = Month(b) - Month(a)
d = Day(b) - Day(a)
Debug.Print y
Debug.Print m
Debug.Print d
หรือจะนำแบบวิธีที่ 4 ไปใช้ใน sql statement (รวม 3 คำตอบเป็นฟิลด์เดียวกัน ชื่อฟิลด์= diffDate)
Year (b) - Year(a) & " ปี " & Month(b) - Month(a) & " เดือน " & Day(b) - Day(a) & " วัน" As diffDate
Dim DayRange As Single
Dim MonthRange As Single
Dim YearRange As Single
StartDate = #17/10/2551#
CurrentDate = #20/9/2551#
YearRange = Year(CurrentDate) - Year(StartDate)
MonthRange = Month(CurrentDate) - Month(StartDate)
DayRange = Day(CurrentDate) - Day(StartDate)
If CurrentDate < StartDate Then
MsgBox "CurrentDate is less than StartDate", vbOKOnly
Exit Sub
End If
If MonthRange < 0 Then
YearRange = YearRange - 1
MonthRange = 12 - Month(StartDate) + Month(CurrentDate)
End If
If DayRange < 0 Then
If MonthRange > 0 Then
MonthRange = MonthRange - 1
Else
YearRange = YearRange - 1
MonthRange = 11
End If
DayRange = 31 - Day(StartDate) + Day(CurrentDate)
Select Case Month(StartDate)
Case 4, 6, 9, 11
DayRange = DayRange - 1
Case 2
DayRange = DayRange - 3
End Select
End If
Years = YearRange
Months = MonthRange
Days = DayRange
หากต้องการค่าอายุเป็น ปี อย่างเดียวใช้อย่างนี้ก็ได้ครับ
Age: DateDiff("yyyy",[birthday],Now())+lnt(Format(Now(),"mmdd")<Format([birthday],"mmdd"))
ปล. เขียนโค๊ดนี้แล้วโพสไม่ได้อ่ะครับ เอารูปไปดูแทนแล้วกันครับ