“อยากนับเฉพาะวันเสาร์-อาทิตย์ ต้องเขียนสูตรยังไงครับ?”
“เอ .. เหมือนคุ้น ๆ ว่าพี่เคยสอนไปแล้วนะ”
“ใช่ ๆ พอพี่พูด ผมนึกออกเลย” โจ้ตอบแล้วเปิดคอมพ์หาไฟล์เก่า
“เจอแล้ว สูตรนี้ไง” โจ้ตะโกนเสียงดังแปดหลอด
=SUMPRODUCT(- -(WEEKDAY(ROW(INDIRECT(B1&”:”&B2)))={1,7}))
(อ่านรายละเอียดและที่มาของสูตรได้จากบทความ ep1 หรือ บทความนี้)
“มีอะไรกันหรือคะ เสียงดังเชียว” น้องโบพูดยิ้ม ๆ พลางเข้ามาร่วมวง
“คุยกันเรื่องสูตรนับวันเสาร์-อาทิตย์น่ะ แต่สูตรนี้พี่ว่าเข้าใจยากนิดนึง โบมีไอเดียอื่นไหม?” ผมโยนหินถามทาง
“มีค่ะ”
“หยึย! เพิ่งถามเอง ทำไมคิดเร็วจัง”
“ใช้สูตรนี้ค่ะ” แล้วน้องโบก็เขียนสูตร
=NETWORKDAYS.INTL( B3, B4, “1111100” )
“เฮ้ยยยย!!” คราวนี้ผมตะโกนเสียงดังเก้าหลอด
ทำไมต้องใช้ NETWORKDAY.INTL ?
จริงๆแล้วฟังก์ชัน NETWORKDAY.INTL ใช้นับวันทำงาน (ไม่ใช่วันเสาร์-อาทิตย์)
มาทบทวนกันนิดนึง โครงสร้างคือ
NETWORKDAYS.INTL( start_date, end_date, [weekend], [holidays] )
(สำหรับใครที่ยังไม่รู้จักฟังก์ชัน NETWORKDAY.INTL อ่านรายละเอียดและวิธีใช้งานได้จาก บทความนี้)
ใช้นับวันทำงาน แล้วจะนับเสาร์-อาทิตย์ได้ยังไง?
ถ้าใช้แบบปกติจะนับไม่ได้ แต่ถ้าใช้แบบ “ไม่ปกติ” จะนับได้ ^__^
ยังไง?
[weekend] หรือ รูปแบบวันหยุดสุดสัปดาห์ ระบุได้ 2 แบบ
แบบแรกคือ ระบุเป็นตัวเลข 1-7, 11-17 นั่นคือ

( [weekend] มีวงเล็บก้ามปูปิดหัวท้าย ความหมายของวงเล็บก้ามปูคือเป็นออปชัน จะใส่หรือไม่ใส่ก็ได้ ถ้าไม่ใส่โปรแกรมจะระบุเป็นค่าดีฟอลต์ ซึ่งเคสนี้คือ 1 )
แบบที่สองคือ ใช้ตัวเลขเรียงกัน 7 ตัว
ตัวเลขที่ใช้คือ 1 กับ 0
เรียง 1 กับ 0 ในรูปแบบจันทร์-อาทิตย์
ถ้าวันนั้นเป็นวันหยุด ใส่ 1
ถ้าวันนั้นเป็นวันทำงาน ใส่ 0
Excel มองว่าตัวเลขเรียงกัน 7 ตัวนี้เป็นตัวหนังสือ (Text) เวลาระบุต้องใส่เครื่องหมายคำพูด (Quotation Mark) ครอบหัว-ท้ายด้วย
เช่น
หยุดเสาร์-อาทิตย์ ใส่เป็น “0000011”
หยุดเฉพาะวันเสาร์ ใส่เป็น “0000010”
หยุดเฉพาะวันอาทิตย์ ใส่เป็น “0000001”
หยุดวันจันทร์กับวันพฤหัส ใส่เป็น “1001000”
ถ้านับวันทำงานแบบหยุดเสาร์-อาทิตย์ ก็เขียนสูตรได้เป็น
=NETWORKDAYS.INTL( B3, B4, “0000011” )

