Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> Office

เชี่ยวชาญ Excel VBA: เข้าใจแมโคร โมดูล และ Procedure

Excel Visual Basic for Applications (VBA) เป็นภาษาโปรแกรมมิ่งที่ทรงพลัง VBA ช่วยให้คุณทำงานอัตโนมัติ สร้างฟังก์ชันกำหนดเอง และเพิ่มความสามารถของสเปรดชีท หากคุณเริ่มต้นกับ VBA การเข้าใจ терминสำคัญอย่าง Macro, Module และ Procedure เป็นสิ่งจำเป็น แนวคิดเหล่านี้เชื่อมโยงกันแต่ทำหน้าที่ต่างกัน

ในบทช่วยสอนนี้ เราจะอภิปรายศัพท์เทคนิค Excel VBA: Macro vs Module vs Procedure เราจะแยกแยะพร้อมคำอธิบาย ตัวอย่าง และเคล็ดลับปฏิบัติเพื่อช่วยให้คุณเริ่มต้นได้

เพื่อติดตาม คุณจะต้องมี Excel (ทุกเวอร์ชันจาก 2007 ขึ้นไป) พร้อมแท็บ Developer ที่เปิดใช้งาน

  • ถ้ายังไม่มองเห็น ไปที่แท็บ File >> เลือก Options >> เลือก Customize Ribbon >> เลือก Developer ด้านขวา

1. Macro คืออะไร?

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

ในทางปฏิบัติ เมื่อคนพูดว่า "ฉันบันทึกแมโคร" หรือ "ฉันเขียนแมโคร" พวกเขามักหมายถึง Sub procedure ที่จัดเก็บในโมดูล Macro Recorder ของ Excel สร้าง Sub procedures อัตโนมัติ

ลักษณะสำคัญ:

  • วัตถุประสงค์: ทำงานอัตโนมัติเพื่อประหยัดเวลา ตัวอย่าง แมโครอาจเรียงลำดับข้อมูล ใช้ตัวกรอง หรือสร้างรายงานในคลิกเดียว
  • วิธีสร้าง:
    • บันทึก (Recorded): ใช้ Macro Recorder สำหรับงานง่าย
    • เขียน (Written): แก้ไขหรือเขียนโค้ดด้วยมือใน VBA Editor สำหรับตรรกะซับซ้อนกว่า
  • ขอบเขต: แมโครมักจัดเก็บในเวิร์กบุ๊ก และสามารถรันจากปุ่ม ปุ่มลัด หรือกล่องโต้ตอบ Macros
  • ข้อจำกัด: แมโครที่บันทึกมักมีโค้ดที่ไม่จำเป็น (เช่น การเลือกเซลล์) และการอ้างอิงเซลล์อาจดูซับซ้อน ดังนั้นมักทำความสะอาดด้วยมือ

Macro ≠ VBA: VBA เป็นภาษาโปรแกรมมิ่ง แมโครคือการทำงานอัตโนมัติที่รันได้ สร้างด้วย VBA (หรือบันทึกเป็น VBA)

ตัวอย่าง: การสร้างและรันแมโครง่าย

  • ไปที่แท็บ Developer >> เลือก Record Macro
  • ตั้งชื่อ ApplyFormat (ไม่มีช่องว่าง) >> กำหนดปุ่มลัดถ้าต้องการ >> คลิก OK
  • ดำเนินการ:
    • เลือกหัวข้อ
    • ไปที่แท็บ Home >> เลือก Bold
    • ใช้สี Fill และสี Font
  • หยุดบันทึก: ไปที่แท็บ Developer >> คลิก Stop Recording

เบื้องหลัง Excel สร้างโค้ด VBA ประมาณนี้:

Sub ApplyFormat()
'
' ApplyFormat Macro
'
' Keyboard Shortcut: Ctrl+Shift+F
'
    Range("A1:G1").Select
    Selection.Font.Bold = True
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = -0.249977111117893
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
End Sub
  • นี่คือ Sub (ย่อมาจาก Subroutine) ซึ่งเป็นประเภทหนึ่งของ Procedure

การรันแมโคร:

  • ไปที่แท็บ Developer >> เลือก Macros
  • เลือก ApplyFormat >> เลือก Run
  • หรือกด Ctrl+Shift+F

ตอนนี้คุณสามารถสร้างและใช้แมโครสำหรับอัตโนมัติการทำงานได้อย่างรวดเร็วโดยไม่ต้องมีความเชี่ยวชาญด้านโค้ด

2. Procedure คืออะไร?

