Có thể bạn quan tâm: Trong Excel Khi Viết Sai Tên Hàm Trong Tính Toán
Giới thiệu
Visual Basic for Applications (VBA) là ngôn ngữ lập trình tích hợp sẵn trong Microsoft Office, đặc biệt là Excel. Với VBA, người dùng có thể tự động hoá các quy trình, tạo ra các hàm tùy chỉnh, thiết kế giao diện người dùng (UserForm) và xử lý dữ liệu phức tạp mà không cần phải chuyển sang ngôn ngữ lập trình chuyên sâu khác. Bài viết này sẽ cung cấp một tài liệu đầy đủ, chi tiết và dễ hiểu về lập trình VBA trong Excel, giúp bạn nhanh chóng nắm bắt và áp dụng vào công việc thực tế.
Có thể bạn quan tâm: Hướng Dẫn Chi Tiết Cách Chèn Và Chọn Sheet Mới Trong Excel
Tại sao nên học VBA trong Excel?
- Tăng năng suất – Tự động hoá layout, tính toán, báo cáo mà từng thao tác thủ công mất hàng giờ.
- Đa dạng ứng dụng – Từ quản lý ngân sách, phân tích dữ liệu, tới tự động hoá việc gửi email hay tạo báo cáo PowerPoint.
- Khả năng mở rộng – VBA có thể kết nối với các API, cơ sở dữ liệu, và thậm chí gọi các chương trình bên ngoài qua Shell.
- Hỗ trợ bởi cộng đồng – Có hàng ngàn tài liệu, diễn đàn và ví dụ trực tuyến, giúp bạn tìm kiếm giải pháp nhanh chóng.
- Tương thích – VBA chạy trực tiếp trên Excel, không cần cài đặt phần mềm bổ sung nào.
Có thể bạn quan tâm: The Hotel Where We Stayed Last Year Was Excellent
Cấu trúc cơ bản của một macro
Một macro trong VBA thường gồm ba phần: khai báo biến, thực thi logic và kết thúc. Dưới đây là ví dụ đơn giản tạo một macro “HelloWorld”:
Sub HelloWorld() MsgBox "Xin chào, VBA!"
End Sub
- Sub: Từ khóa khai báo thủ tục (subroutine).
- MsgBox: Hàm hiển thị hộp thoại.
- End Sub: Kết thúc thủ tục.
Bạn có thể gán macro này cho một nút trong bảng tính, hoặc chạy trực tiếp từ cửa sổ VBA.
Môi trường phát triển VBA (VBA Editor)
- Mở Visual Basic Editor – Nhấn
ALT + F11. - Project Explorer – Hiển thị các workbook, worksheet và module.
- Properties Window – Hiển thị thuộc tính của đối tượng được chọn.
- Immediate Window – Thử nghiệm nhanh các lệnh bằng cách gõ trực tiếp.
- Debugging Tools –
F8để bước qua từng dòng,Ctrl + Gmở Immediate Window,Step Into/Step Overđể kiểm tra logic.
Các khái niệm quan trọng
- Object: Đối tượng trong Excel (Workbook, Worksheet, Range, Cell).
- Property: Thuộc tính của đối tượng (ví dụ
Range.Value,Worksheet.Name). - Method: Phương thức thực thi hành động (ví dụ
Range.Copy,Worksheet.Activate). - Event: Sự kiện kích hoạt tự động (ví dụ
Worksheet_Change,Workbook_Open). - Variable: Biến lưu trữ dữ liệu, có thể kiểu
Integer,String,Double,Boolean, hoặcObject.
Ví dụ khai báo biến
Dim i As Integer
Dim sText As String
Dim rng As Range
Set rng = Worksheets("Sheet1").Range("A1")
Các hàm và lệnh thường dùng
| Hàm/Lệnh | Mô tả | Ví dụ elif |
|---|---|---|
Range("A1:B2").Copy | Sao chép vùng | Range("A1:B2").Copy Destination:=Range("C1") |
WorksheetFunction.Sum | Tính tổng | Range("A1").Value = WorksheetFunction.Sum(Range("B1:B10")) |
If...Then...Else | Điều kiện | If Range("A1").Value > 100 Then MsgBox "Lớn hơn 100" |
For Each | Duyệt qua từng phần tử | For Each cell In Range("A1:A10"): cell.Value = cell.Value 2: Next cell |
Application.Wait | Tạm dừng thực thi | Application.Wait (Now + TimeValue("00:00:05")) |
Tự động hoá các tác vụ thường gặp
- Tạo báo cáo ≠ tự động hóa
- Thu thập dữ liệu từ nhiều sheet.
- Tính toán tổng tiêu thụ, doanh thu, lợi nhuận.
- Định dạng bảng tunes.
Sub AutoReport() Dim wsSrc As Worksheet, wsDest As Worksheet Dim lastRow As Long, i As Long Set wsSrc = Worksheets("Data") Set wsDest = Worksheets("Report") wsDest.Cells.Clear lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow wsDest.Cells(i - 1, 1).Value = wsSrc.Cells(i, 1).Value wsDest.Cells(i - 1, 2).Value = wsSrc.Cells(i, 2).Value 1.1 Next i
End Sub
- Gửi email tự động
- Kết nối với Outlook, tạo email, đính kèm tệp.
- Sử dụng
Outlook.ApplicationvàMailItem.
Sub SendReport() Dim OutApp As Object, OutMail As Object Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .To = "example@domain.com" .Subject = "Báo cáo hàng tuần" .Body = "Xin chào, vui lòng xem báo cáo đính kèm." .Attachments.Add "C:\Reports\Report.xlsx" .Send End With
End Sub
- Quản lý dữ liệu khách hàng
- Kiểm tra trùng lặp, cập nhật thông tin mới.
- Sử dụng
Dictionaryđể lưu trữ dữ liệu tạm thời.
Viết hàm tùy chỉnh (UDF – User Defined Function)
VBA cho phép bạn tạo hàm giống như các hàm built-in của Excel. Ví dụ tạo hàm tính lãi suất kép:
Function CompoundInterest(principal As Double, rate As Double, periods As Integer) As Double CompoundInterest = principal ((1 + rate) ^ periods)
End Function
Sau khi lưu module, bạn có thể sử dụng =CompoundInterest(1000, 0.05, 10) trong ô.
Sử dụng UserForm để tạo giao diện người dùng

