Tracks
Visual Basic for Applications (VBA) trong Excel là một ngôn ngữ cho phép người dùng tự động hóa các tác vụ lặp lại và mở rộng khả năng của Excel vượt xa các tính năng tiêu chuẩn. Vì vậy, dù bạn là người mới muốn tăng hiệu suất làm việc hay người dùng nâng cao đang tìm cách tinh gọn quy trình phức tạp, VBA sẽ giúp mọi việc trở nên dễ dàng hơn.
Trong hướng dẫn này, tôi sẽ giải thích các khái niệm VBA cơ bản và nâng cao. Tuy nhiên, nếu bạn mới làm quen với Excel, hãy bắt đầu với Excel Fundamentals để xây dựng nền tảng vững chắc trước khi chuyển sang VBA.
VBA trong Excel là gì?
Visual Basic for Applications (VBA) là ngôn ngữ lập trình dùng để tự động hóa tác vụ và mở rộng chức năng của các ứng dụng Microsoft Office. Bạn có thể dùng nó với Excel, Word, Access và các chương trình Office khác, mặc dù có lẽ nó được sử dụng rộng rãi nhất để tạo macro tùy chỉnh trong Excel, điều mà chúng ta sẽ cùng tìm hiểu.
Cá nhân tôi, lần đầu dùng VBA là để tự động hóa một báo cáo hàng tuần vốn mất hàng giờ tổng hợp thủ công. Chỉ với vài dòng mã, tôi rút gọn quy trình thành một lần bấm nút và tiết kiệm được rất nhiều thời gian. Từ đó, tôi biết rằng đầu tư thời gian để thành thạo nó sẽ mang lại lợi ích to lớn về năng suất.
Các thuật ngữ quan trọng trong VBA Excel
Trước khi làm việc với VBA, bạn cần hiểu những thuật ngữ và khái niệm chính. Dưới đây là danh sách một số thuật ngữ được dùng nhiều nhất mà bạn sẽ gặp khi bắt đầu tự động hóa tác vụ và xây dựng giải pháp tùy chỉnh trong Excel.
-
Module là vùng chứa mã VBA, nơi lưu trữ các thủ tục và hàm.
-
Object là các khối xây dựng của VBA. Chúng đại diện cho các thành phần như sổ làm việc, trang tính và ô.
-
Procedure là khối mã thực hiện các tác vụ cụ thể, thường được phân loại là thủ tục con (sub-procedure) hoặc hàm.
-
Statement là các câu lệnh trong một thủ tục, chỉ cho Excel (hoặc Word hoặc Access) biết cần thực hiện hành động gì.
-
Variable lưu trữ dữ liệu có thể được sử dụng và thao tác trong mã của bạn.
-
Toán tử logic so sánh giá trị và đưa ra quyết định dựa trên kết quả. Chúng bao gồm các toán tử như
And,OrvàNot.
Bắt đầu với VBA trong Excel
Để bắt đầu dùng VBA, bạn cần truy cập trình soạn thảo VBA. Đây là nơi bạn viết và chỉnh sửa mã VBA. Hãy cùng xem cách vào đó:
Bật tab Developer
Bước đầu tiên là bật tab Developer, vốn thường bị ẩn trên Ribbon. Thực hiện như sau:
- Nhấp chuột phải vào bất kỳ đâu trên Ribbon.

Ribbon trong Excel. Ảnh: Tác giả.
- Chọn tùy chọn Customize the Ribbon....

Tùy chỉnh Ribbon để bật tab Developer. Ảnh: Tác giả.
- Một hộp thoại xuất hiện. Tích chọn Developer và bấm OK.

Chọn tùy chọn Developer. Ảnh: Tác giả.
Giờ bạn có thể thấy tab Developer ở phía trên Ribbon.

Tab Developer đã được bật trên Ribbon. Ảnh: Tác giả.
Mở trình soạn thảo VBA
Khi tab Developer đã được bật, bạn có thể truy cập trình soạn thảo VBA. Để thực hiện, nhấp tab Developer và chọn Visual Basic từ các tùy chọn. Bạn cũng có thể dùng phím tắt ALT + F11 để mở trực tiếp trình soạn thảo VBA.

