Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 1

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก

มีแฟนเพจหลายท่านอยากให้ผมสอนเรื่องเกี่ยวกับ VBA ให้ แม้ผมจะเคยเขียนเกี่ยวกับเรื่อง Concept สำคัญของ VBA ในแง่ของหลักการไปแล้ว แต่ผมยังไม่ได้สอนเขียน Code แบบจริงๆ จังๆ ซักที แต่ตอนนี้คงถึงเวลาแล้วล่ะ ^^

อ่อ! ในบทความนี้จะไม่ได้สอนเรื่อง record macro นะครับ อันนั้นลองไปหัดกันเองได้นะ หรือดูใน youtube ก็น่าจะมีเยอะเลย ในบทความนี้จะสอนหลักการการเขียนโปรแกรมให้ เพื่อให้เพื่อนๆ สามารถอ่าน code และแก้ code เองได้หลังจาก record macro แล้วนะครับ

การเปิด Developer Ribbon

เริ่มแรกสุดเลย การที่เราจะใช้งาน VBA ได้ก็ต้องเปิด Ribbon Developer ขึ้นมาซะก่อน ซึ่งอยู่ใน Excel Option ครับ

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 2

จะเข้าไปเขียนโปรแกรมใน VB Editor (หรือ VBE) ก็สามารถกดปุ่ม Visual Basic หรือ Alt+F11 ได้ครับ (ผมกด Alt+F11 ตลอด)

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 3

แต่เดี๋ยวเราปิดมันไปก่อนก็ได้ครับ เอาเป็นว่าเปิด VBE ขึ้นมาเป็นแล้วเนอะ กด Alt+F11 นะ

การ Trigger คำสั่งด้วยปุ่ม

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

เรากำลังจะสร้างปุ่มที่ว่านี่แหละ ให้เรากด add button ดังนี้ Developer-> Insert -> Form Control -> Button

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 4

จากนั้นวาดรูปสี่เหลี่ยมลงไปในที่ว่างๆ ที่ต้องการให้เกิดปุ่มขึ้น

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 5

จากนั้นมันจะเข้าสู่ VBE ภายใต้ Sub ที่ชื่อว่า Test ตามชื่อ Macro ที่เราเขียนเลย

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 6

เมื่อเรากด Alt+F11 เพื่อเข้าสู่ VBE หรือกดสร้างปุ่มแล้ว เราก็จะเขียน code ได้

การ Assign ค่า และเรื่องของตัวแปร

ก่อนจะเขียน Code ผมอยากให้เพื่อนๆ เข้าใจ Concept สำคัญในการเขียนโปรแกรมอันนึง ก็คือการใช้เครื่องหมาย = หรือ assignment operator ว่า เราสามารถเอาค่าไปใส่ให้กับตัวแปร หรือใส่ให้กับ Object ต่างๆ ที่เราต้องการได้

โดยรูปแบบคือให้ตัวด้านซ้าย มีค่าเท่ากับตัวด้านขวา

Object = ค่า
ตัวแปร = ค่า

เช่น

x=10

แปลว่าให้ตัวแปร x มีค่าเป็น 10

แล้วถ้าเราเขียนต่อไปอีกบรรทัดว่า

x=x+1

แม้จะดูผิดหลักคณิตศาสตร์ แต่เครื่องหมาย = ในที่นี้ไม่ใช่เครื่องหมายเปรียบเทียบในคณิตศาสตร์ แต่ในการเขียนโปรแกรม มันคือเครื่องหมายที่ใช้ในการกำหนดค่า (assignment operator) ที่ให้ตัวด้านซ้าย มีค่าเท่ากับตัวด้านขวา แล้ว Code ที่เราเขียนก็จะถูก Run จากบนลงล่างไปเรื่อยๆ

ดังนั้นความหมายของ x=x+1 คือให้เอาค่าเดิมใน x (ซึ่งคือ 10) ไปบวก1 จะได้ 11 แล้วใส่แทนค่าลงไปในตัวแปร x

ดังนั้น x จะมีค่าใหม่เป็น 11 นั่นเอง

การอ้างอิง Cell/Range โดยใช้ Range

ภายใน Sub Test() เราสามารถเขียน Code ในรูปแบบ Range(“Cell Reference”) เพื่ออ้างอิง Cell/Range ได้ เช่น

