วันศุกร์ที่ 9 กรกฎาคม พ.ศ. 2553

พื้นฐาน vba excel

เมื่อวานเย็นรังสิตฝนตกหนักมาก ถนนกลายเป็นคลองไปเลยครับ เอาแน่เอานอนกับธรรมชาติไม่ได้จริงๆ 5 โมงเย็นแดดจ้า 6 โมงเย็นฝนตกซะงั้นครับ
บทความนี้ผมชั่งใจอยู่นานว่าจะเขียนหรือไม่เนื่องจากเป็นเรื่องพื้นฐานของการเขียนโปรแกรมใน MS Excel ซึ่งในบทความที่ผ่านมาผมได้ยกตัวอย่างการเขียนมาโครสำหรับแก้ปัญหาการหาพื้นที่รูปหลายเหลี่ยมไปแล้ว แต่สุดท้ายผมก็ตัดสินใจได้ว่า จำเป็นต้องเขียนหัวข้อนี้เพื่อให้ท่านผู้อ่านได้เข้าใจพื้นฐานของการเขียนโปรแกรมบน MS Excel และรู้จักองค์ประกอบต่างๆใน MS Excel เพื่อให้เกิดประโยชน์ในการอ่านหรือศึกษาบทความที่ผมจะนำเสนอต่อๆไป แต่เนื่องด้วยเป็นเรื่องของพื้นฐาน ผมคงจะเขียนให้จบในครั้งเดียวคงเป็นไปได้ยาก ดังนั้นผมจะทยอยเรื่องพื้นฐานลงในบทความนี้เพื่อให้ท่านผู้อ่านมีความเข้าใจตรงกันก่อนครับ
ทำความรู้จักองค์ประกอบของ MS Excel เพื่อที่จะสามารถควบคุมส่วนประกอบเหล่านั้นได้ถูกต้อง ซึ่งจะประกอบไปด้วย 4 องค์ประกอบดังนี้
1. Workbook เป็นส่วนที่ใหญ่ที่สุดในไฟล์ Excel ทำหน้าที่เก็บข้อมูลทั้งหมดในไฟล์ โดยภายในจะประกอบด้วย Worksheet ต่างๆ(โดยปกติ Excel จะสร้่างWorksheet มาให้ 3 Worksheet ซึ่งผู้ใช้สามารถเพิ่มหรือลบWorksheetได้)
2. Worksheet คือ แผ่นงานที่ประกอบไปด้วยแถวและหลักในส่วนที่ตัดกันของแถวและหลักจะเรียกว่า เซลล์(Cell) ซึ่งสามารถพิมพ์ข้อมูลหรือสูตรต่างๆลงไปเพื่อคำนวณผล
3 Modules คือพื้นที่สำหรับเก็บเก็บรหัส คำสั่ง รวมถึงมาโครต่างๆที่ถูกบันทึกไว้
4 Class Modules คล้ายกับ Modules แต่จะใช้สร้างวัตถุขึ้นใหม่พร้อมทั้งกำหนดคุณสมบัติต่างๆของวัตถุนั้น



ภาพที่ 1 VBA Project
SKA36FJYPNVK

วันอาทิตย์ที่ 4 กรกฎาคม พ.ศ. 2553

Determine polygon area โดยใช้เทคนิค VBA in excel (Macro excel)

เข้าสู่ฤดูฝนอย่างเต็มตัวกันแล้วนะครับท่านผู้อ่าน ฟุตบอลโลก 2010 กำลังโม่แข้งกันงวดเข้ามาทุกที เยอรมันทีมโปรดของผมยังอยู่ในเส้นทางลุ้นแชมป์ อีกประมาณ 1 สัปดาห์คงทราบผลกัน รักษาสุขภาพกันด้วยนะครับ
บทความที่ต้องการนำเสนอทุกท่านวันนี้เป็นภาคต่อจากที่เคยนำเสนอระเบียบวิธีในการคำนวณหาพื้นที่หลายเหลี่ยมไปแล้ว และได้กล่าวทิ้งท้ายถึงเทคนิคที่จะนำมาใช้กับระเบียบวิธีดังกล่าว บทความนี้จึงขอนำเสนอเทคนิคการใช้ VBA in excel เข้ามาช่วยในการแก้ปัญหานี้ ซึ่งผู้อ่านต้องเข้าใจพื้นฐานของ VBA Excel มาพอสมควร โดยขอยกตัวอย่างการหาพื้นที่รูปหลายเหลี่ยมซึ่งมีจุดยอด (vertex) ในระบบพิกัดคาร์ทีเซียน ดังนี้ (0,0) , (10,0) , (10 , 10) , (5,10) , (5,15) , (0,10) , (0,0) เมื่อลากเส้นตรงเชื่อมจุดยอดจะได้รูปหลายเหลี่ยมดังแสดงในภาพที่ 1