Trình soạn thảo VBA. Ảnh: Tác giả.
Điều hướng giao diện VBA
Ban đầu, trình soạn thảo VBA có thể trông đáng ngại, nhưng thực ra khá dễ dùng. Hãy hiểu qua một vài khu vực chính:
- Code Pane là nơi bạn viết và chỉnh sửa mã VBA.
- Project Explorer hiển thị dạng cây các dự án và module trong sổ làm việc của bạn.
- Properties Window hiển thị thuộc tính của đối tượng được chọn để bạn tùy chỉnh cài đặt.

Giao diện VBA trong Excel. Ảnh: Tác giả.
Viết mã VBA trong Excel
Giờ bạn đã quen với trình soạn thảo VBA, hãy bắt đầu viết một chút mã. Mã VBA gồm nhiều phần, như thủ tục con và hàm. Đây là các tập lệnh chỉ cho Excel biết phải làm gì. Đừng lo nếu bạn chưa từng lập trình — tôi sẽ hướng dẫn từng bước.
Viết một subroutine VBA
Trước khi viết macro, bạn cần tạo môi trường macro. Thực hiện theo các bước sau:
- Trong trình soạn thảo VBA, chọn Insert > Module. Một module mới sẽ được tạo với tên mặc định Module1.

Chọn Module trong thẻ Insert. Ảnh: Tác giả.
- Bạn có thể đổi tên module trong khung Properties.

Đổi tên module VBA. Ảnh: Tác giả.
Giờ bạn đã biết cách thiết lập môi trường để tạo macro, hãy cùng tạo macro đầu tiên để hiển thị một thông báo. Theo mặc định, cửa sổ mã sẽ mở khi module được tạo. Nếu không, hãy nhấp chuột phải vào module bạn vừa tạo và chọn View Code. Cửa sổ mã sẽ xuất hiện để bạn viết macro.
Ở đây, tôi tạo một macro để hiển thị thông báo Hello, World!. Để làm vậy, tôi viết đoạn mã sau trong khung mã:
Sub ShowMessage()
MsgBox "Hello, World!"
End Sub
Giải thích:
-
Sub là từ khóa cho một thủ tục con, tức một khối mã thực hiện nhiệm vụ cụ thể. Trong VBA, thủ tục con không trả về giá trị.
-
ShowMessage là tên của thủ tục con. Bạn có thể đặt tên tùy ý, miễn tuân theo quy tắc đặt tên của VBA (ví dụ: không có dấu cách, không bắt đầu bằng số).
-
() được dùng để xác định tham số của thủ tục con. Vì tác vụ này không cần tham số, nên cặp ngoặc để trống.
-
MsgBox là hàm dựng sẵn của VBA để hiển thị hộp thoại thông báo trên màn hình.
-
End Sub chỉ ra kết thúc của thủ tục con. Mọi thứ nằm giữa
SubvàEnd Sublà phần mã sẽ chạy khi thủ tục con được gọi. -
Chuỗi văn bản trong VBA được đặt trong dấu ngoặc kép. Ở đây, chúng ta muốn chuỗi
Hello, World!xuất hiện trong hộp thông báo.

Viết macro. Ảnh: Tác giả.
- Giờ là lúc chạy mã. Dùng phím tắt F5. Nếu muốn thực hiện thủ công, vào tab Developer và chọn Macros. Bấm Run.

Chọn Macros trong tab Developer. Ảnh: tác giả.
Giờ bạn có thể thấy hộp thông báo xuất hiện trên trang tính Excel.

