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

วิธีใช้ Excel ที่ว่าเป็นขั้นสูงที่แท้จริงขึ้นกับโจทย์ต่างหาก ถ้าใครสามารถเลือกใช้วิธีง่ายๆแต่สามารถแก้ปัญหายากๆได้จึงจะเรียกว่าเป็นขั้นสูง วิธีปรับแต่งโครงสร้างตารางอาจไม่จำเป็นจะต้องใช้สูตรยากๆหรือ VBA แม้แต่น้อย ส่วนใครที่ใช้วิธียากแสนยากหรือมีขั้นตอนอ้อมไปอ้อมมากับโจทย์ง่ายๆ น่าจะเรียกว่าเป็นการใช้ Excel ขั้นติดลบเสียด้วยซ้ำ

หลักการใช้ Excel ที่ดี

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

BeforeRevise

ตารางตามภาพนี้ หากต้องการปรับโครงสร้างตารางใหม่ให้ตัด Row และ Column ที่เป็นช่องว่างแทรกอยู่ทิ้งไปและสลับ Column สถานที่เก็บไปไว้หลังชื่อสินค้า สามารถใช้รหัส VBA ซึ่งได้มาจากการบันทึก Macro ดังนี้

VBAReviseCodes

หน้าตาตารางหลังจากที่ใช้รหัส VBA

AfterRevise

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

AfterRevisewVBA2Times

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

วิธีดูว่ารหัส VBA ที่ใช้เป็นรหัสที่ดีหรือไม่ดี

วิธีง่ายๆที่ใช้ดูว่าแฟ้มที่คุณใช้อยู่เป็นแฟ้มมีรหัส VBA เก็บไว้หรือไม่ ให้สังเกตจากนามสกุลของแฟ้ม ถ้าเป็น xlsm แสดงว่าต้องมีรหัส VBA แน่นอนเกือบ 100% แต่ถ้าเป็นนามสกุลอื่น เช่น xlsb หรือ xls หรืออื่นๆรวมทั้ง xlsm ด้วย ให้สังเกตตอนเปิดแฟ้มว่า Excel ถามบนหน้าจอว่าคุณจะยอมให้ Enable Macros ก่อนไหม หากคุณเลือก Enable จึงจะยอมให้รหัส VBA ใช้ทำงานได้ ซึ่งรหัส VBA บางคำสั่งอาจทำงานเองทันทีเมื่อเปิดแฟ้มโดยคุณไม่รู้ตัวก็ได้ ดังนั้นก่อนที่เลือก Enable ควรมั่นใจก่อนว่า คุณไว้ใจแฟ้มนั้นและผู้สร้างแฟ้มนั้นได้ 100% หรือต้องมีแฟ้มสำรองเก็บไว้เสมอ เพราะเมื่อรหัส VBA ทำงานแล้วจะไม่สามารถ Undo เพื่อย้อนกลับได้เลย

แม้แฟ้มนั้นจะสร้างโดยคนที่เก่ง Excel มากๆ แต่รหัส VBA ที่มีอยู่ในแฟ้มนั้นอาจไม่ได้ถูกสร้างขึ้นมาอย่างดีก็ได้ เมื่อเปิดแฟ้มเพื่อใช้งานครั้งแรกจึงควรเลือกไม่ Enable Macro ไว้ก่อนแล้วกดปุ่ม Alt+F11 เพื่อแกะดูรหัส VBA ที่มีอยู่ในส่วนของ VBA Module ว่าน่ากลัวหรือไม่ (ปุ่ม Alt+F11 จะเปิดหน้าจอของโปรแกรม Visual Basic ขึ้นมา พอกดปุ่มนี้ซ้ำก็จะสลับหน้าจอระหว่าง Excel กับ VBA ไปเรื่อยๆ)

ตามปกติเราคุ้นเคยว่า เมื่อสร้างสูตรอ้างอิงจากเซลล์ใดๆมาใช้คำนวณ จากนั้นเมื่อมีการย้ายตำแหน่งเซลล์ เปลี่ยนชื่อชีทหรือชื่อแฟ้ม Excel จะช่วยเปลี่ยนตำแหน่งอ้างอิงที่กำหนดไว้ในสูตรตามไปให้เอง แต่ VBA ไม่ได้ฉลาดแบบ Excel เพราะ VBA มีจุดอ่อนที่แย่มากตรงที่ตัวรหัสจะคงเดิมไปตลอด ไม่เปลี่ยนแปลงตามการเปลี่ยนแปลงใดๆที่เกิดขึ้นในแฟ้ม Excel แม้แต่น้อย เรียกได้ว่าความสัมพันธ์ระหว่าง Excel กับ VBA เป็นแบบตัวใครตัวมันก็ได้ เว้นแต่จะใช้ Range Name ช่วยในการอ้างอิงไว้ในรหัส VBA แทนการอ้างอิงถึงตำแหน่งเซลล์โดยตรง

เงื่อนไขสำคัญที่จะช่วยทำให้ใช้ VBA ได้โดยใช้วิธีอ้างอิงกับตำแหน่งเซลล์โดยตรงก็คือ แฟ้มที่จะใช้ VBA ช่วยในการทำงานต้องมีโครงสร้างแน่นอนตายตัวก่อน ไม่ว่าจะเป็นชื่อแฟ้ม ชื่อชีท หรือขอบเขตขนาดตาราง ตำแหน่งเซลล์ ต้องไม่มีการเปลี่ยนแปลงอีกแล้ว

VBAReviseCodes

ผู้ที่ได้รับมอบแฟ้ม Excel ที่มี VBA แฝงอยู่แต่ตัวเองไม่มีความรู้เรื่อง VBA เลย ต้องสังเกตให้ดีว่ารหัส VBA ในแฟ้มมีการอ้างอิงกับชื่อหรือตำแหน่งเซลล์อะไรบ้าง ตามตัวอย่างรหัสที่ยกมานี้จะเห็นข้อความ Rows("9:9"), Rows("3:3"), Columns("D:D"), Columns("E:E"), Columns("C:C"), Columns("F:F"), และ Range("A1") เป็นการอ้างอิงกับตำแหน่งเซลล์โดยตรงและตำแหน่งที่อ้างถึงเหล่านี้ก็จะยังคงเดิมไปตลอด เมื่อรหัส VBA ทำงานก็จะทำงานกับ Row, Column, และเซลล์เดิมเช่นกัน ดังนั้นหากต้องการทำให้ VBA ทำงานได้ถูกต้องไปตลอด ห้ามผู้ใช้แฟ้มกระทำการใดๆในแฟ้ม Excel ที่จะทำให้ตำแหน่งเซลล์เหล่านี้เคลื่อนที่มีตำแหน่งต่างไปจากเดิม

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

อ่านตอนต่อไป วิธีที่ใช้ Linked Template ในการปรับแต่งโครงสร้างตาราง

 

Author: สมเกียรติ ฟุ้งเกียรติEmail: This email address is being protected from spambots. You need JavaScript enabled to view it.

E-Learning

Go to top