ภาพที่ 1 รูปหลายเหลี่ยม (Polygon)

จากภาพพบว่ารูปหลายเหลี่ยมประกอบไปด้วยจุดยอดทั้งหมด 7 จุด และเมื่อพิจารณารูปหลายเหลี่ยมจะเห็นได้ว่าเกิดจากรูปร่างอย่างง่ายสองรูปประกอบเข้าด้วยกัน ได้แก่ รูปสี่เหลี่ยมจัตุรัส(A2) และรูปสามเหลี่ยมหน้าจั่ว A1 ดังนั้นสามารถคำนวณหาพื้นที่รูปหลายเหลี่ยมได้ง่ายๆดังนี้

A (polygon) = A1 + A2 = (5*5/2) + 10*10 = 112.5 ตารางหน่วย

ทีนี้หากต้องการใช้เทคนิค VBA ช่วยในการคำนวณหาพื้นที่จะเริ่มดำเนินการอย่างไร เรามาเริ่มกันเลยดีกว่า
เริ่มจากการนำเข้าข้อมูลจุดยอดของรูปหลายเหลี่ยมมายัง Excel โดยกำหนดให้คอลัมน์ A เป็นพิกัด X คอลัมน์ B เป็นพิกัด Y ดังแสดงในภาพที่ 2


ภาพที่ 2 พิกัดจุดยอดของ Polygon ในระบบพิกัดคาร์ทีเซียน

คลิก ปุ่ม Alt + F8 เพื่อจัดการมาโครสำหรับใช้คำนวณพื้นที่ โดยกำหนดชื่อมาโครเป็น PolygonArea ดังแสดงในภาพที่ 3 คลิกปุ่ม สร้างเพื่อเข้าสู่หน้า Visual Basic Editor โดยจะพบกับ Subroutine PolygonArea ดังรูปที่ 4



ภาพที่ 3 สร้าง Macro Excel


ภาพที่ 4 Visual Basic Editor

เราจะเขียนโค้ดสำหรับคำนวณพื้นที่ของ Polygon ใน Subroutine PolygonArea ตามระเบียบวิธีที่เคยนำเสนอมากันครับ โดยมีรายละเอียดดังนี้
แนวคิด
ในการคำนวณพื้นที่รูปหลายเหลี่ยมจะคำนวณได้จากผลรวมของ Xi*Yi+1 ลบด้วยผลรวมของ Xi+1*Yi หารด้วย 2 ดังแสดงในภาพที่ 5 จากสูตรที่กล่าวมาจะพบว่า แถวสุดท้ายที่สามารถหาผลคูณได้คือแถวที่ n-1 เนื่องจากแถวถัดไปคือแถวที่ n-1+1 นั่นคือ n เนื่องจากแถวที่ n+1 ไม่มีข้อมูล



ภาพที่ 5 ระเบียบวิธีการคำนวณ


ภาพที่ 6 แสดงการคำนวณแถวที่ n-1



ภาพที่ 7 code vba และคำอธิบาย

สร้างปุ่มกด และกำหนดมาโคร PolygonArea ให้กับปุ่มกดนี้ ดังแสดงในภาพที่ 8



ภาพที่ 8 ผลการคำนวณพื้นที่รูปหลายเหลี่ยม

ท่านผู้อ่านจะเห็นว่าการคำนวณด้วย มาโคร PolygonArea ให้ผลลัพธ์เท่ากับการคำนวณด้วยสูตรการคำนวณทั่วไป แต่หากเป็นรูปหลายเหลี่ยมที่มีจุดยอดเป็นจำนวนมากดังนำเสนอในบทความที่ผ่านมา เรายังสามารถใช้ มาโคร PolygonArea ที่ได้พัฒนานี้ช่วยคำนวณได้เหมือนเดิมโดยที่ไม่ต้องปรับเปลี่ยน และสามารถใช้งานได้ง่ายเพียงคลิกปุ่ม Polygon Area
มาโคร PolygonArea ที่ได้พัฒนาขึ้นยังไม่สมบูรณ์ที่สุดขอฝากท่านผู้อ่านพัฒนามาโครนี้ให้ถูกต้องสมบูรณ์โดยให้ค่าพื้นที่รูปหลายเหลี่ยมที่ถูกต้อง บักที่ยังไม่ได้แก้ไขเป็นบักที่ทำให้ผลการคำนวณอาจจะไม่ถูกต้องได้เป็นบางกรณี ขอบคุณครับ
Yahoo bot last visit powered by  Ybotvisit.com