
หากคุณใช้ Excel เป็นประจำ คุณคงคุ้นเคยกับการเขียนสูตรด้วยฟังก์ชันอย่าง SUM, VLOOKUP หรือ IF อยู่แล้ว คุณอาจเคยลองบันทึกมาโคร (Macro) เพื่อช่วยให้การจัดรูปแบบงานที่ต้องทำซ้ำๆ รวดเร็วขึ้น แต่เมื่อถึงจุดหนึ่ง สูตรพื้นฐานและเครื่องมือบันทึกมาโครอาจไม่เพียงพออีกต่อไป หากต้องการปลดล็อกศักยภาพที่แท้จริงของ Excel และสร้างระบบอัตโนมัติสำหรับเวิร์กโฟลว์ที่ซับซ้อน คุณจำเป็นต้องก้าวไปอีกขั้นและลงมือเขียนโค้ดด้วยตัวเอง
ขอต้อนรับสู่ Visual Basic for Applications (VBA) ซึ่งเป็นภาษาโปรแกรมที่มาพร้อมกับ Excel การเรียนรู้ VBA จะช่วยให้คุณโต้ตอบกับ Excel ได้ในระดับพื้นฐาน เปลี่ยนสเปรดชีตแบบเดิมๆ ให้กลายเป็นแอปพลิเคชันซอฟต์แวร์ที่ทำงานแบบไดนามิก ในบทช่วยสอนนี้ เราจะครอบคลุมแนวคิดพื้นฐานของ VBA ได้แก่ ตัวแปร (Variables), ลูป (Loops), และเงื่อนไข (Conditions) พร้อมแนะนำคุณทีละขั้นตอนในการเขียนโปรแกรมแรกที่ใช้งานได้จริง
ก่อนที่จะเจาะลึกเรื่องการเขียนโค้ด คุณอาจสงสัยว่าทำไมถึงต้องเสียเวลาเรียนภาษาโปรแกรม ในเมื่อ Excel ก็มีฟีเจอร์ที่ทรงพลังมากมายอยู่แล้ว หากคุณเพิ่งเริ่มต้น เราขอแนะนำอย่างยิ่งให้คุณเชี่ยวชาญพื้นฐานเสียก่อน คุณสามารถทบทวน คู่มือเริ่มต้นใช้งาน Excel สำหรับผู้เริ่มต้นแบบครบถ้วนปี 2025 เพื่อให้แน่ใจว่าพื้นฐานของคุณแน่นพอ
อย่างไรก็ตาม เมื่อคุณคุ้นเคยกับเครื่องมือพื้นฐานของ Excel แล้ว VBA จะมอบข้อได้เปรียบที่น่าทึ่งดังนี้:
ในการเขียนโปรแกรม Excel แรก คุณต้องเข้าถึงแท็บ Developer (นักพัฒนา) ซึ่งถูกซ่อนไว้ตามค่าเริ่มต้น
ตอนนี้คุณจะเห็นแท็บ Developer บน Ribbon ของคุณ แท็บนี้คือศูนย์บัญชาการสำหรับการเขียนโปรแกรมทั้งหมด จากตรงนี้ ให้คลิกปุ่ม Visual Basic (หรือกด Alt + F11 บนคีย์บอร์ด) เพื่อเปิด Visual Basic Editor (VBE) นี่คือสภาพแวดล้อมที่คุณจะใช้เขียน แก้ไข และทดสอบโค้ด
เมื่อคุณเปิด VBE ขึ้นมาครั้งแรก หน้าตาอาจดูน่ากลัวนิดหน่อย คล้ายกับซอฟต์แวร์ในยุค 1990 ไม่ต้องกังวล คุณแค่ต้องโฟกัสไปที่ส่วนสำคัญเพียงไม่กี่ส่วน:
ในการเริ่มพิมพ์โค้ด คุณต้องแทรกโมดูลก่อน ให้คลิกขวาที่เวิร์กบุ๊กของคุณใน Project Explorer เลือก Insert แล้วคลิก Module หน้าจอสีขาวว่างๆ จะปรากฏขึ้น ตอนนี้คุณพร้อมที่จะเขียนโค้ดแล้ว
ก่อนที่เราจะเขียนโปรแกรมจริง คุณต้องเข้าใจเสาหลัก 3 ประการของการเขียนโปรแกรมขั้นพื้นฐานใน VBA ได้แก่ ตัวแปร (Variables), เงื่อนไข (Conditions), และลูป (Loops)
ลองนึกภาพตัวแปรเป็นภาชนะจัดเก็บชั่วคราวในหน่วยความจำของคอมพิวเตอร์ คุณใช้ตัวแปรเพื่อเก็บข้อมูลที่อาจเปลี่ยนแปลงได้ในขณะที่โปรแกรมทำงาน ใน VBA แนวทางปฏิบัติที่ดีที่สุดคือการ "ประกาศ" (declare) ตัวแปรของคุณโดยใช้คำสั่ง Dim (ย่อมาจาก Dimension) เพื่อบอก Excel ว่าภาชนะนี้จะเก็บข้อมูลชนิดใด
| ชนิดข้อมูล (Data Type) | สิ่งที่จัดเก็บ | ตัวอย่างการประกาศ |
|---|---|---|
| String | ตัวอักษรและข้อความ | Dim employeeName As String |
| Integer | จำนวนเต็มระหว่าง -32,768 ถึง 32,767 | Dim rowCount As Integer |
| Long | จำนวนเต็มขนาดใหญ่ (ควรใช้สิ่งนี้เสมอในการนับแถวใน Excel สมัยใหม่) | Dim lastRow As Long |
| Double | ตัวเลขที่มีทศนิยม (เช่น สกุลเงิน, เปอร์เซ็นต์) | Dim totalSales As Double |
| Boolean | ค่า True (จริง) หรือ False (เท็จ) | Dim isComplete As Boolean |
| Range | ออบเจ็กต์ที่เป็นตัวแทนของเซลล์หรือกลุ่มเซลล์ | Dim targetCell As Range |
VBA ทำงานโดยการจัดการกับ "ออบเจ็กต์ (Objects)" Excel มีลำดับชั้นของออบเจ็กต์ที่เข้มงวดซึ่งคุณต้องระบุเพื่อให้ VBA รู้แน่ชัดว่าต้องการเปลี่ยนแปลงอะไร ลำดับชั้นจะเรียงจากกว้างไปเจาะจง:
Application > Workbook > Worksheet > Range
ตัวอย่างเช่น หากคุณต้องการเปลี่ยนค่าของเซลล์ A1 ใน Sheet1 คำสั่ง VBA ในทางเทคนิคจะมีหน้าตาแบบนี้: Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value = "Hello" โชคดีที่หากคุณกำลังทำงานในเวิร์กบุ๊กที่เปิดใช้งานอยู่ คุณสามารถย่อให้สั้นลงเหลือแค่ Range("A1").Value = "Hello" ก็ได้
เช่นเดียวกับฟังก์ชัน IF มาตรฐาน เงื่อนไขช่วยให้โค้ดของคุณทำการตัดสินใจตามเกณฑ์ที่กำหนดได้ หากตรงตามเงื่อนไข โค้ดจะทำงานอย่างหนึ่ง แต่ถ้าไม่ตรง ก็จะไปทำงานอีกอย่างหนึ่งแทน
If Range("A1").Value > 100 Then
Range("B1").Value = "Over Budget"
Else
Range("B1").Value = "On Track"
End If
ลูป (Loops) คือเวทมนตร์ที่แท้จริงของ VBA พวกมันช่วยให้คุณรันโค้ดบล็อกเดียวกันซ้ำๆ ได้โดยไม่ต้องเขียนโค้ดนั้นใหม่เป็นร้อยๆ ครั้ง ลูปที่ใช้บ่อยที่สุดคือ For...Next
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = "Test Data"
Next i
ในตัวอย่างนี้ โค้ดจะวนซ้ำ 10 รอบ โดยเติมข้อความ "Test Data" ลงในเซลล์ A1 ถึง A10 (แถวที่ i, คอลัมน์ที่ 1)
ลองนำแนวคิดทั้งหมดนี้มารวมกันเพื่อแก้ปัญหาในโลกแห่งความเป็นจริง สมมติว่าคุณมีรายการยอดขายในคอลัมน์ A ตั้งแต่แถวที่ 2 จนถึงแถวที่ 20 คุณต้องการเขียนโปรแกรมเพื่อวนลูปตรวจสอบตัวเลขเหล่านี้ หากยอดขายมากกว่า $1,000 ให้เขียนคำว่า "High Performer" ในคอลัมน์ B และไฮไลต์เซลล์นั้นเป็นสีเหลือง
ให้พิมพ์โค้ดต่อไปนี้ลงในโมดูลว่างของคุณให้ตรงตามที่ปรากฏเป๊ะๆ:
Sub AnalyzeSales()
' 1. Declare variables
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
' 2. Define the worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' 3. Find the last row with data in Column A
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 4. Loop from row 2 to the last row
For i = 2 To lastRow
' 5. Apply the condition
If ws.Cells(i, 1).Value > 1000 Then
' Mark as high performer in Column B
ws.Cells(i, 2).Value = "High Performer"
' Highlight Column B cell yellow
ws.Cells(i, 2).Interior.Color = vbYellow
' Make the text bold
ws.Cells(i, 2).Font.Bold = True
Else
' If not over 1000, leave standard text
ws.Cells(i, 2).Value = "Standard"
End If
Next i
' 6. Alert the user the macro is done
MsgBox "Sales analysis is complete!", vbInformation
End Sub
Sub AnalyzeSales(): "Sub" ย่อมาจาก Subroutine คำสั่งนี้จะเป็นการสร้างมาโครใหม่ที่ชื่อว่า AnalyzeSales') จะเปลี่ยนเป็นสีเขียว นี่คือคอมเมนต์ (คำอธิบายโค้ด) สำหรับคุณ ซึ่งคอมพิวเตอร์จะข้ามและไม่อ่านส่วนนี้Dim ใช้เพื่อประกาศแผ่นงาน, แถวสุดท้ายของเรา (Long), และตัวแปรตัวนับสำหรับลูป (Long)Set ws = ...: เนื่องจากแผ่นงานเป็นออบเจ็กต์ เราจึงต้องใช้คำว่า "Set" เพื่อกำหนดค่าให้กับตัวแปรของเราlastRow = ...: นี่คือทริคสุดคลาสสิกของ VBA โค้ดจะวิ่งไปที่ด้านล่างสุดของสเปรดชีต (Rows.Count) แล้วมองขึ้นด้านบน (xlUp) จนกว่าจะเจอข้อมูล จากนั้นจะส่งคืนหมายเลขแถวนั้นกลับมา วิธีนี้ทำให้โค้ดของเราเป็นแบบไดนามิก ซึ่งจะปรับเปลี่ยนได้เสมอไม่ว่าข้อมูลจะถูกเพิ่มเข้าไปมากแค่ไหนก็ตาม!For i = 2 To lastRow: เริ่มต้นลูปของเราที่แถว 2 (ข้ามหัวตาราง) และไปสิ้นสุดที่แถวสุดท้ายไม่ว่าจะเป็นแถวไหนก็ตามws.Cells(i, 1) จะอ้างอิงถึงเซลล์ที่แถว i คอลัมน์ 1 (คอลัมน์ A) เพื่อตรวจสอบว่ามีค่ามากกว่า 1000 หรือไม่Value, Interior.Color, และ Font.Bold ของมันNext i: บอกให้ Excel วนกลับไปและเพิ่มค่า i อีก 1 เพื่อตรวจสอบแถวถัดไปMsgBox: ลูกเล่นภาพที่น่าสนใจซึ่งจะเรียกหน้าต่างป๊อปอัปขึ้นมา เพื่อแจ้งให้ผู้ใช้ทราบว่าโค้ดทำงานเสร็จสมบูรณ์แล้วในการรันโค้ด คุณสามารถคลิกที่ใดก็ได้ระหว่างบรรทัด Sub และ End Sub ใน VBE แล้วกดปุ่ม F5 บนคีย์บอร์ด หรือคลิกที่รูปสามเหลี่ยมสีเขียว "Play" บนแถบเครื่องมือด้านบน
เคล็ดลับระดับโปรสำหรับการดีบัก (Debugging): แทนที่จะกด F5 ลองกดปุ่ม F8 ซ้ำๆ ดู ปุ่ม F8 จะช่วยให้คุณประมวลผลโค้ดไปทีละบรรทัด โดยจะไฮไลต์บรรทัดโค้ดที่กำลังทำงานอยู่ด้วยสีเหลือง ทำให้คุณสามารถดูได้ว่า Excel กำลังทำอะไรอยู่เบื้องหลัง นี่คือวิธีที่ดีที่สุดในการเรียนรู้และแก้ปัญหาเมื่อโปรแกรมทำงานไม่ถูกต้อง
ขอแสดงความยินดีด้วย! คุณเพิ่งเขียนซอฟต์แวร์อัตโนมัติตัวแรกของคุณสำเร็จแล้ว ด้วยความเข้าใจในเรื่องของตัวแปร ลูป และเงื่อนไข คุณได้ปลดล็อกพื้นฐานที่จำเป็นสำหรับการสร้างรายงานอัตโนมัติด้วย Excel VBA เมื่อฝึกฝนไปเรื่อยๆ คุณจะสามารถขยายตรรกะนี้เพื่อวนลูปผ่านเวิร์กบุ๊กทั้งไฟล์ ผสานข้อมูลจากหลายไฟล์ และล้างข้อมูลชุดใหญ่ที่ยุ่งเหยิงได้ในคลิกเดียว
ในขณะที่คุณเรียนรู้ต่อไป โปรดจำไว้ว่า VBA ไม่ใช่เครื่องมือเดียวในชุดเครื่องมือข้อมูลสมัยใหม่ หากคุณชอบใช้อินเทอร์เฟซแบบภาพมากกว่าการเขียนโค้ด คุณอาจสนใจลองดู ระบบอัตโนมัติของ Excel โดยไม่ใช้ VBA: Power Automate
นอกจากนี้ หากคุณรู้สึกว่าการเขียนโค้ดตั้งแต่เริ่มต้น การถอดรหัสข้อผิดพลาดของ VBA หรือการสร้างสูตรซ้อนทับที่ซับซ้อนอย่าง INDEX และ MATCH เป็นเรื่องที่น่าปวดหัว คุณไม่จำเป็นต้องทนดิ้นรนเพียงลำพัง คุณสามารถใช้ GPTExcel ได้เสมอ เพียงแค่อธิบายสิ่งที่คุณต้องการด้วยภาษาทั่วไป (เช่น "เขียนมาโคร VBA เพื่อล้างเซลล์สีเหลืองทั้งหมดใน Sheet1") และผู้ช่วย AI จะสร้างโค้ดหรือสูตรที่ถูกต้องให้คุณทันที
ไม่จำเป็นต้องมีประสบการณ์การเขียนโค้ดมาก่อน VBA ถูกออกแบบมาให้คนทำงานหรือมืออาชีพทั่วไปเข้าถึงได้ง่าย การเข้าใจตรรกะพื้นฐานของ Excel เช่น วิธีการทำงานของฟังก์ชัน IF จะช่วยให้คุณเริ่มต้นเรียนรู้ไวยากรณ์ของ VBA ได้อย่างยอดเยี่ยม
ตามค่าเริ่มต้น เวิร์กบุ๊ก Excel มาตรฐาน (.xlsx) จะไม่สามารถจัดเก็บมาโครได้ เมื่อคุณเขียนโค้ด VBA คุณต้องบันทึกไฟล์ของคุณเป็น "Excel Macro-Enabled Workbook" (.xlsm) หากคุณพยายามบันทึกเป็นเวิร์กบุ๊กมาตรฐาน Excel จะแจ้งเตือนว่าโค้ดของคุณจะถูกลบทิ้งไป
แม้ว่า Microsoft จะทุ่มทุนมหาศาลให้กับ Power Automate บนระบบคลาวด์ และเพิ่งนำ Python มาผสานการทำงานกับ Excel แต่ VBA ก็ไม่ได้กำลังจะหายไปไหน ธุรกิจนับล้านแห่งยังคงพึ่งพามาโคร VBA ตัวเก่าอยู่ มันยังคงเป็นวิธีที่รวดเร็วและน่าเชื่อถือที่สุดในการรันระบบอัตโนมัติระดับเดสก์ท็อปภายในไฟล์ Excel
เพื่อให้มาโครของคุณใช้งานง่ายขึ้น ให้ไปที่แท็บ Developer คลิก Insert (แทรก) แล้วเลือกไอคอน Button (ปุ่ม) ภายใต้ Form Controls (ตัวควบคุมฟอร์ม) จากนั้นให้วาดปุ่มลงบนสเปรดชีตของคุณ จะมีหน้าต่างปรากฏขึ้นทันทีเพื่อขอให้คุณกำหนดมาโคร—ให้เลือกมาโครใหม่ของคุณจากรายการ คลิก OK (ตกลง) และตอนนี้คุณก็สามารถรันโค้ดได้ง่ายๆ ในคลิกเดียว
ค้นพบวิธีทำระบบอัตโนมัติสำหรับงาน Excel โดยไม่ต้องใช้ VBA ด้วย Power Automate เรียนรู้วิธีสร้าง Flow ที่ทำงานตาม Event, ประมวลผลข้อมูล และเชื่อมต่อกับแอปอื่นๆ
ค้นพบวิธีสร้างระบบรายงานอัตโนมัติใน Excel ด้วย VBA เรียนรู้วิธีดึงข้อมูล แทรกสูตร จัดรูปแบบเซลล์ และส่งออกรายงานพร้อมโค้ดแบบทีละขั้นตอน
เริ่มต้นเขียนโปรแกรมใน Excel ด้วย VBA เรียนรู้แท็บ Developer, ตัวแปร, ลูป, เงื่อนไข และวิธีเขียนมาโครแรกของคุณให้ใช้งานได้จริงตั้งแต่เริ่มต้น