
Nếu thường xuyên sử dụng Excel, có lẽ bạn đã quen thuộc với việc viết công thức sử dụng các hàm như SUM, VLOOKUP hay IF. Bạn thậm chí có thể đã thử ghi macro để tăng tốc các thao tác định dạng lặp đi lặp lại. Nhưng đến một lúc nào đó, các công thức cơ bản và bộ ghi macro sẽ không còn đủ nữa. Để thực sự khai phá sức mạnh của Excel và tự động hóa các quy trình làm việc phức tạp, bạn cần bước ra sau bức màn và tự viết mã của riêng mình.
Chào mừng đến với Visual Basic for Applications (VBA), ngôn ngữ lập trình tích hợp sẵn của Excel. Việc học VBA cho phép bạn tương tác với Excel ở mức độ cơ bản, biến một bảng tính tĩnh thành một ứng dụng phần mềm động. Trong bài hướng dẫn này, chúng tôi sẽ đề cập đến các khái niệm nền tảng của VBA—biến, vòng lặp và điều kiện—đồng thời hướng dẫn bạn từng bước để viết chương trình đầu tiên có thể hoạt động được.
Trước khi đi sâu vào viết mã, bạn có thể tự hỏi tại sao phải bận tâm học một ngôn ngữ lập trình trong khi Excel đã được trang bị đầy đủ các tính năng mạnh mẽ. Nếu bạn mới bắt đầu, chúng tôi khuyên bạn nên thành thạo những điều cơ bản trước. Bạn có thể xem lại Hướng dẫn nhập môn Excel toàn tập cho người mới bắt đầu năm 2025 của chúng tôi để đảm bảo bạn có một nền tảng vững chắc.
Tuy nhiên, một khi bạn đã làm quen với các công cụ mặc định của Excel, VBA sẽ mang lại những lợi thế vô cùng lớn:
Để viết chương trình Excel đầu tiên, bạn cần truy cập vào thẻ Developer, vốn bị ẩn theo mặc định.
Bây giờ bạn sẽ thấy thẻ Developer trên Dải băng của mình. Thẻ này là trung tâm điều khiển cho mọi thứ liên quan đến lập trình. Từ đây, hãy nhấp vào nút Visual Basic (hoặc nhấn Alt + F11 trên bàn phím) để mở Trình soạn thảo Visual Basic (VBE). Đây là môi trường để bạn viết, chỉnh sửa và thử nghiệm mã của mình.
Khi lần đầu tiên mở VBE, trông nó có vẻ hơi đáng sợ, giống như các phần mềm từ thập niên 1990. Đừng lo lắng; bạn chỉ cần tập trung vào một vài khu vực chính:
Để bắt đầu nhập mã, bạn phải chèn một mô-đun. Nhấp chuột phải vào sổ làm việc của bạn trong Project Explorer, chọn Insert (Chèn), rồi nhấp vào Module. Một màn hình trắng tinh sẽ xuất hiện. Bây giờ bạn đã sẵn sàng để viết mã.
Trước khi viết chương trình hoàn chỉnh, bạn cần hiểu ba trụ cột của lập trình cơ bản trong VBA: Biến (Variables), Điều kiện (Conditions) và Vòng lặp (Loops).
Hãy coi biến như một hộp lưu trữ tạm thời trong bộ nhớ máy tính. Bạn sử dụng biến để chứa dữ liệu có thể thay đổi khi chương trình chạy. Trong VBA, phương pháp tốt nhất là "khai báo" các biến của bạn bằng câu lệnh Dim (viết tắt của Dimension), để báo cho Excel biết hộp lưu trữ này sẽ chứa loại dữ liệu nào.
| Kiểu Dữ liệu | Chứa nội dung gì | Ví dụ Khai báo |
|---|---|---|
| String | Các ký tự văn bản. | Dim employeeName As String |
| Integer | Số nguyên từ -32,768 đến 32,767. | Dim rowCount As Integer |
| Long | Các số nguyên lớn hơn (luôn dùng kiểu này để đếm số hàng trong Excel hiện đại). | Dim lastRow As Long |
| Double | Số có phần thập phân (ví dụ: tiền tệ, tỷ lệ phần trăm). | Dim totalSales As Double |
| Boolean | Giá trị True (Đúng) hoặc False (Sai). | Dim isComplete As Boolean |
| Range | Một đối tượng đại diện cho một ô hoặc một nhóm ô. | Dim targetCell As Range |
VBA hoạt động bằng cách thao tác với các "Đối tượng" (Objects). Excel có một hệ thống phân cấp đối tượng nghiêm ngặt mà bạn phải điều hướng qua để cho VBA biết chính xác cần thay đổi điều gì. Cấu trúc phân cấp đi từ bao quát đến cụ thể:
Application (Ứng dụng) > Workbook (Sổ làm việc) > Worksheet (Trang tính) > Range (Vùng)
Ví dụ: nếu bạn muốn thay đổi giá trị của ô A1 trên Sheet1, về mặt kỹ thuật, câu lệnh VBA sẽ trông như thế này: Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value = "Hello". May mắn thay, nếu bạn đang làm việc trong sổ làm việc đang kích hoạt, bạn có thể rút gọn thành Range("A1").Value = "Hello".
Giống như hàm IF mặc định, điều kiện cho phép mã của bạn đưa ra quyết định dựa trên các tiêu chí. Nếu một điều kiện được đáp ứng, mã sẽ thực hiện một việc; nếu không, nó sẽ thực hiện một việc khác.
If Range("A1").Value > 100 Then
Range("B1").Value = "Over Budget"
Else
Range("B1").Value = "On Track"
End If
Vòng lặp là phép thuật thực sự của VBA. Chúng cho phép bạn thực thi đi thực thi lại cùng một khối lệnh mà không cần phải viết nó ra hàng trăm lần. Vòng lặp phổ biến nhất là vòng lặp For...Next.
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = "Test Data"
Next i
Trong ví dụ này, mã sẽ lặp lại 10 lần, điền vào các ô từ A1 đến A10 (Hàng i, Cột 1) bằng cụm từ "Test Data".
Hãy kết hợp tất cả các khái niệm này lại với nhau để giải quyết một vấn đề trong thực tế. Tưởng tượng bạn có danh sách số tiền doanh số ở Cột A, từ hàng 2 xuống đến hàng 20. Bạn muốn viết một chương trình lặp qua các con số này, kiểm tra xem số tiền doanh số có lớn hơn $1,000 hay không, và nếu đúng như vậy, viết "High Performer" vào Cột B và tô sáng ô bằng màu vàng.
Nhập đoạn mã sau đây chính xác như những gì được hiển thị vào mô-đun trống của bạn:
Sub AnalyzeSales()
' 1. Declare variables
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
' 2. Define the worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' 3. Find the last row with data in Column A
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 4. Loop from row 2 to the last row
For i = 2 To lastRow
' 5. Apply the condition
If ws.Cells(i, 1).Value > 1000 Then
' Mark as high performer in Column B
ws.Cells(i, 2).Value = "High Performer"
' Highlight Column B cell yellow
ws.Cells(i, 2).Interior.Color = vbYellow
' Make the text bold
ws.Cells(i, 2).Font.Bold = True
Else
' If not over 1000, leave standard text
ws.Cells(i, 2).Value = "Standard"
End If
Next i
' 6. Alert the user the macro is done
MsgBox "Sales analysis is complete!", vbInformation
End Sub
Sub AnalyzeSales(): "Sub" là viết tắt của Subroutine (Chương trình con). Dòng này tạo ra một macro mới tên là AnalyzeSales.') sẽ chuyển sang màu xanh lá cây. Đây là các chú thích (comment) dành cho bạn; máy tính sẽ bỏ qua chúng.Dim được sử dụng để khai báo trang tính, hàng cuối cùng (kiểu Long) và biến đếm cho vòng lặp (kiểu Long).Set ws = ...: Bởi vì trang tính là một Đối tượng, chúng ta sử dụng từ "Set" để gán nó cho biến của mình.lastRow = ...: Đây là một thủ thuật VBA kinh điển. Nó đi đến tận cùng của bảng tính (Rows.Count), nhìn ngược lên (xlUp) cho đến khi gặp dữ liệu và trả về số hàng đó. Điều này giúp mã của chúng ta mang tính động, tự động điều chỉnh bất kể có bao nhiêu dữ liệu được thêm vào!For i = 2 To lastRow: Bắt đầu vòng lặp ở hàng 2 (bỏ qua phần tiêu đề) và kết thúc ở bất kỳ hàng cuối cùng nào.ws.Cells(i, 1) tham chiếu đến ô ở hàng i, cột 1 (Cột A). Chúng ta kiểm tra xem nó có lớn hơn 1000 hay không.Value, Interior.Color và Font.Bold của nó.Next i: Yêu cầu Excel quay lại và tăng i thêm 1 để kiểm tra hàng tiếp theo.MsgBox: Một tín hiệu hình ảnh thú vị kích hoạt một cửa sổ bật lên (pop-up) cho người dùng biết mã đã thực thi xong thành công.Để chạy mã của bạn, hãy nhấp vào bất kỳ đâu giữa các dòng Sub và End Sub trong VBE rồi nhấn phím F5 trên bàn phím, hoặc nhấp vào hình tam giác màu xanh lá cây "Play" trên thanh công cụ trên cùng.
Mẹo chuyên gia để gỡ lỗi (Debugging): Thay vì nhấn F5, hãy thử nhấn F8 nhiều lần. Phím F8 cho phép bạn chạy mã từng dòng một. Nó sẽ tô vàng dòng lệnh đang được kích hoạt, cho phép bạn quan sát chính xác những gì Excel đang thực hiện ở hậu trường. Đây là cách tốt nhất để học và khắc phục sự cố khi một chương trình không hoạt động chính xác.
Xin chúc mừng! Bạn vừa viết phần mềm tự động hóa đầu tiên của mình. Bằng cách hiểu về biến, vòng lặp và điều kiện, bạn đã mở khóa được những nguyên tắc cơ bản cần thiết để tự động hóa báo cáo bằng Excel VBA. Thông qua thực hành, bạn có thể mở rộng logic này để lặp qua toàn bộ sổ làm việc, gộp dữ liệu từ nhiều tệp và làm sạch các tập dữ liệu lộn xộn chỉ bằng một cú nhấp chuột.
Khi tiếp tục hành trình của mình, hãy nhớ rằng VBA không phải là công cụ duy nhất trong bộ công cụ dữ liệu hiện đại. Nếu bạn thích giao diện trực quan hơn là viết mã, bạn có thể muốn tìm hiểu về tự động hóa Excel không cần VBA: Power Automate.
Hơn nữa, nếu việc tự viết mã từ đầu, giải mã các lỗi VBA hay xây dựng các công thức lồng nhau phức tạp như INDEX và MATCH khiến bạn cảm thấy quá tải, bạn không cần phải vật lộn một mình. Bạn luôn có thể sử dụng GPTExcel. Chỉ cần mô tả điều bạn cần bằng ngôn ngữ tự nhiên (ví dụ: "Viết một macro VBA xóa tất cả các ô màu vàng trên Sheet1"), và trợ lý AI sẽ tự động tạo ra đoạn mã hoặc công thức chính xác ngay lập tức.
Không cần bất kỳ kinh nghiệm viết mã nào trước đó. VBA được thiết kế đặc biệt để dễ tiếp cận đối với các chuyên gia kinh doanh. Việc hiểu được logic cơ bản của Excel, giống như cách hàm IF hoạt động, sẽ tạo cho bạn một khởi đầu tuyệt vời khi học cú pháp VBA.
Theo mặc định, sổ làm việc tiêu chuẩn của Excel (.xlsx) không thể lưu macro. Khi viết mã VBA, bạn phải lưu tệp của mình dưới định dạng "Excel Macro-Enabled Workbook" (.xlsm). Nếu bạn cố gắng lưu tệp dưới dạng sổ làm việc thông thường, Excel sẽ cảnh báo rằng đoạn mã của bạn sẽ bị xóa đi.
Mặc dù Microsoft đang đầu tư mạnh vào nền tảng đám mây Power Automate và gần đây đã tích hợp Python vào Excel, nhưng VBA sẽ không biến mất. Hàng triệu doanh nghiệp vẫn phụ thuộc vào các macro VBA kế thừa. Nó vẫn là cách nhanh nhất và đáng tin cậy nhất để thực thi tự động hóa cục bộ, trên cấp độ máy tính cá nhân ngay bên trong tệp Excel.
Để macro của bạn thân thiện với người dùng, hãy đi đến thẻ Developer, nhấp vào Insert (Chèn) và chọn biểu tượng Button (Nút) trong mục Form Controls (Kiểm soát Biểu mẫu). Vẽ nút trên trang tính của bạn. Một hộp thoại sẽ xuất hiện ngay lập tức yêu cầu bạn gán một macro—chọn macro mới của bạn từ danh sách, nhấp OK và giờ đây bạn có thể chạy đoạn mã của mình chỉ bằng một cú nhấp chuột đơn giản.
Khám phá cách tự động hóa các tác vụ Excel không cần VBA bằng Power Automate. Học cách tạo luồng kích hoạt theo sự kiện, xử lý dữ liệu và kết nối ứng dụng khác.
Khám phá cách xây dựng hệ thống báo cáo tự động trong Excel bằng VBA. Học cách trích xuất dữ liệu, chèn công thức, định dạng ô và xuất báo cáo với mã code chi tiết từng bước.
Bắt đầu lập trình trong Excel với VBA. Tìm hiểu về thẻ Nhà phát triển, biến, vòng lặp, điều kiện và cách viết macro đầu tiên của bạn từ con số không.