Record Macro 101

by

การใช้ Record Macro เปรียบเสมือนการบันทึก Video เพื่อให้คอมพิวเตอร์ทำงานซ้ำๆ ตามที่เราบันทึกการกระทำต่างๆ ไว้ได้

ก่อนจะเริ่ม Record Macro ให้เรา เปิด Developer Ribbon ขึ้นมาก่อน

สมมุติว่าทุกวันเราได้รับ Report จากระบบ แต่มี column ที่เราไม่ได้ใช้จึงต้องการลบออก แล้วต้องการไฮไลท์ข้อมูลบางอย่างทุกวัน เช่น ไฮไลท์เสื้อขนาด 3XL เราจะนำ Macro มาใช้ยังไงได้บ้าง ไปดูกันเลย ดาวน์โหลดไฟล์ได้ที่นี่

ขั้นตอนการทำงานแบบ Manual

ถ้าเราทำเองก็จะต้องทำงานต่างๆ เช่น ลบคอลัมน์ที่ไม่ต้องการ, ปรับความกว้างคอลัมน์อัตโนมัติ, ใส่ condition formatting

  1. คลิกไปที่ column A
  2. กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column C
  3. กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column H
  4. คลิกขวา
  5. เลือก Delete
  6. เลือก column ทั้งหมด แล้ว double click เพื่อปรับความกว้างความกว้างคอลัมน์อัตโนมัติ
  7. เลือกช่วงข้อมูล ใส่ conditional formatting
Home tab > Conditional Formatting > New Rule > Use a formula to determine which cells to format

ใส่สูตรตามด้านล่าง แล้วปรับสีฟอนต์, สีพื้นหลังตามที่ต้องการ

=$I1="3XL"

Result

การใช้ Record Macro

เราจะกด Record มาโครแล้วทำทุกอย่างเหมือนกับตอนที่ทำแบบ Manual โดยจะทำแค่ขั้นตอนที่ 1-6 ก่อน

กด Developer tab > Record Macro

Developer tab > Record Macro

ตั้งค่าต่างๆ

Macro name: ตั้งชื่อ Macro

Shortcut key: ใส่คีย์ลัดในการเรียกใช้ Macro (เป็น optional จะใส่หรือไม่ใส่ก็ได้)

Store macro in: ในกรณีนี้ต้องการให้ใช้กับไฟล์อะไรก็ได้ เพราะทุกวันเราได้รับ Report จากระบบโดยไฟล์เปลี่ยนไปเรื่อยๆ จึงบันทึกไว้ใน Personal Macro Workbook

Description: ใส่คำอธิบาย (เป็น optional จะใส่หรือไม่ใส่ก็ได้)

ตั้งชื่อ Macro, Shortcut, เลือกที่เก็บ, ใส่คำอธิบาย

ทำตามขั้นตอน 1-6 คือ

  1. คลิกไปที่ column A
  2. กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column C
  3. กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column H
  4. คลิกขวา
  5. เลือก Delete
  6. เลือก column ทั้งหมด แล้ว double click เพื่อปรับความกว้างความกว้างคอลัมน์อัตโนมัติ (คลิกที่ cell A1 ด้วยก็ได้)

จะได้ Code VBA มาตามรูป

สามารถเพิ่ม comment เข้าไปได้ โดยใช้ single quote ด้านหน้าข้อความที่ comment

Code (Step 1 – Step 6)

Sub delete_autofit()
'
' delete_autofit Macro
' delete unnecessary column, auto fit column
'
' Keyboard Shortcut: Ctrl+Shift+Q
'
   'Delete column id, GUID, ip_address
    Range("A:A,C:C,H:H").Select
    Range("H1").Activate
    Selection.Delete Shift:=xlToLeft
    
    'Auto fit all columns
    Columns("A:I").Select
    Columns("A:I").EntireColumn.AutoFit
    
    'Select cell A1
    Range("A1").Select
    
End Sub

ปิดไฟล์โดยไม่ Save Excel (เพราะเราจะทดสอบว่า Macro ใช้งานได้มั้ย)

Save Macro (เอาไว้เรียกใช้ตอนเปิดไฟล์)

เปิดไฟล์แล้วกดคีย์ลัดที่ตั้งไว้

ลองกด Record Macro แล้ว ทำขั้นตอนที่ 7 คือ เลือกช่วงข้อมูล (Ctrl+a) ใส่ conditional formatting

ตั้งชื่อ Macro เลือก Personal Macro Workbook (ไม่ต้องตั้ง Shortcut key เพราะอันนี้จะได้ code ที่ยังไม่ดี)

จะได้ code ตามรูปด้านล่าง สังเกตว่าการกด Ctrl+a (Select all) จะได้ code ที่ระบุตำแหน่งข้อมูลของไฟล์ที่ใช้ record เท่านั้น (cell A1 ถึง I21) แปลว่าถ้ามีวันไหนที่ข้อมูลมีมากกว่า 21 บรรทัด Macro นี้ก็จะทำงานผิดนั่นเอง

ลองกด Record Macro อีกครั้งแล้ว ทำขั้นตอนที่ 7 คือ เลือกช่วงข้อมูลโดยการใช้คีย์บอร์ด Ctrl, Shift และลูกศร (ไปที่ A1 กด Ctrl+Shift+ลูกศรขวา แล้วกด Ctrl+Shift+ลูกศรล่าง) ใส่ conditional formatting

ตั้งชื่อ Macro เลือก Personal Macro Workbook (ไม่ต้องตั้ง Shortcut key เพราะเดี๋ยวจะเอา code ไปรวมกับ Macro ตัวแรกที่บันทึกเรื่องการ delete column, auto fit column)

จะได้ code ตามรูปด้านล่าง สังเกตว่าการกด Ctrl, Shift และลูกศร จะได้ code ที่มีความยืดหยุ่นมากขึ้น code นี้จะสามารถทำงานได้ถูกต้องถ้าข้อมูลใน column A ไม่มีค่าว่าง

copy code ไปรวมกับ Macro ที่ใช้ delete column, auto fit column

สามารถแก้ไข description ได้ แต่ถ้าแก้ชื่อ Macro จะทำให้ Shortcut key หายไป ต้องไปเพิ่มใหม่

ไปที่ Macro ชื่อนั้น กด Options แล้วตั้ง Shortcut key (เวลาจะกด Shortcut key ดูภาษาของคีย์บอร์ดด้วยนะ)

Code (Step 1 -Step7)

Sub find_3xl()
'
' delete_autofit Macro
' delete unnecessary column, auto fit column, conditional formatting
'
' Keyboard Shortcut: Ctrl+Shift+Q
'
   'Delete column id, GUID, ip_address
    Range("A:A,C:C,H:H").Select
    Range("H1").Activate
    Selection.Delete Shift:=xlToLeft
    
    'Auto fit all columns
    Columns("A:I").Select
    Columns("A:I").EntireColumn.AutoFit
    
    'Select cell A1
    Range("A1").Select
    
    'Select data range
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    
    'Highlight 3XL with orange color
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$I1=""3XL"""
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = -0.499984740745262
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.799981688894314
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    
End Sub

ลองทดสอบ Run Macro ด้วยไฟล์ที่มีข้อมูล 20 row และ 30 row

Video

Did You Enjoy this Article?

Subscription to get new articles sent to your inbox each week for FREE

Question?

If you have any questions or feedback about this article please leave a message in the comments section below.


Comments

Leave a comment

Subscribe to get new articles sent to your inbox each week for FREE