Procedure เป็นหน่วยพื้นฐานที่สุด คือ บล็อกโค้ด VBA ที่ดำเนินการงานเฉพาะ คิดว่ามันเป็นชุดคำสั่งที่ Excel ปฏิบัติตามเมื่อคุณรันมัน Procedures คือที่ที่ตรรกะจริงอยู่ คิดว่ามันเหมือน Functions หรือ Methods ในภาษาอื่น

ลักษณะสำคัญ:

  • ประเภท:
    • Sub Procedure (Sub): ดำเนินการแต่อไม่ส่งค่ากลับ นี่คือสิ่งที่ส่วนใหญ่หมายถึง "แมโคร" ในบริบท VBA เริ่มด้วย Sub และจบด้วย End Sub
    • Function Procedure (Function): คำนวณและส่งค่ากลับ เริ่มด้วย Function และจบด้วย End Function มีประโยชน์สำหรับสูตรกำหนดเองในเวิร์กชีท
  • วัตถุประสงค์: สร้างโค้ดที่ใช้ซ้ำได้ Procedures สามารถรวมลูป เงื่อนไข ตัวแปร และการโต้ตอบกับออบเจ็กต์ Excel (เช่น เซลล์ หรือแผนภูมิ)
  • ขอบเขต: สามารถเป็น Public (เข้าถึงได้จากทุกที่) หรือ Private (จำกัดในโมดูล)
  • พารามิเตอร์: สามารถรับอินพุต (อาร์กิวเมนต์) เพื่อความยืดหยุ่น

ตัวอย่าง: Sub Procedure vs Function Procedure

  • ไปที่แท็บ Developer >> เลือก Visual Basic (หรือกด Alt+F11)
  • คลิก Insert >> เลือก Module

Sub Procedure (เหมือนแมโคร):

Sub ClearFormatting()
    Range("A1:G1").ClearFormats
    MsgBox "Formatting is cleared"
End Sub
  • รันโค้ดเพื่อล้างการจัดรูปแบบ แล้วแสดงข้อความ "Formatting is cleared"

Function Procedure:

Function Multiply(num1 As Integer, num2 As Integer) As Integer
    Multiply = num1 * num2
End Function
  • ใช้ในเซลล์เหมือน =Multiply(E2,F2) เพื่อคูณค่า

ความสัมพันธ์กับแมโคร: แมโครทุกตัวคือ Sub procedures แต่ไม่ใช่ Sub procedures ทุกตัวที่เป็นแมโครที่บันทึก คุณสามารถเขียน Sub procedures ขั้นสูงที่เกินกว่าการบันทึกง่ายๆ

ใช้ Procedures เมื่อคุณต้องการโค้ดที่มีโครงสร้าง ใช้ซ้ำได้ แยกงานซับซ้อนเป็นหลาย Procedures เพื่อการจัดระเบียบที่ดีกว่า

3. Module คืออะไร?

Module เป็นคอนเทนเนอร์ที่เราจัดเก็บ Procedures หนึ่งหรือหลายตัว มันคือไฟล์ใน VBA Editor ที่คุณเขียนและจัดระเบียบโค้ด VBA มันเหมือนโฟลเดอร์ที่จัดระเบียบโค้ดของคุณ ทำให้ง่ายต่อการจัดการและใช้ซ้ำ

ประเภทของ Modules:

  • Standard Module: ประเภทที่พบบ่อยที่สุด สำหรับเขียนโค้ดทั่วไป
    • ปรากฏใน VBA Project Explorer เป็น "Module1", "Module2", ฯลฯ
    • เปิด VBA Editor >> คลิก Insert >> เลือก Module
  • Workbook Module (ThisWorkbook): จัดเก็บโค้ดที่ผูกกับ Events ของเวิร์กบุ๊ก (เปิด, ก่อนปิด, ฯลฯ)
    • Event procedures ที่ตอบสนองต่อการกระทำอย่างเปิดหรือปิดเวิร์กบุ๊ก
  • Worksheet Module (Sheet1, Sheet2, ฯลฯ): โมดูลพิเศษที่ผูกกับชีตเฉพาะ
    • มี Event procedures ที่ตอบสนองต่อการกระทำอย่างคลิกชีต และโค้ดรันเมื่อชีตเปลี่ยนแปลง
  • Class Module: โมดูลขั้นสูงสำหรับสร้างออบเจ็กต์กำหนดเอง แต่คุณไม่ต้องการตอนเริ่มต้น ใช้สำหรับ Object-Oriented Programming เช่น สร้างคลาสกำหนดเอง
  • UserForm Module: สำหรับออกแบบกล่องโต้ตอบกำหนดเอง

