เพื่อมุ่งให้เกิดคุณภาพจากการอบรมสูงสุด Excel Expert Training ให้การอบรม Excel กลุ่มเล็กๆ ไม่เกิน 6 คนทุกคนสามารถเรียนรู้ Excel อย่างใกล้ชิด จะมาคนเดียวหรือมาเป็นกลุ่มแล้วนัดวันอบรมแบบส่วนตัวก็ได้ ผู้เข้าอบรมทุกคนสามารถติดตามเนื้อหาที่อบรมได้อย่างชัดเจนจากจอภาพด้านหน้าของตัวเอง
Results 1 to 7 of 7

Thread: datedif นับจำนวนวันไม่ถูกต้อง

  1. #1
    pongsakpee
    Guest

    datedif นับจำนวนวันไม่ถูกต้อง

    เรียน ทุกท่านที่

    ผมทดสอบการใช้ datedif(เริ่ม,สุดท้ายที่พ้นสภาพ,"md")

    เริ่ม 07/05/20080 วันสุดท้ายที่พ้นสภาพ 1/05/2009 ได้เศษวันคือ = 24 จากสูตร Excel
    คือวันสุดท้ายที่พ้นสภาพไม่ได้มาทำงานหรือไม่ต้องมานับตามสูตร
    จนมีเด็กอายุ 11 ขวบคนหนึ่งถามผมด้วยคำถามว่าเขาคิดแบบนี้ได้ 25 วัน ถามว่าเขาคิดผิด หรือ excel คิดผิด

    หากให้คิดว่า excel ไม่ผิดนะครับ แล้วทำไมสิ่งที่เด็กคนนี้คิด และนับจนได้ 25 ละผมทำตามเขาก็ได้ 25 จริงๆ ผมสงสัยคือ จะเอาเหตุผลอะไรไปบอกว่าสิ่งที่เขาคำนวนมันผิดตรงไหน
    ปล.
    ขอเน้นย้ำว่าผมอยากให้ช่วยหาจุดที่เขาคิดผิดนะครับ ไม่ใช่ไปบอกให้เขาคิดวิธีอื่นที่ไม่ใช่วิธีที่เขานำเสนอนะครับ
    วิธีการคิดของเด็กๆ
    เขาแบ่งเป็นเดือนๆ เช่น 30 , 31 บ้าง 28 เพราะปี 2009 มีกุมภาพันธ์คือ 29 วัน
    เขานั่งนับด้วยมือว่ามีกี่เดือนจาก 06 - 05 ได้ 11 เดือน ดังนั้นเขามาคิดเศษวัน โดยบอกว่า เดือนพฤษภาคม คือ 05 มี 31 วัน เขามาทำงานตั้งแต่วันที่ 7 ดังนั้น จำนวนที่ทำงานทั้งหมด คือ 31 -7 +1 = 25 วัน

  2. #2
    เอก
    Guest
    ถูกทั้งคู่ และผิดทั้งคู่ครับ

    กรณีที่ว่า "ถูกทั้งคู่"
    กล่าวคือ ถูกเพราะคิดตามหลักของตนเอง หมายความว่า "คนก็คิดแบบคน เครื่องก็คิดแบบเครื่อง" เช่น ไปอบรมตั้งแต่วันที่ 22-24 ถามว่า ไปอบรมกี่วัน ถ้าคิดแบบคนก็ต้องตอบว่า 3 วัน แต่ถ้าคิดแบบเครื่องจะตอบว่า 2 วัน เพราะเครื่องจะคิดแบบคณิตศาสตร์ (24-22=2)

    คิดแบบคณิตศาสตร์ หมายถึง ไม่นับค่าเริ่มต้น เช่น 3+5=8 จะไม่เริ่มนับจาก 3 แต่จะเริ่มนับหนึ่งจาก 4 นับไปอีกห้าจำนวน คือ 4, 5, 6, 7 และ 8 ผลลัพธ์จึงได้ 8

    แต่ถ้าเรามองในแง่หาอายุงาน ถ้าเข้างานวันที่ 3 แล้วอีก 5 วัน เขาจะมีอายุงานเท่าไร เราก็จะนับวันที่เข้างานด้วย ดังนั้น อีก 5 วันก็จะตรงกับวันที่ 8 แต่อายุงานจะเท่ากับ 6 วัน

    กรณีที่ว่า "ผิดทั้งคู่"
    หมายถึง คนไม่คิดแบบคณิตศาสตร์ และเครื่องก็ไม่คิดแบบความเป็นจริง ผลลัพธ์ก็เลยเป็น double standard (อ้าว...โยงมาการเมืองซะงั้น)

    ดังนั้น กรณีถ้าใช้ DATEDIF ผมมักจะเขียนสูตรแบบนี้ครับ
    =DATEDIF(start_date, end_date+1, type)


    ไม่รู้ว่าอธิบายแล้วเข้าใจยิ่งขึ้น หรืองงยิ่งขึ้น

  3. #3
    pongsakpee
    Guest
    ดังนั้น กรณีถ้าใช้ DATEDIF ผมมักจะเขียนสูตรแบบนี้ครับ
    =DATEDIF(start_date, end_date+1, type)

    ขอบคุณครับ คุณ เอก ผมก็ใช้หลักแบบนั้นเหมือนกัน เพราะผมมองว่า end_date+1 คือค่าขอบที่มันไม่ได้ถูกนับรวมไปด้วย
    อย่างไรก็ตาม ผมพอแกะ ดูนะครับ พบว่า สูตรนี้มันผิดแล้วละ ดูเหมือนว่าเด็กจะนับถูก
    กล่าวคือ datediff มันนับครบ 30 เด้งเป็น 1 เดือนเลยทันที่ หากเป็นคนนับจะครบเดือนต้องดูว่าลงท้ายด้วย ยน หรือเปล่า ถึงเด้งเป็น 1 เดือน

  4. #4
    สมเกียรติ
    Guest
    สูตร DateDif เป็นสูตรที่ Microsoft แอบซ่อนไว้แต่นำสูตรมาใช้ได้ โดย Excel บางรุ่น เช่น Excel 2003/2007 ไม่ได้แสดงตัวสูตรนี้อธิบายไว้ใน Help

    ที่แปลกกว่านั้นคือใน Excel 2007 สูตรนี้จะให้คำตอบต่างไปจาก Excel 2003 อีกด้วย เช่น ระหว่างวันที่ 30/1/2009 - 2/3/2009

    Excel 2003 ตอบ 1 เดือน
    Excel 2007 ตอบ 1 เดือน 3 วัน

    ผมไม่แนะนำให้ใช้สูตร DateDif เพราะสูตรนี้ให้คำตอบไม่แน่นอน บางช่วงเวลาให้คำตอบต่างจากที่เราเข้าใจ ต้องตีความหมายกัน และพอมาใช้ Excel 2007 แม้จะกลับให้คำตอบที่ตรงกับที่เราต้องการมากขึ้น แต่ก็จะทำให้เราต้องย้อนไปแก้เงื่อนไขในสูตรคำนวณที่ทำไว้เดิมกันอีก

    ผมแนะนำให้ใช้สูตร DateDiff ซึ่งเป็น add-in ของ John Walkenbach และผมนำมาดัดแปลงแก้ไขต่ออีกขั้นหนึ่ง ลองดูแฟ้มแนบครับว่าให้คำตอบต่างกันอย่างไร ถ้าไม่ตรงกับที่ต้องการขอให้แจ้งผมด้วยจะได้หาทางแก้ไขรหัส VBA กันต่อไป

    ดูกระทู้เรื่องนี้ที่ http://www.excelexperttraining.com/f...ead.php?p=7062

  5. #5
    pongsakpee
    Guest
    ขอบคุณ อาจารย์ครับ
    coding ที่อาจารย์ให้มานั้น สามารถตอบโจษท์ผมได้แล้วครับ :great: พบว่าเป็น 25 วันจริงๆ ดังนั้น datedif ของ excel ถือว่าคำนวนผิด :hurray:
    ผมอยากทราบวิธีการนำ macro ของที่อาจารย์ทำไปใส่ใน Excel Sheet อื่นๆ หรือ มีวิธีแปลง macro เป็น add-in ครับ

    ปล.
    ผมใช้วิธีลูกทุ่งคือ copy code แล้วไปใส่ใน F11 ครับ แต่ว่าผมไม่เข้าใจสูตรนับเศษปี เศษวัน ทำไมใช้ชื่อ function เดียวกันครับ ทำแล้วมันฟ้อง Error หากไม่ใช่ Sheet ของ อาจารย์ครับ

  6. #6
    สมเกียรติ
    Guest
    ผมสร้าง DateDiff.xla ให้ download กันได้นานแล้วที่นี่ครับ
    http://www.excelexperttraining.com/b...oads000590.php

    วิธีติดตั้ง Add-in ให้ดูที่ http://www.excelexperttraining.com/b...Core000627.php

    กรณีที่นำรหัสไปใส่ไว้ในแฟ้มแล้วสูตร DateDiff เกิด error ขึ้น อาจเกิดจากสะกดชื่อสูตรผิด เช่น สูตรนี้มี f 2 ตัว ให้ลองสร้างสูตรใหม่ทับลงไปหรือเลือกเซลล์สูตรเก่า 3 เซลล์พร้อมกันแล้วกด F2 แล้วกดปุ่ม Ctrl+Shift+Enter เพื่อกระตุ้นให้สูตรทำงานครับ ถ้ายังไม่ได้อีก ควรแนบแฟ้มนั้นมาดูกัน

    สูตร DateDiff นี้ ผมปรับปรุงต่อจาก John Walkenbach ในกรณีที่วันต้นกับวันปลายเป็นปลายเดือนทั้งคู่ ให้นับเป็นจำนวนเดือนเต็มเดือนไปเลย ถ้าไม่อยากใช้แบบนี้ให้ตัดรหัสส่วนนี้ออกครับ

    Code:
    '   Revised by Somkiat Foongkiat
    '   in case date1 > date2 and date2 is end of month
        If Day(d1) > Day(d2) Then
            If Day(d2) = Day(DateSerial(Year(d2), Month(d2) + 1, 0)) Then
                DAYDIFF = 0
                MONTHDIFF = MONTHDIFF + 1
            End If
        End If
     
        If Day(d1) = Day(DateSerial(Year(d1), Month(d1) + 1, 0)) Then
            If Day(d2) = Day(DateSerial(Year(d2), Month(d2) + 1, 0)) Then
                DAYDIFF = 0
            End If
        End If

  7. #7
    pongsakpee
    Guest
    ขอบคุณครับอาจารย์ ผมจะไปทดสอบให้มากกว่านี้ หากพบว่ามีอะไรน่าสนใจจะมา post ให้ข้อมูลต่อครับ

Similar Threads

  1. Datedif
    By โหน่ง in forum Excel Expert Forum Library 2012 - 2007
    Replies: 2
    Last Post: 21 Jun 2007, 14:23

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •