การใช้ Record Macro เปรียบเสมือนการบันทึก Video เพื่อให้คอมพิวเตอร์ทำงานซ้ำๆ ตามที่เราบันทึกการกระทำต่างๆ ไว้ได้
ก่อนจะเริ่ม Record Macro ให้เรา เปิด Developer Ribbon ขึ้นมาก่อน
สมมุติว่าทุกวันเราได้รับ Report จากระบบ แต่มี column ที่เราไม่ได้ใช้จึงต้องการลบออก แล้วต้องการไฮไลท์ข้อมูลบางอย่างทุกวัน เช่น ไฮไลท์เสื้อขนาด 3XL เราจะนำ Macro มาใช้ยังไงได้บ้าง ไปดูกันเลย ดาวน์โหลดไฟล์ได้ที่นี่
ขั้นตอนการทำงานแบบ Manual
ถ้าเราทำเองก็จะต้องทำงานต่างๆ เช่น ลบคอลัมน์ที่ไม่ต้องการ, ปรับความกว้างคอลัมน์อัตโนมัติ, ใส่ condition formatting
- คลิกไปที่ column A
- กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column C
- กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column H
- คลิกขวา
- เลือก Delete
- เลือก column ทั้งหมด แล้ว double click เพื่อปรับความกว้างความกว้างคอลัมน์อัตโนมัติ
- เลือกช่วงข้อมูล ใส่ conditional formatting



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

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

ตั้งค่าต่างๆ
Macro name: ตั้งชื่อ Macro
Shortcut key: ใส่คีย์ลัดในการเรียกใช้ Macro (เป็น optional จะใส่หรือไม่ใส่ก็ได้)
Store macro in: ในกรณีนี้ต้องการให้ใช้กับไฟล์อะไรก็ได้ เพราะทุกวันเราได้รับ Report จากระบบโดยไฟล์เปลี่ยนไปเรื่อยๆ จึงบันทึกไว้ใน Personal Macro Workbook
Description: ใส่คำอธิบาย (เป็น optional จะใส่หรือไม่ใส่ก็ได้)

ทำตามขั้นตอน 1-6 คือ
- คลิกไปที่ column A
- กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column C
- กด Ctrl ที่คีย์บอร์ด แล้วคลิกที่ column H
- คลิกขวา
- เลือก Delete
- เลือก 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


Leave a comment