ซ่อมคอมพิวเตอร์นอกสถานที่ บางกะปิ รามคำแหง

วันอาทิตย์ที่ 2 มีนาคม พ.ศ. 2557

การสร้างแบบฟอร์มที่แสดงวันที่ในแต่ละเดือนโดยอัตโนมัติ

จากไฟล์แบบฟอร์มที่เป็นลักษณะ e-Form ที่เคยแจกไป โดยเฉพาะไฟล์ที่มีการแสดงวันที่ เช่น แบบฟอร์มใบลงเวลาการมาทำงาน ซึ่งในฟอร์มดังกล่าว เมื่อเลือกเดือนที่ต้องการแล้ว ก็จะแสดงวันที่เฉพาะของเดือนนั้นๆ โดยอัตโนมัติ เช่น ถ้าเดือนไหนมี 31 วัน ก็จะแสดงวันที่ 1 ถึง 31 แต่ถ้าเดือนไหนมี 30 วัน ก็จะแสดงวันที่ 1 ถึง 30 เป็นต้น ซึ่งก็มีผู้สอบถามเข้ามาเช่นเดิมว่า "ทำอย่างไร?"

ที่จริงก็มีอยู่หลายวิธีการครับ วันนี้ผมจะอธิบายเรื่องนี้สัก 2 วิธี ดังนี้



1. การสร้างแบบฟอร์มที่แสดงวันที่ในแนวตั้ง


รูปที่ 1 ตัวอย่างแบบฟอร์มที่แสดงวันที่ในแนวตั้ง


จากตัวอย่างในรูปที่ 1 เป็นแบบฟอร์มที่แสดงวันที่ในแนวตั้ง ซึ่งเป็นแบบฟอร์มที่มักพบเห็นอยู่โดยทั่วไป จากตัวอย่าง ผมกำหนดให้เลือกชื่อเดือนที่ B1 และใส่ปี พ.ศ.ที่ D1 ซึ่งเมื่อเลือกเสร็จแล้ว วันที่ในช่วง A4:A34 ก็จะแสดงออกมาโดยอัตโนมัติ โดยแสดงเฉพาะจำนวนวันที่ของเดือนนั้นๆ ไม่ว่าจะเป็น 31วัน, 30วัน หรือ 28วัน เป็นต้น

สมมติว่าเรามีแบบฟอร์มที่มีลักษณะคล้ายดังในรูปที่ 1 โดยกำหนดให้ใส่ชื่อเดือนที่ B1 และใส่ปี พ.ศ.ที่ D1 เพื่อสะดวกในการใส่ชื่อเดือน เราสามารถทำชื่อเดือนเป็นรายการเลือก (Drop Down List) ได้ (อ่านเพิ่มเติมเรื่อง "การสร้างรายการเลือก (List) เพื่อเติมข้อมูล")

จากแบบฟอร์มตัวอย่าง เราเลือกชื่อเดือนที่เป็นข้อความ (Text) และใส่ปีเป็นปี พ.ศ. ซึ่งไม่ใช่รูปแบบที่ Excel รู้จัก จึงต้องมีการเปลี่ยนค่าให้เป็นแบบที่ Excel รู้จัก และนำไปคำนวณได้

มาเริ่มต้นที่ค่าปีก่อน เนื่องจาก Excel รับค่าปีเป็นปี ค.ศ.เท่านั้น ถ้าเราใส่ปี พ.ศ.เข้ามา ก็ต้องแปลงเป็นปี ค.ศ.เสียก่อน ดังนั้น ค่าปีในที่นี้ก็คือ $D$1-543 จะได้ 2010

สำหรับค่าเดือนก็เช่นกัน Excel รับค่าเดือนเป็นตัวเลข 1-12 ซึ่งถ้าเราใส่ชื่อเดือนเป็นข้อความ ก็ต้องแปลงกลับไปเป็นตัวเลขเสียก่อน ในที่นี้ผมใช้ฟังก์ชัน MATCH เพื่อตรวจสอบว่า ชื่อเดือนใน B1 นั้น เป็นลำดับที่เท่าไรของช่วงรายชื่อเดือน G1:G12 และเอาผลลัพธ์ที่ได้จากการ MATCH นี้ ไปแทนค่าต่อไป ดังนั้น จากรูปที่ 1 ค่าเดือนก็คือ MATCH($B$1,$G$1:$G$12,0) จะได้ 10

การที่เราจะตั้งเงื่อนไขให้ Excel แสดงวันที่เฉพาะของเดือนนั้นๆ ก็คือ ต้องหาว่าวันสุดท้ายของเดือนนั้นๆ คือวันที่เท่าไร? ถ้าทราบวันที่สุดท้ายของเดือน ก็จะกำหนดได้ว่า ในแบบฟอร์มนี้จะให้แสดงวันที่ถึงวันที่เท่าไร

