Có thể bạn quan tâm: Lập Công Thức Tính Đơn Giá Trong Excel
Giới thiệu
Microsoft Excel là một công cụ vô cùng mạnh mẽ trong việc xử lý dữ liệu, phân tích số liệu và tạo báo cáo. Trong thực tế, nhiều người dùng thường gặp phải những tình huống mà công cụ Excel mặc định không đáp ứng được, chẳng hạn như tự động hoá quy trình làm việc, xử lý dữ liệu phức tạp, hay tạo giao diện tùy chỉnh cho người dùng cuối. Đó là lúc VBA (Visual Basic for Applications) xuất hiện như một giải pháp tối ưu. VBA là ngôn ngữ lập trình tích hợp sẵn trong Office, cho phép người dùng tạo macro, viết hàm tùy chỉnh, và tương tác sâu với các đối tượng trong Excel.
Bài viết này sẽ giúp bạn bắt đầu với lập trình VBA trong Excel bằng cách giới thiệu các khái niệm cơ bản, hướng dẫn cài đặt môi trường lập trình, ví dụ thực tế, và mẹo để tránh những lỗi thường gặp. Bạn sẽ học được cách tạo macro đơn giản, thao tác với ô, bảng tính, và thậm chí làm cho Excel trở thành một “công cụ tự động hoá” chuyên nghiệp.
Có thể bạn quan tâm: Hướng Dẫn Chi Tiết: Làm Bảng Xếp Hạng Bóng Đá Bằng Excel – Từ Cơ Bản Tới Nâng Cao
1. Tại sao cần biết VBA trong Excel?
Tự động hoá công việc lặp đi lặp lại
Khi bạn phải thực hiện các thao tác như nhập dữ liệu, lọc, tính tổng, hoặc tạo báo cáo hàng ngày, VBA giúp thực hiện chúng chỉ trong vài giây thay vì hàng giờ.Mở rộng tính năng của Excel
Bạn có thể tạo các hàm tùy chỉnh (UDF), giao diện tùy chỉnh (user forms), hoặc lập trình logic phức tạp mà Excel không hỗ trợ trực tiếp.Tương tác với các ứng dụng khác
VBA có thể điều khiển Word, Outlook, Access, và thậm chí các phần mềm bên ngoài qua COM, giúp xây dựng quy trình công việc liên quan đến nhiều ứng dụng.Tăng cường hiệu suất làm việc
Thay vì thao tác thủ công, bạn có thể lập trình một macro để thực hiện hàng trăm thao tác trong một lần chạy, giảm sai sót và tăng độ chính xác.
Có thể bạn quan tâm: Lập Bảng Tiến Độ Công Việc Bằng Excel: Hướng Dẫn Chi Tiết Cho Người Mới Bắt Đầu
2. Cài đặt và chuẩn bị môi trường lập trình
2.1 Bật Tab “Developer” (Nhà phát triển)
- Mở Excel.
- Vào
File > Options > Customize Ribbon. - Đánh dấu vào
Developertrong danh sách bên phải. - Nhấn
OK.
Sau khi hoàn thành, bạn sẽ thấy tab “Developer” xuất hiện trên thanh Ribbon.
2.2 Mở Visual Basic Editor (VBE)
- Bạn có thể truy cập VBE bằng cách nhấn
Alt + F11hoặc vàoDeveloper > Visual Basic.
2.3 Kiểm tra phiên bản VBA
- Trong VBE, vào
Help > About Microsoft Visual Basicđể xem thông tin phiên bản. - Phiên bản mới nhất sẽ hỗ trợ những tính năng hiện đại hơn, như
CallByName,WithEvents, v.v.
3. Kiến thức cơ bản của VBA
3.1 Cấu trúc của một macro
Sub TenMacro() ' Đoạn mã thực thi
End Sub
Subkhai báo một thủ tục không trả về giá trị.End Subđánh dấu kết thúc thủ tục.
3.2 Biến và kiểu dữ liệu
| Kiểu dữ liệu | Mô tả | Ví dụ |
|---|---|---|
Integer | Số nguyên 16-bit | Dim age As Integer |
Long | Số nguyên 32-bit | Dim cnt As Long |
Double | Số thực | Dim price As Double |
String | Chuỗi ký tự | Dim name As String |
Boolean | Giá trị đúng/sai | Dim ok As Boolean |
Variant | Đa dạng kiểu | Dim anyVal As Variant |
3.3 Điều kiện và vòng lặp
- If…Then…Else
If score >= 90 Then grade = "A"
ElseIf score >= 80 Then grade = "B"
Else grade = "C"
End If
- Select Case
Select Case month Case 1, 2, 12 season = "Winter" Case 3 To 5 season = "Spring" Case 6 To 8 season = "Summer" Case 9 To 11 season = "Autumn"
End Select
- For…Next
For i = 1 To 10 Cells(i, 1).Value = i
Next i
- While…Wend / Do…Loop
Do While i <= 10 Cells(i, 1).Value = i i = i + 1
Loop
3.4 Ghi chú (Comment)
- Dùng dấu
'để viết chú thích. - Dùng
Ctrl + 'để chuyển đổi giữa dòng mã và dòng chú thích.
4. Thao tác với ô, phạm vi dữ liệu (Range)
4.1 Truy cập ô

