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

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

  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
    อรวีร์
    Guest

    Smile

    :redface:
    การนับแบบนี้ จะถือว่าไม่นับวันแรกค่ะ
    เหมือนเราลบวันที่จาก Cell 2 Cells เช่น
    A2=31/12/2015
    A3=29/12/2015
    A4=A2-A3
    จะได้ผลลัพธ์เป็น 2
    หมายถึง 2 วัน

  9. #9
    หลักการนับวัน ไม่ว่าจะใช้หลักอะไรก็ตาม หากนับวันเริ่มต้องไม่นับวันสุดท้าย หากนับวันสุดท้ายต้องไม่นับวันเริ่มครับ

    สำหรับใครที่ยังดื้อ คิดจะใช้สูตร DateDif อยู่อีก

    แนะนำให้อ่าน บทความเรื่อง DateDif สูตรลับอันตราย

    Download แฟ้มตัวอย่างการคำนวณเพี้ยนๆ ได้จาก
    http://www.excelexperttraining.com/d...teDifTest.xlsb

    จะได้เลิกใช้และเลิกแนะนำ หยุดสอนสูตรนี้ให้ใช้แบบไม่ระวังกันเสียทีครับ

    หลักการใช้สูตร DateDif ที่น่าจะเป็น

    ถ้าจะใช้สูตร DateDif ต้องไม่ใช้วันที่เริ่มต้นที่เป็นวันที่ 30 หรือ 31 โดยให้ใช้วันที่เริ่มต้นได้ตั้งแต่วันที่ 1 - 29 แต่พอเป็นวันที่ 30 หรือ 31 ต้องปรับวันที่ให้เป็นวันที่ 29 ในเดือนเดิมหรือวันที่ 1 ต้นเดือนถัดไปแทน จากนั้นก่อนจะนำคำตอบที่คำนวณได้ไปใช้ ต้องปรับคำตอบที่คำนวณได้ให้เพิ่มจำนวนวันมากขึ้นหรือลดลง 1 - 2 วันแล้วแต่การเลื่อนวันที่ลดลงไปเป็นวันที่ 29 หรือเลื่อนไปเป็นวันที่ 1 เดือนถัดไป ส่วนวันที่สุดท้ายจะเป็นวันที่ใดก็ได้


    หากใครเจอปัญหาว่าหลักการนี้ใช้ไม่ได้ กรุณาแจ้งให้ทราบด้วยจะได้หาทางแก้ไขแบบอื่น

  10. #10
    ผมสร้างแฟ้มใหม่ สามารถเลือกวิธีนับวันได้ 2 แบบ
    1. นับวันตามปฏิทิน เช่น 30/1/2016 - 2/3/2016 = 1 เดือน 3 วัน คือนับเดือนกุมภาพันธ์เต็มๆ 1 เดือน กับวันที่ 30-31/1+1/3 อีก 3 วัน
    2. นับเฉพาะท้ายระยะเวลา จะถือว่าเอาวันที่ตรงกันมาเดือนชนเดือนก่อน ถ้าต้นนับจากวันที่ 28-31 มาเจอกุมภาจะใช้วันที่ปลายเดือนกุมภามานับจำนวนเดือน แล้วบวกจำนวนวันจากปลายเดือนสุดท้ายไปถึงวันท้าย เช่น 30/1/2016 - 2/3/2016 = 1 เดือน 2 วัน คือนับวันที่ 29/2 +1/3


    ทั้ง 2 แบบจะใช้สูตรหาวันแรก(Cell D6) ในตารางวันที่ต่างกันไปเท่านั้นครับ ส่วนสูตรอื่นคิดเหมือนกัน หากใครอยากจะคิดหลักของตัวเองให้เปลี่ยนสูตรในเซลล์นี้ตามใจชอบครับ

    ทดลองวันจาก 2/12/2015 - 22/3/2016

    1. นับวันตามปฏิทิน = 2 เดือน 51 วัน คือนับเดือนกุมภาพันธ์เต็มๆ 1 เดือน กับวันที่ 2-31/12 + 1-21/3 = 30+21 = 51 วัน (51 วันนี้จะคิดเป็นอีก 1 เดือนก็ได้ แต่มีปัญหาว่าจะสมมติว่า 1 เดือนที่เพิ่มมี 28, 29, 30, หรือ 31 วัน เท่าใดดีเพื่อมาลบออกจาก 51 ให้เหลือจำนวนวัน)
    2. นับเฉพาะท้ายระยะเวลา = 3 เดือน 20 วัน ตรงกับสูตร DateDif


    ดังนั้นหากเลขของวันที่สิ้นสุด มากกว่าหรือเท่ากับ วันที่เริ่ม ให้คิดวิธีที่ 2 ... ใช้หลักนี้ดีไหมครับ

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
  •