Hộp thông báo. Ảnh: Tác giả.
Tìm hiểu về đối tượng trong VBA
Trong VBA, object cho phép bạn điều khiển các thành phần khác nhau trong Excel và tự động hóa tác vụ để quy trình hiệu quả hơn. Có ba object chính: Workbook, Worksheet và Range. Hãy hiểu từng loại qua ví dụ thực tiễn.
Đối tượng Workbook là bất kỳ tệp Excel nào đang mở. Nó cho phép chúng ta thực hiện các thao tác như thêm trang tính mới hoặc lưu các trang tính hiện có trong sổ làm việc. Trong ví dụ này, tôi muốn thêm một trang tính vào trang hiện đang mở rồi lưu lại. Ban đầu tôi có Sheet1. Để thêm trang khác, tôi viết đoạn mã sau:
Sub AddSheetAndSaveWorkbook()
' Adds a new worksheet to the active workbook
ActiveWorkbook.Sheets.Add
' Saves the workbook
ActiveWorkbook.Save
End Sub
Đoạn mã này hoạt động tương tự như trước, nhưng tôi đã thêm chú thích. Chú thích bắt đầu bằng ' và không ảnh hưởng đến mã. Ta chỉ thêm để thuận tiện, giúp mã dễ hiểu hơn.
Bạn có thể thấy một trang tính khác, Sheet2, đã được tạo.

Thêm và lưu trang tính mới trong sổ hiện có bằng VBA. Ảnh: Tác giả.
Đối tượng Worksheet đại diện cho trang tính đang hoạt động trong Excel. Với nó, bạn có thể sửa đổi hay thao tác trên trang đang hoạt động. Ví dụ, tôi muốn đổi tên trang đang hoạt động. Để làm vậy, tôi nhập đoạn mã sau:
Sub RenameActiveSheet()
' Renames the active sheet to "Sales Report".
ActiveSheet.Name = "Sales Report"
End Sub

Đổi tên worksheet bằng VBA. Ảnh: Tác giả.
Giờ Sheet1 đã được đổi tên thành Sales Report.

Đổi tên worksheet Excel bằng VBA. Ảnh: Tác giả.
Đối tượng Range đề cập đến một nhóm ô cụ thể hoặc một ô đơn lẻ mà chúng ta có thể xử lý theo nhu cầu. Trong ví dụ sau, tôi chọn vùng ô từ F3 đến I3 và đổi màu nền. Để làm vậy, tôi viết đoạn mã sau:
Sub FormatRange()
' Selects the range from A1 to C6
Range("F3:I3"). Select
' Changes the background color of the selected range to Green
Selection.Interior.Color = RGB(101, 255, 143)
End Sub

Chọn vùng và đổi màu bằng VBA. Ảnh: Tác giả.
Bạn có thể thấy sự khác biệt ở kết quả.