Có thể bạn quan tâm: Lập Trình Vba Trong Excel: Phân Tu Hướng – Bí Quyết Tối Ưu Hóa Công Việc
Range("A1").Value = "Hello"
Range("B1").Value = 123
4.2 Truy cập ô dựa trên biến
Dim rowNum As Long: rowNum = 5
Range("A" & rowNum).Value = "Row " & rowNum
4.3 Định danh phạm vi
Dim rng As Range
Set rng = Range("A1:C10")
4.4 Thao tác với phạm vi
- Kop dữ liệu
vb Range("A1:C10").Copy Destination:=Range("E1") - Xóa nội dung
vb Range("A1:C10").ClearContents - Định dạng
vb Range("A1:C10").Font.Bold = True Range("A1:C10").Interior.Color = RGB(255, 255, 0) ' Vàng
5. Ví dụ thực tế: Tự động hoá báo cáo
Giả sử bạn có dữ liệu bán hàng trong bảng Sales và muốn tạo báo cáo tổng hợp hàng tháng.
5.1 Tạo bảng dữ liệu mẫu
| Date | Product | Quantity | Price |
|---|---|---|---|
| 2026-01-01 | A | 10 | 50 |
| 2026-01-02 | B | 5 | 100 |
| 2026-01-05 | A | 7 | 50 |
| 2026-02-01 | C | 3 | 200 |
| 2026-02-10 | B | 8 | 100 |
5.2 Macro tổng hợp
Sub CreateMonthlyReport() Dim wsData As Worksheet, wsReport As Worksheet Dim lastRow As Long, i As Long Dim monthKey As String Set wsData = ThisWorkbook.Sheets("Sales") Set wsReport = ThisWorkbook.Sheets.Add(After:=wsData) wsReport.Name = "Monthly Report" ' Tiêu đề wsReport.Range("A1").Value = "Month" wsReport.Range("B1").Value = "Total Quantity" wsReport.Range("C1").Value = "Total Revenue" ' Tìm dòng cuối cùng lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row ' Loop qua dữ liệu For i = 2 To lastRow monthKey = Format(wsData.Cells(i, "A").Value, "yyyy-mm") Dim qty As Long, rev As Double qty = wsData.Cells(i, "C").Value rev = wsData.Cells(i, "C").Value wsData.Cells(i, "D").Value ' Kiểm tra có có hàng trong báo cáo chưa Dim found As Range Set found = wsReport.Columns("A").Find(What:=monthKey, LookIn:=xlValues, LookAt:=xlWhole) If found Is Nothing Then ' Thêm dòng mới Dim newRow As Long newRow = wsReport.Cells(wsReport.Rows.Count, "A").End(xlUp).Row + 1 wsReport.Cells(newRow, "A").Value = monthKey wsReport.Cells(newRow, "B").Value = qty wsReport.Cells(newRow, "C").Value = rev Else ' Cập nhật tổng found.Offset(0, 1).Value = found.Offset(0, 1).Value + qty found.Offset(0, 2).Value = found.Offset(0, 2).Value + rev End If Next i MsgBox "Báo cáo đã được tạo thành công!"
End Sub
Ghi chú: Macro này tự động tạo một sheet mới, tính tổng số lượng và doanh thu theo tháng, và cập nhật dữ liệu một cách linh hoạt.
6. Thêm tính năng nâng cao
6.1 Tạo UserForm (biểu mẫu người dùng)
- Vào VBE →
Insert > UserForm. - Thêm các điều khiển như TextBox, ComboBox, CommandButton.
- Viết mã cho sự kiện
CommandButton.Clickđể xử lý dữ liệu.
Ví dụ:
Private Sub btnSubmit_Click() Dim txtName As String txtName = Me.txtName.Text Worksheets("Sheet1").Cells(1, 1).Value = txtName Me.Hide
End Sub
6.2 Sử dụng Application.OnTime
Macro có thể được chạy tự động theo lịch trình.
Sub ScheduleDailyReport() Application.OnTime Now + TimeValue("08:00:00"), "CreateMonthlyReport"
End Sub
6.3 Giao tiếp với Outlook (gửi email)
Sub SendReportByEmail() Dim outApp As Object, outMail As Object Set outApp = CreateObject("Outlook.Application") Set outMail = outApp.CreateItem(0) ' 0 = MailItem With outMail .To = "recipient@example.com" .Subject = "Báo cáo hàng ngày" .Body = "Xin vui lòng xem báo cáo đính kèm." .Attachments.Add ThisWorkbook.FullName .Send End With Set outMail = Nothing Set outApp = Nothing
End Sub
7. Mẹo và lưu ý khi lập trình VBA
| Mẹo | Mô tả |
|---|---|
| Ghi chú chi tiết | Viết comment rõ ràng, làm cho macro dễ bảo trì. |
Sử dụng Option Explicit | Bắt buộc khai báo biến trước khi sử dụng, tránh lỗi kiểu dữ liệu. |
Tránh dùng Select và Activate | Truy cập trực tiếp vào đối tượng (ví dụ Range("A1").Value) giúp macro nhanh hơn và ít lỗi. |
| Xử lý lỗi | Sử dụng On Error Resume Next hoặc On Error GoTo để quản lý lỗi. |
| Bảo mật | Khi chia sẻ macro, hãy kiểm tra tính bảo mật, tránh mã độc. |
Sử dụng With | Giảm độ lặp lại khi thao tác nhiều thuộc tính của một đối tượng. |
| Kiểm thử | Chạy macro trên dữ liệu mẫu trước khi triển khai thực tế. |
8. Cách chia sẻ macro
- Lưu file dưới định dạng
.xlsm(macro-enabled workbook). - Chia sẻ qua OneDrive, SharePoint để đồng bộ.
- Quản lý quyền truy cập: Cho phép người dùng chạy macro nhưng ngăn chặn sửa đổi.
- Đóng gói dưới Add-in (
.xlam) nếu muốn tái sử dụng trên nhiều workbook.
9. Tham khảo tài nguyên hữu ích
- Microsoft Docs: Tài liệu chính thức về VBA.
- Excel Easy: Hướng dẫn chi tiết, ví dụ minh hoạ.
- Stack Overflow: Câu hỏi & câu trả lời về lỗi, cách viết macro.
- Chuyên mục “Excel VBA” trên YouTube: Video hướng dẫn từng bước.
- Sách “Excel VBA Programming For Dummies”: Bài học từ cơ bản tới nâng cao.
10. Kết luận
Lập trình VBA trong Excel không chỉ giúp bạn tiết kiệm thời gian, giảm sai sót mà còn mở rộng năng lực công cụ làm việc của mình. Bằng cách nắm vững các khái niệm cơ bản, thực hành với các ví dụ thực tế, và áp dụng những mẹo quan trọng, bạn sẽ nhanh chóng trở thành một “người chạm” xuất sắc với Excel.
Hãy bắt đầu ngay hôm nay với một macro nhỏ, dần dần mở rộng ra các dự án lớn hơn. Chúc bạn thành công và tận hưởng niềm vui của việc tự động hoá công việc!

Tiến sĩ Lê Thống Nhất sinh năm 1955 tại Nghệ An, là nhà giáo, nhà báo và doanh nhân trong lĩnh vực giáo dục. Ông từng giảng dạy Toán học tại Trường THPT Chuyên Phan Bội Châu và đảm nhiệm nhiều vai trò trong ngành giáo dục, từ viết sách, biên soạn tài liệu đến sáng lập các dự án hỗ trợ học tập trực tuyến.
Ông là người sáng lập BigSchool – nền tảng giáo dục trực tuyến kết nối giáo viên và học sinh cả nước. Ngoài ra, ông còn nổi tiếng với vai trò tác giả, diễn giả truyền cảm hứng và khách mời trên nhiều chương trình truyền hình, trong đó có “Ai là triệu phú” trên truyền hình VTV.
Trong suốt sự nghiệp, Tiến sĩ Lê Thống Nhất đã nhận nhiều giải thưởng giáo dục và được biết đến như một người luôn đổi mới, ứng dụng công nghệ vào dạy và học, góp phần lan tỏa tri thức và niềm say mê học tập cho thế hệ trẻ.
