:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

การนับอายุตัว

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
george
Member
Member
Posts: 12
Joined: Fri Jun 22, 2012 5:02 pm

การนับอายุตัว

#1

Post by george »

สวัสดีครับ
การนับอายุตัว (ตั้งแต่วันเกิด นับจนถึง วันที่ปัจจุบัน) ปกติใช้ Function DATEDIF นับแยกเป็น ปี, เดือน, วัน ตามรูปแบบ Function แต่พอนับวันเองได้ผลลัพธ์คาดเคลื่อน 3 วัน จากการใช้ Function DATEDIF และอีกอย่างที่พบจากการนับวันเอง คือ วันที่มีเศษเป็น 31 จะปัดเป็น 1 เดือน หรือคงไว้ที่ 31 วัน
จึงขอคำแนะนำการนับอายุตัวที่ถูกต้อง แม่นยำ ต้องใช้วิธีการนับอายุอย่างไร และวิธีการปัดเศษวันที่ ตามตัวอย่างข้อมูล 8 รายการ ที่แนบมาครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: การนับอายุตัว

#2

Post by DhitiBank »

ลองแบบนี้ครับ

D4
=YEAR(C4)-YEAR(B4)-1+(DATEDIF(B4,DATE(YEAR(B4),12,31),"ym")+DATEDIF(DATE(YEAR(C4),1,1),C4,"ym")+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")>31)>12)

E4
=MOD(DATEDIF(B4,DATE(YEAR(B4),12,31),"ym")+DATEDIF(DATE(YEAR(C4),1,1),C4,"ym")+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")>31)-1,12)+1

F4
=MOD(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")-1,31)+1

แล้วคัดลอกสูตรทั้งหมดลงล่างครับ
george
Member
Member
Posts: 12
Joined: Fri Jun 22, 2012 5:02 pm

Re: การนับอายุตัว

#3

Post by george »

Image
หลังจากนำสูตรที่แนะนำใส่ตาราง EXCEL ลำดับที่ 1 ถึงลำดับที่ 12 ตามรูป มีข้อสงสัย ดังนี้
1. ลำดับที่ 1 ตารางรวมเวลา (สูตรผุ้รู้) ได้ 41 ปี 4 เดือน 31 วัน ถ้าจะปัดให้เต็มเดือนเป็น 41 ปี 5 เดือน 0 วัน ทำอย่างไร
2. ลำดับที่ 4 ตารางรวมเวลา (DateDIF) ได้ 39 ปี 0 เดือน 0 วัน ส่วนตารางรวมเวลา (สูตรผุ้รู้) ได้ 38 ปี 11 เดือน 31 วัน หากจะปัดเต็มเดือนทำอย่างไร
3. ลำดับที่ 5 ตารางรวมเวลา (DateDIF) ได้ 36 ปี 9 เดือน 0 วัน ส่วนตารางรวมเวลา (สูตรผุ้รู้) ได้ 36 ปี 11 เดือน 31 วัน หากจะปัดเต็มเดือนทำอย่างไร
4 ลำดับที่ 6, 7, 8 และ 9 ตารางรวมเวลา (DateDIF) ช่องวัน ตัวเลขต่างจากตารางรวมเวลา (นับมือ) และตารางรวมเวลา (สูตรผู้รู้) จำนวน 3 วัน เหตุผลเกิดจากอะไร และตัวเลขที่นับถูกต้องควรเท่าไรครับ
5. ลำดับ 10 ตารางรวมเวลา (DateDIF) กับตารางรวมเวลา (นับมือ) นับได้ 52 ปี 2 เดือน 14 วัน เหมือนกัน แต่ตารางรวมเวลา (สูตรผู้รู้) นับได้ 52 ปี 1 เดือน 14 วัน
6. ลำดับ 12 ตารางรวมเวลา (DateDIF) นับได้ 52 ปี 0 เดือน 6 วัน ตารางรวมเวลา (นับมือ) นับได้ 51 ปี 11 เดือน 37 วัน ตารางรวมเวลา (สูตรผู้รู้) นับได้ 51 ปี 12 เดือน 6 วัน ถ้าจะปัดครบ 12 เดือนให้เป็นปี จะปัดวันเกิน 30 วัน หรือ 31 วัน ให้เป็นเดือน ทำอย่างไร

ตามไฟล์แนบประกอบ
ขอบคุณครับครับ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: การนับอายุตัว

#4

Post by DhitiBank »

ขอตอบแบ่งเป็นข้อๆ นะครับ

1. ลำดับที่ 6, 7, 8 และ 9 เมื่อใช้ Datedif สูตรเดียวทำไมได้ผลลัพธ์แตกต่างจากสูตรด้านบน 3 วัน และที่ถูกควรได้เท่าไร :?:
--- ทำไมถึงต่าง 3 วัน อันนี้ผมไม่แน่ใจครับ ขออภัยจริงๆ อาจเป็นเพราะการบวกด้วย 1 ในสูตรครับ
--- ตัวเลขที่ถูกต้องควรได้เท่าไร ผมขอตอบตามประสบการณ์นะครับว่าขึ้นอยู่กับวิธีนับที่บริษัทหรือหน่วยงานนั้นๆ ยอมรับหรือตกลงกันไว้แล้วครับ ผมเคยเห็นวิธีคำนวณอายุราชการ เงื่อนไขการนับก็ต่างจากโจทย์ของคุณ george มาก ดังนั้น ผมคิดว่าถ้าก่อนหน้านี้เคยนับด้วยมือและเพื่อนร่วมงานยอมรับตัวเลขนั้น ก็เอาวิธีคิดแบบนั้นมาเขียนสูตรเลยครับ ส่วนกรณีนี้ จากทีทำตัวอย่างมา คุณนับปีเต็มก่อนแล้วค่อยเอาเดือนกับวันเศษของปีเริ่มต้นกับปีสิ้นสุดมารวมกันใช่ไหมครับ

2. หากต้องการปัด 31 วันให้เป็น 1 เดือน และ 12 เดือนให้เป็น 1 ปี ปรับสูตรแบบนี้ครับ
M4
=YEAR(C4)-YEAR(B4)-1+(DATEDIF(B4,DATE(YEAR(B4),12,31),"ym")+DATEDIF(DATE(YEAR(C4),1,1),C4,"ym")+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")>30)>11)

N4
=MOD(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"ym")+DATEDIF(DATE(YEAR(C4),1,1),C4,"ym")+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")>30),12)

O4
=MOD(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md"),31)
george
Member
Member
Posts: 12
Joined: Fri Jun 22, 2012 5:02 pm

Re: การนับอายุตัว

#5

Post by george »

Image

หลังจากใส่สูตรที่ปรับมาให้ใหม่ในตารางรวมเวลา (สูตรผุ้รู้) ลำดับที่ 1 - 12 ผลลัพธ์ตรงกับตารางรวมเวลา (DateDIF) และตารางรวมเวลา (นับมือ) จากนั้น เพิ่มข้อมูลลำดับที่ 13 - 18 ตามรูป ปรากฏว่า
1. ลำดับ 15 และ 16 ตารางรวมเวลา (สูตรผุ้รู้) ตารางรวมเวลา (DateDIF) และตารางรวมเวลา (นับมือ) ผลลัพธ์ตรงกัน :thup:
2. ลำดับที่ 13, 14, 17 และ 18 ผลลัพธ์ตารางรวมเวลา (สูตรผุ้รู้) ช่อง ปี หายไป 1 ปี ช่วยปรับสูตรให้ด้วยครับ

ตามไฟล์แนบประกอบ
ขอบคุณครับครับ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: การนับอายุตัว

#6

Post by DhitiBank »

M4 ปรับสูตรเป็นแบบนี้ครับ

=YEAR(C4)-YEAR(B4)-1+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"m")+DATEDIF(DATE(YEAR(C4),1,1),C4,"m")+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")>30)>11)

Enter >> คัดลอกลงล่าง

เอ...ดูตัวเลขแล้ว ถ้าไม่ติดที่บางรายการต่างแค่ 3 วัน ผมว่าใช้ DATEDIF แบบเดิม (ทางซ้าย) ก็ดูง่ายดีนะครับ
george
Member
Member
Posts: 12
Joined: Fri Jun 22, 2012 5:02 pm

Re: การนับอายุตัว

#7

Post by george »

Image

สูตรที่ปรับทดสอบกับข้อมูลใหม่ ลำดับที่ 19 - 22 ถ้านับถึง วันที่ในเดือน กุมภาพันธ์ ช่องเดือน ตารางรวมเวลา (สูตรผู้รู้) จะหายไป 1 เดือน เทียบกับการตารางรวมเวลา (นับมือ)
และลำดับที่ 23 ถ้านับถึงเดือนที่ลงท้ายด้วย "ยน" ช่องเดือน ตารางรวมเวลา (สูตรผู้รู้) จะหายไป 1 เดือน เทียบกับการตารางรวมเวลา (นับมือ) และช่องวัน ตารางรวมเวลา (สูตรผู้รู้) จะน้อยกว่า 2 วัน เทียบกับการตารางรวมเวลา (นับมือ)

ตามไฟล์แนบประกอบ
ขอบคุณครับครับ
You do not have the required permissions to view the files attached to this post.
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: การนับอายุตัว

#8

Post by menem »

ไม่แน่ใจว่าไฟล์ที่ผมทำตรงกับที่ต้องการหรือไม่ ลองดูนะครับ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: การนับอายุตัว

#9

Post by DhitiBank »

หรือ​ลอง​ปรับ​สูตร​แบบ​นี้​ครับ

M4
=DATEDIF(B4,C4+1,"y")

N4
=MOD(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"ym")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"ym")+(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md")>30),12)

O4
=MOD(ROUND(DATEDIF(B4,DATE(YEAR(B4),12,31)+1,"md")+DATEDIF(DATE(YEAR(C4),1,1),C4+1,"md"),0),31)

ก็​ยัง​มี​ต่าง​กัน 1-2 วัน​ครับ
Post Reply