Đổi màu bằng VBA trong Excel. Ảnh: Tác giả.
Tạo biến trong VBA
Giống các ngôn ngữ lập trình khác, biến trong VBA lưu trữ hai nhóm kiểu dữ liệu chính, số và văn bản. Để sử dụng trong VBA, bạn phải khai báo biến trước bằng từ khóa theo lựa chọn của bạn, tiếp theo là tên biến và kiểu dữ liệu.
Keyword variableName As DataType
Cụ thể:
-
Keywordcó thể làDim,Static,PublicvàPrivate. -
variableNamelà tên bạn chọn cho biến (không có dấu cách). -
Asđược dùng để khai báo kiểu biến. -
DataTypelà kiểu dữ liệu của biến, chẳng hạnInteger.
Khi làm việc với biến, bạn cũng cần tuân theo một số quy tắc:
- Độ dài phải nhỏ hơn 255 ký tự.
- Không được có dấu cách giữa các ký tự.
- Tên không được bắt đầu bằng số.
- Không dùng dấu chấm trong tên.
Kiểu dữ liệu số
Các kiểu dữ liệu số trong VBA dùng để lưu trữ giá trị số.
| Kiểu dữ liệu | Lưu trữ | Khoảng giá trị |
|---|---|---|
| Byte | 1 Byte | Lưu số nguyên từ 0 đến 255 |
| Integer | 2 Byte | Lưu số nguyên trong khoảng -32.768 đến 32.767 |
| Long | 4 Byte | Lưu số nguyên lớn hơn, từ -2.147.483.648 đến 2.147.483.647 |
| Single | 4 Byte | Lưu số thập phân với độ chính xác đơn |
| Double | 8 Byte | Lưu số thập phân với độ chính xác kép |
| Currency | 8 Byte | Lưu số có số chữ số thập phân cố định |
| Variant (text) | Độ dài văn bản + 22 byte | 0 đến 2 tỷ ký tự |
Kiểu dữ liệu phi số
Các kiểu dữ liệu phi số trong VBA lưu trữ giá trị không phải là số.
| Kiểu dữ liệu | Lưu trữ | Khoảng giá trị |
|---|---|---|
| String | Độ dài chuỗi | Lưu văn bản |
| Date | 8 Byte | Lưu ngày và giờ |
| Boolean | 2 Byte | Lưu True hoặc False |
| Variant | 16 Byte | Lưu mọi kiểu dữ liệu và dùng khi chưa biết kiểu trước |
Tự động hóa tác vụ với macro VBA Excel
Macro về bản chất là một chuỗi lệnh được tạo trong VBA để thực hiện các tác vụ lặp lại. Với macro, bạn có thể ghi lại một loạt hành động như định dạng ô, sao chép dữ liệu hoặc tính toán. Sau khi lưu macro, chúng ta có thể áp dụng lại các hành động này chỉ với một lần nhấp. Điều này tiết kiệm thời gian, đặc biệt khi làm việc với tập dữ liệu lớn hoặc tác vụ lặp lại.
Ví dụ, nếu bạn thường định dạng báo cáo theo cùng một cách, bạn có thể ghi một macro áp dụng tất cả các bước định dạng cần thiết thay vì thực hiện thủ công mỗi lần. Sau đó, bạn chỉ cần chạy macro này để định dạng dữ liệu mới. Chúng tôi đã minh họa vài ví dụ cơ bản, nhưng hãy tưởng tượng thực hiện thêm nhiều thao tác nhỏ chỉ với một cú nhấp. Ngay cả khi bạn không có kinh nghiệm lập trình, bạn vẫn có thể tự động hóa các tác vụ thường lệ để tinh gọn quy trình làm việc và giảm nguy cơ sai sót khi lặp lại thao tác thủ công.
Ghi một macro Excel
Hãy xem cách bạn có thể ghi một macro để thực hiện vài thay đổi định dạng:
- Đi tới tab Developer > nút Record Macro.
- Một hộp thoại xuất hiện. Đặt tên cho macro, như tôi đã đặt là FormatCells.
- Gán phím tắt nếu muốn. Tôi gán Ctrl+S.
- Nhấp OK để bắt đầu ghi.
Giờ macro bắt đầu ghi, hãy thực hiện các thao tác bạn muốn tự động hóa. Trong ví dụ này, tôi ghi lại vài thay đổi định dạng cho một bảng đơn giản. Khi hoàn tất, quay lại tab Developer và bấm nút Stop Recording. Bên dưới là macro khi chạy thực tế.
Ghi macro bằng VBA trong Excel. Gif: Tác giả.
Bây giờ, nếu bạn có một tập dữ liệu khác ở trang khác và muốn áp dụng cùng định dạng, thay vì định dạng lại toàn bộ, hãy nhấn phím tắt bạn đã tạo (trong trường hợp của tôi là Ctrl+S). Hoặc vào sheet2 > tab Developer > Macros > Run để chạy thủ công.

Sử dụng macro Excel. Gif: Tác giả.
Chỉnh sửa macro Excel
Sau khi ghi macro, bạn thậm chí có thể tinh chỉnh hoặc tùy biến các thao tác. Cách làm:
- Vào tab Developer và nhấp Visual Basics.
- Trình soạn thảo VBA sẽ xuất hiện. Trong Project Explorer, tìm sổ làm việc chứa macro của bạn.
- Mở rộng thư mục Modules, rồi nhấp đúp vào module chứa macro. Cửa sổ mã sẽ hiển thị mã VBA của macro đã ghi.