แล้วจะนับเฉพาะวันเสาร์-อาทิตย์ ได้ยังไง?
คำถามดีมาก ความเจ๋งมันอยู่ตรงนี้ครับ ^_^
NETWORKDAYS.INTL นั้นนับเฉพาะวันทำงานที่ระบุใน [weekend]
1 คือ วันหยุด
0 คือ วันทำงาน
อาจตีความหมายในอีกมุมนึงได้เป็น
1 คือ วันที่ไม่นับ
0 คือ วันที่นับ
แปลว่า NETWORKDAYS.INTL นับเฉพาะวันที่ระบุเป็น 0 ถูกต้องไหมครับ
ดังนั้นถ้าต้องการนับเฉพาะวันเสาร์-อาทิตย์ ก็ระบุ [weekend] เป็น “1111100”
หรือเขียนสูตรเป็น
=NETWORKDAYS.INTL( B3, B4, “1111100” )

บ๊ะ!!
ผมขอเรียกสูตรแบบนี้ว่าเป็นการใช้ “ผลข้างเคียง” ของฟังก์ชัน ^__^
แล้วถ้าต้องการนับเฉพาะวันเสาร์ล่ะ?
ง่ายมาก ก็เปลี่ยน [weekend] เป็น “1111101”
หรือเขียนสูตรเป็น
=NETWORKDAYS.INTL( B3, B4, “1111101” )

แล้วถ้าต้องการนับเฉพาะวันอาทิตย์ล่ะ?
หลักการเดียวกันเลย เปลี่ยน [weekend] เป็น “1111110”
หรือเขียนสูตรเป็น
=NETWORKDAYS.INTL( B3, B4, “1111110” )

เจ๋งใช่ไหมล่ะ ^__^
จากเดิมผมต้องใช้สูตร
=SUMPRODUCT(- -(WEEKDAY(ROW(INDIRECT(B3&”:”&B4)))=1))
ซึ่งเข้าใจยาก
แต่พอใช้ NETWORKDAYS.INTL กลับเหลือแค่
=NETWORKDAYS.INTL(B3,B4,”1111110″)
ไม่ร้อง เฮ้ย ก็ต้องร้องว่า
“แม่เจ้า!”
“สะเด่า!”
“อีโหยงโก้ง!”
แล้วคุณล่ะครับ เห็นสูตรนี้แล้วร้องว่าอะไร ^^
คนคิดเทคนิค “ผลข้างเคียง” นี้คือคุณ Bo Rydobon เจ้าของเพจ Excel Wizard นั่นเอง เค้าเคยแชร์สูตรตอนอ่านบทความ ep1 ที่ผมเขียน ผมเห็นสูตรเค้าแล้วชอบมากก็เลยเขียนเป็น ep2 ซะเลย
ขอบคุณ “น้องโบ” ที่แชร์เทคนิคดีๆครับ ^/\^
สำหรับใครที่สนใจไฟล์ตัวอย่างของบทความนี้ สามารถดาวน์โหลดเพื่อศึกษาเพิ่มเติมได้เลยครับ
.
หากคุณชอบบทความแนวนี้ สามารถอัพเดตบทความใหม่โดยคลิก Like เฟซบุ๊กเพจวิศวกรรีพอร์ต
อย่าลืมแชร์ให้เพื่อนอ่านเพื่อเป็นกำลังใจให้คนเขียนด้วยนะครับ ^__^
อ้อ! ตอนนี้ผมมีสอนคอร์สออนไลน์ ใน SkillLane แล้วนะครับ สนใจดูรายละเอียดได้จาก ลิงก์นี้ ครับ
ขออนุญาติ สอบถามเพิ่มเติ่มค่ะ
ต้องการหา ทุกวันเสาร์ ของสัปดาห์ที่ 3 ของทุกเดือน ทั้งหมด12เดือน
ต้องการนับวันหยุดราชการไปด้วย
จะต้องใช้สูตรไหนดีค่ะ ><!
ขออนุญาตถามใหม่น่ะคะ
ฟังก์ชั่นนับวันหยุด รวมวันราชการ ระหว่างวันที่ปัจจุบันถึงวันที่กำหนด มาจากสูตรอื่นเขียนยังไงโดยระหว่างวันที่ ที่กำหนดมีวันหยุดราชการไม่เท่ากัน