dịch vụ
Cách ghi macro (Record Macro) trong Excel cho người mới bắt đầu

Ghi macro (Record Macro) là cách để Excel "học" lại các thao tác bạn làm bằng chuột và bàn phím, rồi làm lại y hệt chỉ bằng một phím tắt hoặc một nút bấm. Cách làm: vào tab Developer → Record Macro → thực hiện thao tác → Stop Recording. Bạn không cần biết viết code — Excel tự viết mã VBA thay bạn.
Bài này hướng dẫn ghi một macro định dạng bảng lương hàng tháng từ đầu đến cuối, sau đó chỉ ra lỗi mà gần như ai mới ghi macro cũng gặp (macro chạy sai khi tháng sau có thêm nhân viên) và cách sửa vài dòng mã để nó chạy đúng mãi về sau.
Macro hợp với việc gì, không hợp với việc gì?
Trước khi ghi, hãy xem việc của bạn có đáng tự động hóa không. Macro ghi lại phát huy tác dụng khi:
- Bạn làm cùng một chuỗi thao tác lặp lại hằng ngày, hằng tuần: định dạng file xuất từ phần mềm kế toán, chấm công, bán hàng.
- Các bước không cần suy nghĩ — lần nào cũng bấm đúng những nút đó.
- Thao tác mất từ vài phút trở lên mỗi lần, hoặc dễ quên một bước.
Macro ghi lại không hợp khi:
- Việc chỉ làm một lần — ghi macro tốn thời gian hơn làm tay.
- Cần ra quyết định theo dữ liệu (dòng nào quá hạn thì tô đỏ, khách nào nợ thì gửi email). Macro ghi lại không có "nếu… thì…"; việc này cần viết mã hoặc dùng Conditional Formatting.
- Công thức Excel làm được: tính tổng, tra cứu, lọc dữ liệu nên dùng hàm như SUMIFS, XLOOKUP, FILTER — công thức tự cập nhật, macro thì phải bấm chạy.
Ví dụ trong bài: mỗi tháng phòng kế toán xuất bảng lương từ phần mềm ra Excel ở dạng thô — không in đậm tiêu đề, số tiền không có dấu phân cách, cột hẹp. Mỗi lần đều phải định dạng lại khoảng 10 thao tác. Đây là việc hợp để ghi macro.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | STT | Họ tên | Chức vụ | Lương cơ bản | Phụ cấp | Thực lĩnh |
| 2 | 1 | Nguyễn Văn An | Kế toán | 7500000 | 1000000 | 8500000 |
| 3 | 2 | Trần Thị Bình | Nhân viên | 6000000 | 500000 | 6500000 |
Bước 1: Bật tab Developer
Tab Developer chứa các nút làm việc với macro nhưng mặc định bị ẩn:
- File → Options → Customize Ribbon.
- Ở danh sách bên phải, tick ô Developer → OK.
Tab Developer xuất hiện trên thanh ribbon. Nếu không muốn bật, bạn vẫn ghi được macro ở View → Macros → Record Macro, hoặc bấm biểu tượng ghi nhỏ ở góc dưới bên trái thanh trạng thái.
Bước 2: Chuẩn bị trước khi bấm ghi
Macro ghi mọi thao tác, kể cả bấm nhầm rồi sửa lại. Vì vậy:
- Mở sẵn file bảng lương và bấm vào ô A1 để bắt đầu từ vị trí cố định.
- Ghi ra giấy các bước sẽ làm, theo thứ tự. Ví dụ:
- Chọn A1:F1 → in đậm, tô nền xanh, chữ trắng, căn giữa.
- Chọn cột D đến F → định dạng số có dấu phân cách hàng nghìn.
- Kẻ khung toàn bảng.
- Tự giãn độ rộng cột.
- Cố định dòng tiêu đề.
- Làm thử bằng tay một lần để chắc các bước đúng.
Bước 3: Ghi macro
- Tab Developer → Record Macro. Hộp thoại hiện ra với các ô:
- Macro name:
DinhDangBangLuong. Tên phải bắt đầu bằng chữ cái, không có dấu cách, nên viết không dấu. - Shortcut key: gõ chữ M khi giữ phím Shift để có phím tắt Ctrl+Shift+M. Nếu gõ chữ thường, phím tắt sẽ là Ctrl+chữ, dễ đè lên phím tắt có sẵn của Excel như Ctrl+C, Ctrl+S.
- Store macro in: chọn This Workbook (giải thích các lựa chọn khác ở phần sau).
- Description: mô tả ngắn, ví dụ "Định dạng bảng lương xuất từ phần mềm".
- Macro name:
- Bấm OK. Từ giây phút này Excel ghi lại mọi thao tác.
- Làm lần lượt các bước đã ghi ra giấy:
- Chọn A1:F1 → Ctrl+B, tô nền xanh, chữ trắng, Home → Center.
- Chọn các ô số tiền D2:F21 → Ctrl+1 → tab Number → mục Number, tick Use 1000 Separator (,), Decimal places 0 → OK.
- Chọn cả bảng A1:F21 → Home → Borders → All Borders.
- Chọn cột A:F → Home → Format → AutoFit Column Width.
- Bấm ô A2 → View → Freeze Panes → Freeze Panes.
- Bấm Developer → Stop Recording (hoặc biểu tượng ô vuông ở thanh trạng thái).
Bước 4: Lưu file đúng định dạng .xlsm
File .xlsx không lưu được macro. Nếu bấm Save bình thường, Excel cảnh báo rằng một số tính năng không lưu được trong sổ làm việc không có macro — bấm No, rồi:
- File → Save As.
- Save as type: chọn Excel Macro-Enabled Workbook (*.xlsm).
- Bấm Save.
Nếu lỡ bấm Yes, file được lưu dạng .xlsx và macro vừa ghi sẽ mất khi đóng file.
Bước 5: Chạy macro
Mở một bảng lương thô khác (cùng cấu trúc cột) trong file .xlsm rồi chạy bằng một trong ba cách:
- Nhấn phím tắt Ctrl+Shift+M.
- Developer → Macros (hoặc Alt+F8) → chọn
DinhDangBangLuong→ Run. - Gán vào nút bấm trên trang tính: Developer → Insert → trong nhóm Form Controls chọn Button, kéo vẽ nút, hộp Assign Macro hiện ra → chọn macro → OK. Chuột phải nút → Edit Text để đổi chữ thành "Định dạng bảng lương".
Bạn cũng có thể vẽ một hình chữ nhật bằng Insert → Shapes, chuột phải → Assign Macro. Hình vẽ đổi màu, bo góc đẹp hơn nút mặc định.
Lưu ý: thao tác do macro thực hiện không hoàn tác được bằng Ctrl+Z. Hãy chạy thử trên bản sao của file trước.
Bước 6: Xem mã Excel đã ghi — và lỗi mà ai cũng gặp
Nhấn Alt+F11 để mở cửa sổ VBA, nhấp đúp Module1 ở khung bên trái. Mã ghi được trông gần giống như sau (đã rút gọn phần kẻ khung cho dễ đọc — recorder thật ghi riêng từng cạnh viền thành nhiều dòng; mã trên máy bạn cũng có thể khác đôi chút tùy thao tác):
Sub DinhDangBangLuong()
'
' DinhDangBangLuong Macro
' Dinh dang bang luong xuat tu phan mem
'
' Keyboard Shortcut: Ctrl+Shift+M
'
Range("A1:F1").Select
Selection.Font.Bold = True
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 12611584
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("D2:F21").Select
Selection.NumberFormat = "#,##0"
Range("A1:F21").Select
Selection.Borders.LineStyle = xlContinuous
Columns("A:F").EntireColumn.AutoFit
Range("A2").Select
ActiveWindow.FreezePanes = True
End Sub
Đọc từng dòng:
Range("A1:F1").Select— chọn dòng tiêu đề.Selection.Font.Bold = True— in đậm vùng đang chọn.- Khối
With Selection.Interior … End With— tô nền. Recorder ghi thừa nhiều thuộc tính, chỉ dòng.Colorlà quan trọng. Range("D2:F21")vàRange("A1:F21")— đây là vấn đề. Tháng này có 20 nhân viên (dòng 2 đến 21), nên Excel ghi cứng địa chỉ tới dòng 21.Columns("A:F").EntireColumn.AutoFit— giãn cột.ActiveWindow.FreezePanes = True— cố định phía trên ô đang chọn (A2), tức là dòng 1.
Tháng sau công ty có 25 người, chạy macro thì dòng 22–25 không được định dạng, không có khung. Đây là lý do nhiều người ghi macro xong thấy "lúc chạy được lúc không".
Bước 7: Sửa mã để chạy đúng với mọi số dòng
Thay toàn bộ mã cũ bằng phiên bản dưới đây. Nó làm đúng các việc như trên, nhưng tự tìm dòng cuối cùng có dữ liệu thay vì ghi cứng dòng 21:
Sub DinhDangBangLuong()
Dim ws As Worksheet
Dim dongCuoi As Long
Set ws = ActiveSheet
' Tim dong cuoi co du lieu o cot B (Ho ten)
dongCuoi = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
' Dong tieu de
With ws.Range("A1:F1")
.Font.Bold = True
.Font.Color = RGB(255, 255, 255)
.Interior.Color = RGB(0, 112, 192)
.HorizontalAlignment = xlCenter
End With
' So tien co dau phan cach hang nghin
ws.Range("D2:F" & dongCuoi).NumberFormat = "#,##0"
' Ke khung toan bang
ws.Range("A1:F" & dongCuoi).Borders.LineStyle = xlContinuous
' Gian cot
ws.Columns("A:F").AutoFit
' Co dinh dong tieu de
ActiveWindow.FreezePanes = False
ws.Range("A2").Select
ActiveWindow.FreezePanes = True
End Sub
Giải thích phần mới:
ws.Cells(ws.Rows.Count, "B").End(xlUp).Row— đứng ở ô cuối cùng của cột B (dòng 1.048.576) rồi đi ngược lên đến ô có dữ liệu đầu tiên, giống bạn nhấn Ctrl+↑. Kết quả là số dòng của nhân viên cuối cùng."D2:F" & dongCuoi— ghép chuỗi thành địa chỉ, ví dụ"D2:F26"khi có 25 người.- Bỏ
.Select/Selection: thay vì chọn rồi làm, mã tác động thẳng vào vùng ô. Chạy nhanh hơn và màn hình không nhấp nháy. RGB(0, 112, 192)— cùng màu xanh với số12611584recorder ghi, nhưng dễ đọc và dễ đổi màu hơn.FreezePanes = Falsetrước — bỏ cố định cũ (nếu có) để tránh cố định sai vị trí khi chạy lại.- Các dòng bắt đầu bằng dấu
'là chú thích, Excel bỏ qua. Viết chú thích không dấu vì cửa sổ VBA hiển thị tiếng Việt có dấu không tốt.
Sau khi dán mã, phím tắt gán lúc ghi có thể mất. Gán lại: Alt+F8 → chọn macro → Options… → nhập lại chữ M khi giữ Shift.
Phần nâng cao: ghi tương đối và Personal Macro Workbook
Use Relative References: macro làm việc tại ô đang chọn
Mặc định Excel ghi địa chỉ tuyệt đối (luôn là A1:F1). Muốn macro làm việc tại vị trí ô đang chọn, bật Developer → Use Relative References trước khi ghi.
Ví dụ: đánh dấu đơn hàng đã giao bằng cách tô xanh nhạt cả dòng (6 cột) rồi nhảy xuống dòng dưới. Bật Use Relative References, bấm vào ô cột A của một đơn hàng, ghi: chọn 6 ô sang phải → tô nền → bấm ô cột A dòng dưới → Stop. Mã ghi được có dạng:
ActiveCell.Range("A1:F1").Select
Selection.Interior.Color = 13561798
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.Range("A1:F1") nghĩa là "6 ô tính từ ô đang chọn", không phải ô A1 của trang tính. Offset(1, 0) là xuống 1 dòng, giữ nguyên cột. Bấm vào đơn hàng nào rồi nhấn phím tắt, dòng đó được tô và con trỏ nhảy sẵn xuống đơn tiếp theo.
Nút Use Relative References là công tắc bật/tắt; nhớ tắt đi khi ghi macro khác cần địa chỉ cố định.
Ba lựa chọn "Store macro in"
| Lựa chọn | Macro nằm ở đâu | Dùng khi |
|---|---|---|
| This Workbook | Trong file hiện tại (.xlsm) | Macro gắn với một file cụ thể, gửi file cho người khác dùng |
| New Workbook | Trong một file mới | Ít dùng |
| Personal Macro Workbook | File ẩn PERSONAL.XLSB, mở cùng Excel | Macro dùng chung cho mọi file trên máy bạn |
Chọn Personal Macro Workbook thì macro có mặt trong mọi file Excel bạn mở trên máy đó — hợp với các thao tác cá nhân như định dạng nhanh, xóa dòng trống. Khi đóng Excel lần đầu sau khi ghi, Excel hỏi có lưu thay đổi cho Personal Macro Workbook không — bấm Save. Lưu ý: người khác mở file của bạn sẽ không có các macro này.
Lỗi thường gặp
Mở file không chạy được macro, có thanh cảnh báo màu vàng hoặc đỏ Nguyên nhân: Excel tắt macro mặc định để chống mã độc; file tải từ internet hoặc nhận qua email còn bị chặn hẳn. Cách sửa: với file của chính bạn, bấm Enable Content trên thanh vàng. Nếu thanh đỏ báo macro bị chặn vì nguồn không tin cậy, đóng file, chuột phải file → Properties → tab General → tick Unblock → OK. Chỉ làm vậy với file bạn biết rõ nguồn gốc.
Macro biến mất sau khi đóng file Nguyên nhân: file được lưu dạng .xlsx. Cách sửa: ghi lại và lưu dạng Excel Macro-Enabled Workbook (.xlsm) như Bước 4.
Macro chỉ định dạng đến một dòng cố định Nguyên nhân: recorder ghi cứng địa chỉ vùng chọn. Cách sửa: dùng biến dòng cuối như Bước 7, hoặc chuyển dữ liệu thành Table (Ctrl+T) để vùng tự mở rộng.
Chạy macro báo lỗi "Run-time error 1004" Nguyên nhân thường gặp: macro chạy trên sheet khác cấu trúc (ví dụ sheet đang bị khóa bằng Protect Sheet, hoặc tên sheet trong mã không tồn tại). Cách sửa: bấm Debug để xem dòng màu vàng gây lỗi, kiểm tra sheet có bị khóa không và chạy macro trên đúng sheet.
Chữ tiếng Việt trong mã thành ký tự lạ Nguyên nhân: trình soạn thảo VBA không hiển thị Unicode tiếng Việt có dấu. Cách sửa: hạn chế gõ chữ tiếng Việt khi ghi macro; nếu cần chèn chữ cố định, để sẵn chữ đó trong một ô và cho macro sao chép từ ô đó.
Phím tắt của macro làm mất phím tắt quen thuộc Nguyên nhân: gán Ctrl+chữ thường trùng phím tắt có sẵn (ví dụ Ctrl+C). Cách sửa: Alt+F8 → Options… đổi sang Ctrl+Shift+chữ.
Ghi macro trên Excel Online, Mac được không?
Excel trên web không ghi và không chạy được macro VBA. Với tài khoản Microsoft 365 công ty hoặc trường học, Excel trên web có tab Automate dùng Office Scripts — một công nghệ khác, mã không dùng chung với VBA. Excel cho Mac có ghi macro VBA, nhưng một số lệnh liên quan Windows (đường dẫn thư mục, Outlook) sẽ không chạy.
Khi nào nên nhờ viết công cụ riêng?
Ghi macro là bước khởi đầu tốt: bạn tự động hóa được các việc định dạng, sắp xếp lặp lại trong một buổi chiều. Nhưng nên cân nhắc nhờ người viết mã VBA hoặc Google Apps Script khi:
- Cần xử lý theo điều kiện: lọc nhân viên theo phòng ban rồi tách thành từng file, tô đỏ đơn quá hạn, bỏ qua dòng trống.
- Cần làm việc với nhiều file: gộp báo cáo của 10 chi nhánh, xuất từng phiếu lương ra PDF, gửi email cho từng người.
- Cần form nhập liệu kiểm tra lỗi trước khi lưu, hoặc nhiều người cùng nhập dữ liệu online.
- Macro tự ghi ngày càng dài, sửa chỗ này hỏng chỗ khác.
Trước khi thuê, hãy tự chuẩn bị: file mẫu (dữ liệu có thể làm giả), danh sách các bước bạn đang làm tay theo thứ tự, và kết quả mong muốn. Nếu bạn đã ghi được macro cho một phần công việc, gửi kèm luôn — đó là bản mô tả quy trình rất rõ ràng.
Bảng tóm tắt
| Việc cần làm | Thao tác |
|---|---|
| Bật tab Developer | File → Options → Customize Ribbon → tick Developer |
| Bắt đầu ghi | Developer → Record Macro (đặt tên, phím tắt Ctrl+Shift+chữ) |
| Dừng ghi | Developer → Stop Recording |
| Lưu file có macro | Save As → Excel Macro-Enabled Workbook (.xlsm) |
| Chạy macro | Phím tắt / Alt+F8 → Run / nút bấm gán macro |
| Xem, sửa mã | Alt+F11 → Module1 |
| Chạy đúng khi thêm dòng | Dùng Cells(Rows.Count, "B").End(xlUp).Row |
| Ghi tại ô đang chọn | Bật Use Relative References trước khi ghi |
| Macro dùng cho mọi file | Store macro in: Personal Macro Workbook |
| Macro bị chặn | Enable Content hoặc Properties → Unblock |
Câu hỏi thường gặp
Macro và VBA khác nhau thế nào?
Macro là một chuỗi lệnh tự động trong Excel, còn VBA (Visual Basic for Applications) là ngôn ngữ dùng để viết macro đó. Khi bạn dùng Record Macro, Excel tự viết mã VBA thay bạn. Học sửa vài dòng VBA trong macro đã ghi là cách nhẹ nhàng nhất để bắt đầu học lập trình VBA.
File Excel có macro có an toàn không?
File Excel có macro do chính bạn hoặc đồng nghiệp tin cậy tạo ra thì an toàn để dùng. Macro có thể chứa mã độc nên chỉ bấm Enable Content với file biết rõ nguồn gốc, không bật macro trong file lạ nhận qua email. Excel mặc định chặn macro trong file tải từ internet chính là để bảo vệ người dùng.
Có thể xóa macro đã ghi trong Excel không?
Có, nhấn Alt+F8 để mở danh sách macro, chọn macro cần xóa rồi bấm Delete. Nếu muốn bỏ hẳn mọi macro khỏi file, lưu file thành định dạng .xlsx thông thường và chọn Yes khi Excel cảnh báo không lưu được macro. Nên giữ một bản .xlsm dự phòng trước khi xóa.
Google Sheets có ghi macro như Excel không?
Có, Google Sheets có tính năng ghi macro ở menu Tiện ích mở rộng → Macro → Ghi macro, mã được tạo bằng Google Apps Script chứ không phải VBA. Macro VBA của Excel không chạy được trên Google Sheets, nên khi chuyển sang Sheets cần ghi lại hoặc viết lại bằng Apps Script.
Bài viết liên quan
- Cách dùng Google Apps Script tự động hóa Google Sheets cơ bản
- Tự động tạo hợp đồng Word từ dữ liệu Excel, Google Sheets
- Những hàm Excel dân văn phòng nên biết
Cần công cụ Excel tự động cho đúng quy trình của bạn?
Nếu bạn đã thử ghi macro nhưng công việc cần nhiều hơn — xử lý theo điều kiện, tách gộp nhiều file, xuất PDF, gửi email — Điền Nguyễn AZ nhận viết macro VBA và Google Apps Script theo đúng mẫu và quy trình của từng đơn vị. Gửi file mẫu và mô tả các bước đang làm tay để được tư vấn cách làm phù hợp. Muốn tự học Excel bài bản, có khóa học trực tiếp tại TP Vinh, Hưng Nguyên, Đô Lương và online qua Zoom cho người ở xa.
📞 Hotline / Zalo: 0362 465 361
👉 Xem chi tiết: Dịch vụ viết VBA và Google Apps Script · Khóa học Excel
Tài liệu miễn phí
30 phím tắt Excel hay dùng nhất
Tổng hợp phím tắt giúp thao tác Excel nhanh hơn — điền thông tin để tải file PDF miễn phí về dùng ngay.
Bài viết liên quan

03/11/2026
Website chuẩn SEO là gì? 10 tiêu chí tự kiểm tra trước khi nghiệm thu
Website chuẩn SEO là gì và cách tự kiểm tra 10 tiêu chí trước khi nghiệm thu: noindex, HTTPS, title, sitemap, tốc độ, di động, Search Console, bàn giao quyền.

01/11/2026
Phần mềm quản lý riêng hay có sẵn: doanh nghiệp nhỏ nên chọn gì?
Doanh nghiệp nhỏ nên mua phần mềm quản lý có sẵn hay làm phần mềm riêng? Checklist 10 câu tự đánh giá, so sánh chi phí, rủi ro và cách thử trước khi quyết định.

31/10/2026
Tạo PDF hàng loạt từ Google Sheets bằng Apps Script và tự gửi email
Tự động tạo PDF hàng loạt từ Google Sheets bằng Apps Script: mỗi nhân viên một phiếu lương PDF, lưu Drive, gửi email đính kèm, có chế độ chạy thử và mã mẫu.