ผู้เขียน หัวข้อ: คำนวณอายุให้แสดงว่าอายุกี่ปี ขอโค้ดนับอายุด้วยครับ  (อ่าน 653 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

banrong

  • Administrator
  • Sr. Member
  • *****
  • กระทู้: 350
    • ดูรายละเอียด
    • อีเมล์
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"))

ปล. เขียนโค๊ดนี้แล้วโพสไม่ได้อ่ะครับ เอารูปไปดูแทนแล้วกันครับ



« แก้ไขครั้งสุดท้าย: 15/01/21 โดย banrong »

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 2591
  • คนดีไม่เบ่ง คนเก่งไม่โม้ คนใหญ่โตไม่อวด
    • ดูรายละเอียด
    • อีเมล์
DateDiff("yyyy",[birthday],Now())



=DateDiff([birthday],Now())

DateDiff("yyyy mm dd",[ฟิววันเกิด],Now())

DateDiff("yyyy",[birthday],Now())

=Now()-[birthday]

The sound of birds sounds in the forest

FmrppA02

=Forms!FmrppA02!

=Forms!FmrppA03!bb1
=Forms!FmrppA03!b22
=Forms!FmrppA03!b33


[Forms]![Formmhaykow]![Mainkey]

FormmhaykowE

[Forms]![Formmhaykow]![Mainkey]

[Forms]![FormmhaykowE]![a1]
[Forms]![FormmhaykowE]![a1]
[Forms]![FormmhaykowE]![a1]

admin

  • Administrator
  • Hero Member
  • *****
  • กระทู้: 2591
  • คนดีไม่เบ่ง คนเก่งไม่โม้ คนใหญ่โตไม่อวด
    • ดูรายละเอียด
    • อีเมล์
[Forms]![Formmhaykow]![Mainkey]

[Forms]![boxrepend]![Box1]

bb1

b22
b33

FmrppA03

=[Forms]![FmrppA03]![bb1]
=[Forms]![FmrppA03]![b22]
=[Forms]![FmrppA03]![b33]


[Forms]![boxrepend]![Box1]