Mã macro đã ghi trong Excel. Ảnh: Tác giả.
Mỗi dòng mã hiển thị hành động bạn đã thực hiện trong quá trình ghi. Từ đây, bạn có thể chỉnh sửa mã đã ghi để tùy chỉnh macro theo ý. Trường hợp của tôi, tôi đặt Selection.Font.Bold về False để bỏ định dạng đậm. Khi chỉnh sửa xong, lưu thay đổi bằng cách bấm nút lưu hoặc nhấn Ctrl+S và Run mã để áp dụng thay đổi. 
Tùy chỉnh macro VBA trong Excel. Ảnh: Tác giả.
Sau khi chạy macro, bạn có thể thấy kết quả — các cột trước đó in đậm nay không còn đậm nữa.

Sử dụng macro trong Excel. Ảnh: Tác giả
Viết macro Excel tùy chỉnh
Có những tác vụ nâng cao mà bạn không thể ghi macro. Khi đó, bạn phải viết macro từ đầu. Ví dụ, tôi muốn sao chép dữ liệu từ một worksheet sang worksheet khác. Tôi viết macro tùy chỉnh như sau:
- Mở trình soạn thảo VBA thủ công ở trang đầu tiên hoặc nhấn Alt+F11.
- Chèn một module mới.
- Viết đoạn mã sau trong khung mã.
Sub CopyData()
Sheets("Sheet1").Range("B1:E21").Copy Destination:=Sheets("Sheet2").Range("B1")
End Sub
- Lưu macro và bấm Run.
Bây giờ, bạn có thể thấy dữ liệu từ Sheet1 đã được sao chép sang Sheet2.

Viết macro tùy chỉnh bằng VBA. Gif: Tác giả.
Lời kết
Từ việc tự động hóa các tác vụ lặp lại đến tạo các macro phức tạp, VBA mở ra vô vàn khả năng trong Excel. Khi bạn quen dần với những điều cơ bản, hãy luyện viết mã và từ từ khám phá các tính năng nâng cao của VBA. Hãy nhớ rằng chìa khóa làm chủ VBA — hay bất kỳ ngôn ngữ lập trình nào — là thực hành đều đặn và sẵn sàng thử nghiệm. Để nâng cao kỹ năng, hãy cân nhắc khám phá thêm các tài nguyên sau. Các khóa Data Analysis in Excel và Learn Excel rất phù hợp để tìm hiểu sâu hơn về các tính năng của Excel.
Nếu bạn muốn mở rộng kiến thức lập trình vượt ngoài VBA, hướng dẫn How to Become a Programmer in 2024 cung cấp một lộ trình rõ ràng. Hãy xem nếu bạn quan tâm đến lĩnh vực này. Ngoài ra, khóa học Financial Modeling in Excel rất phù hợp cho những ai muốn xây dựng các mô hình tài chính chi tiết.
Tôi là một chiến lược gia nội dung, yêu thích việc đơn giản hóa các chủ đề phức tạp. Tôi đã giúp các công ty như Splunk, Hackernoon và Tiiny Host tạo nội dung hấp dẫn và giàu thông tin cho khán giả của họ.
Các câu hỏi thường gặp về VBA Excel
Mục đích của câu lệnh Explicit trong VBA là gì?
Explicit giúp đảm bảo mọi biến đều được khai báo rõ ràng trước khi sử dụng, giảm lỗi và giúp mã của bạn dễ bảo trì hơn.
Làm thế nào để đặt mật khẩu bảo vệ mã VBA?
Bạn có thể bảo vệ mã VBA của mình bằng cách vào VBA editor > Tools > VBAProject Properties > thẻ Protection. Đánh dấu chọn Lock project for viewing và đặt mật khẩu.
Sự khác nhau giữa ActiveWorkbook và ThisWorkbook trong VBA là gì?
ActiveWorkbook đề cập đến sổ làm việc hiện đang được kích hoạt, có thể không chứa mã VBA. Thisworkbook đề cập đến sổ làm việc nơi chứa mã VBA, bất kể sổ làm việc nào đang hoạt động.
UserForms trong VBA là gì và dùng như thế nào?
UserForms là các hộp thoại tùy chỉnh trong VBA cho phép người dùng nhập dữ liệu. Chúng có thể được dùng để tạo biểu mẫu tương tác phục vụ nhập liệu, lựa chọn hoặc các tương tác cần giao diện tùy chỉnh.
