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

Thread: วิธีคำนวณระยะเวลากี่ปี กี่เดือน กี่วัน ที่ถูกต้อง

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1

    วิธีคำนวณระยะเวลากี่ปี กี่เดือน กี่วัน ที่ถูกต้อง

    ผมสร้างแฟ้มคำนวณระยะเวลากี่ปี กี่เดือน กี่วัน โดยใช้ตารางวันที่มาช่วยในการนับ เพื่อใช้แทนสูตร DateDif ที่คำนวณเพี้ยนอยู่เสมอ

    ช่วยทดลองนำแฟ้มนี้ไปใช้กันว่าใช้ได้ถูกต้องเสมอไปหรือไม่

    แฟ้มนี้จะคำนวณจากวันที่เริ่มไปในช่วงระยะเวลาอีกไม่เกิน 100 ปี

    หากใครเก่ง VBA น่าลองนำหลักการนี้ไปสร้างรหัสขึ้นมาใช้ โดยใช้ VBA สร้างตารางวันที่ขึ้นมาในหน่วยความจำโดยใช้ Dim ที่มีขนาด 100x31
    แล้วนำวันที่สุดท้ายไป Match หาตำแหน่งของ Row/Column ในตาราง Dim ก็จะหาระยะเวลาได้ครับ

    ผมเชื่อว่าวิธีใช้ตารางวันที่มาเปรียบเทียบนี้จะได้คำตอบที่ถูกต้องกว่าการคิดด้วยสูตรที่มีอยู่ของ VBA เองซึ่งยากจะตรวจสอบ logic

  2. #2
    ถ้าใส่
    From : 29/12/2015 หรือ 30/12/2015 หรือ 31/12/2015
    to : 02/03/2016

    จะให้ ระยะเวลาที่คำนวณได้เหมือนกัน คือ

    0 Year 2 Month 2 Day

    เพราะการนับเดือนตอนสิ้นเดือนที่มีกุมภาพันธ์มาแทรก ต้องนับเดือนถึงวันสิ้นเดือนกุมภาพันธ์เพื่อเป็นจำนวนเดือน แล้วเพิ่มอีก 2 วันของมีนาคม

    ไม่ควรนับวันของธันวาที่เหลือมาบวกกับอีก 2 วันของมีนาคมครับ

    ทั้งนี้แล้วแต่หลักการนับว่าจะคิดกันอย่างไร

  3. #3
    อรวีร์
    Guest

    Quote Originally Posted by Somkiat View Post
    ถ้าใส่
    From : 29/12/2015 หรือ 30/12/2015 หรือ 31/12/2015
    to : 02/03/2016

    จะให้ ระยะเวลาที่คำนวณได้เหมือนกัน คือ

    0 Year 2 Month 2 Day

    เพราะการนับเดือนตอนสิ้นเดือนที่มีกุมภาพันธ์มาแทรก ต้องนับเดือนถึงวันสิ้นเดือนกุมภาพันธ์เพื่อเป็นจำนวนเดือน แล้วเพิ่มอีก 2 วันของมีนาคม

    ไม่ควรนับวันของธันวาที่เหลือมาบวกกับอีก 2 วันของมีนาคมครับ

    ทั้งนี้แล้วแต่หลักการนับว่าจะคิดกันอย่างไร
    อรวีร์ก็เคยเขียน VBA Function นับ ปี:เดือน:วัน เช่นกันค่ะ ไม่แน่ใจว่าเคยแชร์ที่ไหน เนื่องจากมีวิธีการนับที่หลากหลาย ไม่ทราบว่าควรนับอย่างไรที่ยอมรับว่าถูกต้องสมบูรณ์ เช่นที่อาจารย์นับ ตั้งแต่วันที่ 29,30,31 เดือน12 ถึงวันที่ 2 มีนาคมปีถัดมา ได้ผลเป็น 2 เดือน 2 วันนั้น อรวีร์คิดว่าน่าจะมีผู้ไม่เห็นด้วย เพราะวันเริ่มต้นต่างกัน ไม่น่าได้ผลลัพธ์เหมือนกัน
    แต่ถ้าสูตรคำนวนแค่ ปี:เดือน น่าจะไม่มีปัญหา
    เพื่อนๆมีความเห็นอย่างไรคะ

  4. #4
    อรวีร์
    Guest

    Smile

    อรวีร์ขอเสนอความเห็นในการนับแบบนี้ดีไหมคะ...
    1. นับจำนวนเดือนที่ได้เต็มๆเดือนก่อน(ซึ่งเป็นเดือนที่อยู่ช่วงกลางของ From กับ To) ครบ 12 ถือเป็น 1 ปีเศษเป็นเดือน
    2. นับวันในเดือนแรก(From)ที่เหลือ รวมกับวันในเดือนสุดท้าย(To) โดยที่ถ้า...
    ---2.1 วันที่เริ่ม เท่ากับ วันที่สิ้นสุด ให้นับรวมถือเป็น 1 เดือน 0 วัน
    ---2.2 วันที่เริ่ม น้อยกว่า วันที่สิ้นสุด ให้นับรวมถือเป็น 1 เดือน และผลต่างของ วันที่สิ้นสุด-วันที่เริ่ม นั้นเป็นจำนวน วัน
    ---2.3 วันที่เริ่ม มากกว่า วันที่สิ้นสุด ให้นำวันที่เหลือจนสิ้นเดือนของFrom + วันที่ของTo เป็นจำนวน วัน
    เช่น
    31/12/2015 - 29/02/2016 ได้ 2 เดือนเต็ม 0 วันตามข้อ 1. แล้วจบ ไม่ต้องคิดตามข้อ 2 เพราะไม่เหลือเศษวันแล้ว
    03/01/2016 - 03/03/2016 ได้ 1 เดือนเต็ม(กุมภา) แล้วคิดตาม 2.1 คืออีก 1 เดือน รวมเป็น 2 เดือน
    02/01/2016 - 29/02/2016 ได้ 1 เดือนเต็มของเดือนกุมภาพันธ์ และ 29 วันคงเหลือของFrom จนสิ้นเดือนมกราคม(31-2=29)
    02/01/2016 - 28/02/2016 ได้ 0 เดือนไว้ก่อน แล้วคิดตาม 2.2 คือ 1 เดือน และผลต่าง 28-2= 26 วัน
    02/01/2016 - 04/03/2016 ได้ 1 เดือน(กุมภาเต็มเดือน)ไว้ก่อน แล้วคิดตาม 2.2 คืออีก 1 เดือน รวมเป็น 2 เดือนและผลต่าง 4-2= 2 วัน
    29/12/2015 - 02/03/2016 ได้ 2 เดือน(มกรา,กุมภาเต็มเดือน)ไว้ก่อน แล้วคิดตาม 2.3 คือวันคงเหลือของFrom 31-29=2 วัน รวมกับ 2 ของมีนา(To) รวมเป็น 4 วัน
    30/12/2015 - 02/03/2016 ได้ 2 เดือน(มกรา,กุมภาเต็มเดือน)ไว้ก่อน แล้วคิดตาม 2.3 คือวันคงเหลือของFrom 31-30=1 วัน รวมกับ 2 ของมีนา(To) รวมเป็น 3 วัน
    31/12/2015 - 02/03/2016 ได้ 2 เดือน(มกรา,กุมภาเต็มเดือน)ไว้ก่อน แล้วคิดตาม 2.3 คือวันคงเหลือของFrom 31-31=0 วัน รวมกับ 2 ของมีนา(To) รวมเป็น 2 วัน
    --------
    เพื่อนมีความเห็นอย่างไรคะ

  5. #5
    อรวีร์
    Guest

    Smile

    29/01/2016-29/02/2016 จะไม่นับตามข้อ 1. ก่อนคือนับได้ 1 เดือนของกุมภาเต็มเดือน แล้วนับตามข้อ 2.3 เพราะถือว่าเดือนสุดท้ายไม่มีวันเหลือแล้ว เสมือน To คือ 00/03/2016
    29 มากกว่า 0 จึงเข้าเงื่อนไขข้อ 2.3 ได้วันคงเหลือ From 31-29= 2 วัน รวมกับ 0 วันเดือนสุดท้าย
    สรุปคือ 1 เดือน 2 วัน

  6. #6
    ขอบคุณครับคุณอรวีร์

    แฟ้มที่ผมทำขึ้นนี้สามารถปรับเปลี่ยนวิธีนับได้ตามสะดวก โดยปรับให้ตารางวันที่ซึ่งใช้ row หนึ่งๆกับการนับให้เป็น 1 เดือนแล้วแต่ว่าจะใช้หลักอะไร

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

    ถ้านับตามแบบวันที่ในปฏิทิน 30/1/2016 - 2/3/2016 น่าจะนับได้ 1 เดือนกับ 3 วัน แต่ถ้านับแบบเดือนชนเดือนก่อนและให้ดูสิ้นเดือนด้วยจะได้แบบที่ผมทำไว้

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

  7. #7
    vajra
    Guest
    Quote Originally Posted by อรวีร์ View Post
    29/01/2016-29/02/2016 จะไม่นับตามข้อ 1. ก่อนคือนับได้ 1 เดือนของกุมภาเต็มเดือน แล้วนับตามข้อ 2.3 เพราะถือว่าเดือนสุดท้ายไม่มีวันเหลือแล้ว เสมือน To คือ 00/03/2016
    29 มากกว่า 0 จึงเข้าเงื่อนไขข้อ 2.3 ได้วันคงเหลือ From 31-29= 2 วัน รวมกับ 0 วันเดือนสุดท้าย
    สรุปคือ 1 เดือน 2 วัน
    29,30,31

    ผมนับได้สามวันครับ...:smile::smile::smile:

  8. #8
    vajra
    Guest
    ปัญหาอยู่ที่ Month Scale ที่มีค่าได้หลายค่า (28,29,30,31)

Similar Threads

  1. สอบถามวิธีการ share excel ที่ถูกต้อง
    By tuangporn in forum Excel Expert Forum Library 2012 - 2007
    Replies: 1
    Last Post: 6 May 2011, 14:33
  2. Replies: 2
    Last Post: 24 Mar 2011, 21:41
  3. Replies: 3
    Last Post: 11 Jul 2010, 15:13

Posting Permissions

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