Range("A1")=10

แปลว่า ให้ช่อง A1 มีค่าเป็น 10

พอเขียนเสร็จก็กดปิด VBE ไปก่อนได้เลย แล้วลองไปกดปุ่มที่เราสร้างดูซะ

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 7

จากนั้น Code ที่เราเขียนก็จะถูก Run ทำให้ช่อง A1 มีเลข 10 อยู่

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 8

นอกจากจะอ้างอิง Cell เดียวแล้วยังใส่เป็นช่วงก็ได้ เช่น

Range("A1:C3") = "Cat"

สังเกตุว่า Cat ใส่อยู่ในเครื่องหมายคำพูด เพราะเป็น Text นะครับ

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 9

นอกจากนี้ถ้าเรามีการตั้งชื่อ Defined Name ไว้ เราก็สามารถเอามาใช้ใน Range นี้ได้ด้วย เช่น

Range("ชื่อที่ตั้งไว้") = 999

ซึ่งในชีวิตจริง เราจะใช้การอ้างอิงด้วยชื่อบ่อยมาก เพื่อป้องกันปัญหาการ แทรก/ลบ cell จนตำแหน่งช่องเปลี่ยนไปจนใน Code ไม่ตรงกับความเป็นจริง

การใช้ Message Box

เราสามารถให้ VBA สร้างผลลัพธ์เป็น Message Box เด้งขึ้นมาได้ ด้วยคำสั่งง่ายๆ ว่า MsgBox(“คำที่ต้องการ”) เช่น

MsgBox ("สวัสดี")
Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 10

การใช้เครื่องหมาย & เชื่อมข้อความ

เราสามารถใช้เครื่องหมาย & มาเชื่อมข้อความ เพื่อผสมรวมคำจากค่าคงที่เช่น “สวัสดี” กับการอ่านค่าจาก Cell ช่อง B1 ที่ผมตั้งชื่อไว้ว่า FirstNameได้ เช่น

ที่สวัสดีอยู่ในเครื่องหมายคำพูด เพราะเป็น Text ส่วน inputName เป็นชื่อตัวแปร ไม่ต้องอยู่ในเครื่องหมายคำพูดนะครับ

Sub Test()
inputName = Range("FirstName")
MsgBox ("สวัสดี " & inputName)

End Sub
Excel VBA พื้นฐาน

การใช้ IF กำหนดเงื่อนไข

เราสามารถเขียน if ใน VBA ได้ในรูปแบบของ

If เงื่อนไข Then
    ทำอะไรถ้าเงื่อนไขเป็นจริง
Else
    ทำอะไรถ้าเงื่อนไขเป็นเท็จ
End If

เช่น

Sub Test()
inputName = Range("FirstName")

If inputName = "ศิระ" Then
    MsgBox ("สวัสดีนายท่าน")
Else
    MsgBox ("ยินดีที่ได้รู้จักครับ " & inputName)
End If
End Sub

ถ้า inputName ที่กรอกมาใน Range ที่ชื่อ FirstName เป็นคำว่า ศิระ ก็จะบอกว่า สวัสดีนายท่าน นอกนั้นก็จะบอกว่า ยินดีที่ได้รู้จักครับ แล้วตามด้วยชื่อ

สังเกตว่า ใช้ inputName = “ศิระ” ได้ เพราะมันรู้ว่าเครื่องหมาย = อันนี้คือเครื่องหมายเปรียบเทียบ ไม่ใช่ assignment แบบตอนที่เขียนส่งค่าให้ตัวแปรตามปกติ

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 11
Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 12

การ Save ไฟล์

ที่สำคัญ เวลาจะ Save ไฟล์ต้อง Save นามสกุล .xlsm, xlsb, xls เท่านั้นนะครับ เพราะถ้าดันไป save เป็น xlsx ปกติล่ะก็… code ที่เราเขียนจะหายไปหมดเลย ดังนั้นอย่าพลาดเด็ดขาดเลยนะ เดี๋ยวนั่งร้องไห้ไม่รู้ด้วย!

Excel VBA พื้นฐาน ตอนที่ 1 : เขียน Code ครั้งแรก 13

สรุป VBA พื้นฐาน ตอนที่ 1

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

อบรม In-House Training

Feedback การใช้งาน AI Chatbot