Có thể bạn quan tâm: Trong Excel: Số Sheet Tối Đa Trong 1 Workbook Là Bao Nhiêu?
UserForm cung cấp giao diện trực quan cho macro. Bạn có thể kéo thả các điều khiển như TextBox, ComboBox, Button.
Private Sub btnCalculate_Click() Dim result As Double result = Val(txtPrincipal.Value) ((1 + Val(txtRate.Value) / 100) ^ Val(txtYears.Value)) lblResult.Caption = Format(result, "#,##0.00")
End Sub
Debugging và xử lý lỗi
- On Error GoTo: Xử lý lỗi một cách kiểm soát.
- Debug.Print: Ghi lại giá trị biến vào Immediate Window.
- Step Into: Bước qua từng dòng, kiểm tra logic.
On Error GoTo ErrHandler
' Code có thể gây lỗi
Exit Sub ErrHandler: MsgBox "Lỗi: " & Err.Description, vbCritical Resume Next
Bảo mật và bảo vệ mã
- VBA Project Password: Mở rộng bảo mật file
.xlsm. - Encrypt: Không khuyến nghị cho các macro quan trọng, vì có thể bị giải mã bằng công cụ.
- Disable Macros: Đặt tuỳ chọn “Disable all macros with notification” để tránh macro độc hại.
Kiến thức nâng cao
- API Calls: Gọi hàm Windows API để thực hiện các thao tác hệ thống.
- hield: Sử dụng
XMLHttpRequestđể lấy dữ liệu từ web. - ADO (ActiveX Data Objects): Kết nối tới SQL Server, Access, MySQL.
- Event Handling: Tạo sự kiện tùy chỉnh, đăng ký sự kiện.
- Dynamic Arrays: Khởi tạo mảng động, resize, copy.
Thực hành qua ví dụ thực tế
1. Kiểm tra dữ liệu nhập vào
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then If IsNumeric(Target.Value) Then Target.Font.Color = vbGreen Else Target.Font.Color = vbRed MsgBox "Giá trị phải là số!", vbExclamation End If End If
End Sub
2. Tự động cập nhật bảng dữ liệu từ Google Sheets
- Sử dụng
XMLHTTPđể gọi API Google Sheets, parse JSON, và ghi dữ liệu vào Excel.
3. Tạo báo cáo động theo ngày
- Tự động đổi tên file, lưu vào thư mục theo ngày, gửi mail cho nhà quản lý.
Tài nguyên học tập và cộng đồng
- Microsoft Docs: Tài liệu chính thức, ví dụ, hướng dẫn.
- Stack Overflow: Câu hỏi, giải pháp nhanh.
- Excel VBA Forum: Thảo luận chuyên sâu.
- YouTube: Video hướng dẫn từ cơ bản tới nâng cao.
- Sách: “Excel VBA Programming For Dummies”, “Mastering VBA for Office 2026”.
- Blog:
ExcelIsFun,MrExcel,TechOnTheNet.
Lời khuyên khi học VBA
- Bắt đầu từ những macro đơn giản: Tự động hoá một tác vụ cụ thể.
- Ghi chú kèm theo mã: Giúp nhớ logic, chia sẻ với đồng nghiệp.
- Kiểm tra kỹ lưỡng: Sử dụng
Debug.Print,Immediate Window. - Đặt mục tiêu thực tế: Tự động hoá công việc hàng ngày, giảm thời gian.
- Chia sẻ và học hỏi: Đăng mã lên GitHub, nhận phản hồi.
- Bảo trì mã: Đặt tên hàm, biến rõ ràng; tránh code “đặt chỗ” (magic numbers).
Kết luận
VBA trong Excel không chỉ là công cụ để tự động hoá công việc, mà còn là ngôn ngữ mạnh mẽ giúp bạn khai thác tối đa tính năng của Excel, xây dựng hệ thống báo cáo, phân tích dữ liệu, và thậm chí tích hợp với các công cụ khác. Bằng cách nắm vững các khái niệm cơ bản, thực hành qua các ví dụ thực tế, và tham gia cộng đồng, bạn có thể trở thành một lập trình viên VBA chuyên nghiệp, nâng cao năng suất và giá trị trong công việc. Hãy bắt đầu ngay hôm nay với những macro đơn giản, từ đó dần dần mở rộng sang các dự án phức tạp hơn, và khám phá những tiềm năng vô hạn mà արդյունավետ VBA mang lại.

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ẻ.