ตัวอย่าง: การทำงานกับ Modules

  • ไปที่แท็บ Developer >> เลือก Visual Basic (หรือกด Alt+F11)
  • ใน Project Explorer (แผงซ้าย)
    • คลิกขวาเวิร์กบุ๊กของคุณ >> คลิก Insert >> เลือก Module
  • คัดลอกวาง Procedure ลงไป:
Sub FormatSalesReport()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    ws.Range("A1:H1").Font.Bold = True
    ws.Range("A1:H" & lastRow).Borders.LineStyle = xlContinuous
    Dim i As Long
    For i = 2 To lastRow
        If ws.Cells(i, "H").Value > 100 Then
            ws.Cells(i, "H").Interior.Color = RGB(0, 255, 0)
        End If
    Next i
End Sub
  • โค้ด VBA นี้จัดรูปแบบข้อมูล และไฮไลท์ค่ามากกว่า 100 ในคอลัมน์ H
  • บันทึกเวิร์กบุ๊ก
  • ตอนนี้ Procedure นี้พร้อมใช้งานเป็นแมโคร
  • กด F5 หรือคลิก Run

ความสัมพันธ์กับแมโครและ Procedures:

  • Modules จัดเก็บ Procedures
  • Macros เป็น Sub procedures ที่จัดเก็บใน Modules
  • แมโครโดยไม่มี Module? ไม่ได้ เพราะโค้ด VBA ทุกอย่างอยู่ภายใน Module ประเภทใดประเภทหนึ่ง

เมื่อไหร่ควรใช้: สำหรับโปรเจกต์ VBA ใดๆ เริ่มต้นด้วยหนึ่งโมดูลสำหรับงานเล็ก ใช้หลายโมดูลสำหรับโปรเจกต์ใหญ่เพื่อหลีกเลี่ยงความสับสน

วิธีที่พวกเขาเข้ากัน: Macro → Procedure → Module

Macro เป็นคำสำหรับผู้ใช้สำหรับ Sub procedure Procedures คือบล็อกโค้ด Modules จัดกลุ่ม Procedures เพื่อการจัดระเบียบ

ตัวอย่างเวิร์กโฟลว์:

  • บันทึกแมโคร → มันสร้าง Sub procedure ในโมดูลใหม่ (มักเป็น "Module1")
  • แก้ไข Procedure เพื่อปรับปรุง
  • เพิ่ม Procedures อื่นๆ ลงในโมดูลเดียวกัน หรือสร้างโมดูลใหม่

แนวทางปฏิบัติที่ดีและเคล็ดลับ

  • ข้อตกลงการตั้งชื่อ: ใช้ชื่อที่อธิบายได้ เช่น Sub CalculateTotalSales() แทน Sub Macro1() หลีกเลี่ยงช่องว่าง ใช้ CamelCase
  • การจัดการข้อผิดพลาด: เพิ่ม On Error Resume Next หรือ On Error GoTo ErrorHandler ใน Procedures เพื่อทำให้ทนทานกว่า
  • ความปลอดภัย: แมโครสามารถรันโค้ดได้ ให้เปิดใช้งานเฉพาะจากแหล่งที่เชื่อถือได้ (File >> Options >> Trust Center >> Macro Settings)
  • การดีบัก: ใช้ F8 เพื่อผ่านโค้ดทีละขั้นใน VBA Editor
  • เคล็ดลับขั้นสูง: ส่งออก Modules (.bas files) เพื่อใช้โค้ดซ้ำข้ามเวิร์กบุ๊ก
  • หลุมที่พบบ่อย: ไม่สับสน Excel Macros กับ Office Scripts (JavaScript-based ใน Excel เวอร์ชันใหม่) VBA ทรงพลังกว่าสำหรับอัตโนมัติเดสก์ท็อป

สรุป

โดยทำตามบทช่วยสอนนี้ คุณสามารถเข้าใจศัพท์เทคนิค Excel VBA: Macro vs Module vs Procedure การเข้าใจคำเหล่านี้จะช่วยให้คุณใช้ VBA ได้อย่างมีประสิทธิภาพ จะช่วยคุณนำทางเอกสาร VBA สื่อสารกับผู้ใช้ Excel คนอื่น และจัดระเบียบโค้ดของคุณได้อย่างมีประสิทธิภาพมากขึ้น เริ่มต้นด้วยการบันทึกแมโครเพื่อดู Procedures ในการทำงาน จากนั้นจัดระเบียบลงใน Modules เมื่อโปรเจกต์ของคุณโต ลองฝึกโดยทำงานง่ายๆ ในสเปรดชีทของคุณเองอัตโนมัติ และคุณจะเห็นพลังของ VBA ได้อย่างรวดเร็ว