หลักการในการหาวันสุดท้ายของเดือนก็คือ วันที่หนึ่งของเดือนถัดไปลบหนึ่ง เนื่องจากวันสุดท้ายของแต่ละเดือนนั้นไม่แน่นอน แต่ที่แน่นอนก็คือว่า ทุกเดือนจะเริ่มต้นจากวันที่หนึ่งเสมอ ซึ่งถ้านับถอยหลังจากวันที่หนึ่งของเดือนใดๆ ลงมาหนึ่งวัน ก็จะหมายถึง วันที่สุดท้ายของเดือนก่อนหน้านั่นเอง

ดังนั้น ถ้าเราเลือกเดือนใดๆ ในแบบฟอร์ม เราก็จะหาค่าวันสุดท้ายของเดือนนั้นๆ ได้จากสูตร =DATE($D$1-543,MATCH($B$1,$G$1:$G$12,0)+1,1)-1

ซึ่งผลลัพธ์ที่ได้จะเป็นรูปแบบวัน (Date format) เช่น d/m/yyyy แต่ถ้าต้องการแสดงเฉพาะวันที่ (Day) เท่านั้น ก็เปลี่ยนสูตรเป็น =DAY(DATE($D$1-543,MATCH($B$1,$G$1:$G$12,0)+1,1)-1) ก็จะได้ผลลัพธ์เป็นเลขจำนวนเต็ม เช่น 31, 30 หรือ 28 เป็นต้น

เมื่อรู้แล้วว่าวันที่สุดท้ายของเดือนนั้นๆ คือวันที่เท่าใด เราก็จะใช้การนับจำนวนแถว (Row) ที่จะแสดงวันที่ ให้เท่ากับจำนวนวันในเดือนนั้นๆ สำหรับแถวที่เกินกว่าวันที่สุดท้ายของเดือน ก็จะไม่แสดงตัวเลขใดๆ ดังนั้น จากรูปที่1 ให้เราเลือกช่วงเซลล์ A4:A34 แล้วพิมพ์สูตรดังนี้
=IF(ROWS($4:4)>DAY(DATE($D$1-543,
MATCH($B$1,$G$1:$G$12,0)+1,1)-1),"",ROWS($4:4)) 
(สูตรสองแถวข้างบนนี้ให้พิมพ์ต่อกันไปเลย) เสร็จแล้วกดแป้น Ctrl+Enter พร้อมกัน

ถ้าคุณพิมพ์สูตรถูกต้อง ก็จะเห็นวันที่แสดงขึ้นมาในคอลัมน์ A ซึ่งเป็นวันที่ของเดือนที่คุณเลือก ให้ลองเปลี่ยนเดือนใน B1 แล้วสังเกตตัวเลขวันที่สิ้นเดือนในคอลัมน์ A



2. การสร้างแบบฟอร์มที่แสดงวันที่ในแนวนอน


รูปที่ 2 ตัวอย่างแบบฟอร์มที่แสดงวันที่ในแนวนอน


จากตัวอย่างในรูปที่2 มีแบบฟอร์มบางลักษณะ ที่ต้องการแสดงวันที่ในแนวนอน ซึ่งเราก็จะใช้หลักการเดียวกันกับการแสดงวันที่ในแนวตั้ง สูตรก็เขียนคล้ายๆ กัน เพียงแต่เปลี่ยนจากการนับจำนวนแถว (Row) มาเป็นการนับจำนวนคอลัมน์ (Column) แทน

ดังนั้น จากตัวอย่างในรูปที่2 ให้เลือกช่วง E3:AI3 แล้วพิมพ์สูตรดังนี้
=IF(COLUMNS($E:E)>DAY(DATE($D$1-543,
MATCH($B$1,$B$15:$B$26,0)+1,1)-1),"",COLUMNS($E:E)) 
(สูตรสองแถวข้างบนนี้ให้พิมพ์ต่อกันไปเลย) เสร็จแล้วกดแป้น Ctrl+Enter พร้อมกัน

และถ้าคุณพิมพ์สูตรถูกต้อง ก็จะเห็นวันที่แสดงขึ้นมาในแถวที่ 3 ช่วง E3:AI3 ดังรูปที่2 ซึ่งแสดงวันที่เฉพาะของเดือนที่คุณเลือก ให้ลองเปลี่ยนเดือนใน B1 แล้วสังเกตการเปลี่ยนแปลงของตัวเลขวันที่สิ้นเดือน


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

0 ความคิดเห็น:

แสดงความคิดเห็น