Các Mã Lệnh Trong Excel: Hướng Dẫn Toàn Diện Từ Cơ Bản Đến Nâng Cao

Excel không chỉ là một công cụ tính toán đơn thuần mà còn là một môi trường lập trình mạnh mẽ, cho phép người dùng tự động hoá các tác vụ lặp lại, xử lý dữ liệu phức tạp và tạo ra các giải pháp kinh doanh tùy chỉnh. Trong Excel, “các mã lệnh” thường được hiểu là Macro (được viết bằng ngôn ngữ VBA – Visual Basic for Applications) và định dạng công thức (công thức Excel, hàm, và các hàm người dùng định nghĩa – UDF). Bài viết này sẽ cung cấp một hướng dẫn chi tiết, từ những khái niệm cơ bản, cách tạo và chạy macro, cho tới các kỹ thuật lập trình nâng cao, giúp bạn khai thác tối đa sức mạnh của các mã lệnh trong Excel.

Mục lục bài viết

1. Giới Thiệu Tổng Quan Về VBA và Macro Trong Excel

1.1. VBA là gì?

  • Visual Basic for Applications (VBA) là một ngôn ngữ lập trình được tích hợp sẵn trong các ứng dụng Microsoft Office (Excel, Word, PowerPoint, Access…).
  • VBA cho phép người dùng tự động hoá các thao tác, tương tác với các đối tượng (Workbook, Worksheet, Range, Chart…) và tạo ra các giao diện người dùng (UserForm, Control).

1.2. Macro là gì?

  • Macro là một tập hợp các lệnh VBA được ghi lại hoặc viết tay, có thể thực thi một chuỗi hành động một cách tự động.
  • Macro thường được lưu trong Module (một loại đối tượng trong VBA Project) và có thể được gán cho nút, hình ảnh, phím tắt để dễ dàng kích hoạt.

1.3. Lợi ích khi sử dụng macro

Lợi íchMô tả
Tiết kiệm thời gianTự động hoá các tác vụ lặp đi lặp lại (nhập dữ liệu, định dạng, tính toán)
Độ chính xác caoGiảm thiểu lỗi do nhập liệu thủ công
Tùy biến quy trìnhTạo quy trình làm việc chuẩn hoá cho toàn bộ tổ chức
Tích hợp dữ liệuKết nối và trích xuất dữ liệu từ các nguồn khác (SQL, Web, API)
Tạo giao diện người dùngThiết kế form nhập liệu, báo cáo tùy chỉnh

2. Cài Đặt và Chuẩn Bị Môi Trường Lập Trình

2.1. Bật tab “Developer”

  1. Vào File → Options → Customize Ribbon.
  2. Trong danh sách “Main Tabs”, đánh dấu Developer và nhấn OK.

2.2. Mở cửa sổ VBA Editor

  • Nhấn Alt + F11 hoặc chọn Developer → Visual Basic.

2.3. Tạo một workbook mới với macro

  1. File → New → Blank workbook.
  2. Lưu file dưới định dạng Excel Macro-Enabled Workbook (.xlsm) để macro có thể chạy.

2.4. Bảo mật macro

  • Vào File → Options → Trust Center → Trust Center Settings → Macro Settings.
  • Chọn “Enable all macros” (chỉ trong môi trường thử nghiệm) hoặc “Disable all macros with notification” để được nhắc khi mở file có macro.

3. Cấu Trúc Cơ Bản Của Một Macro VBA

Sub TenMacro() ' Khai báo biến Dim ws As Worksheet Dim rng As Range ' Gán đối tượng Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' Chọn vùng dữ liệu Set rng = ws.Range("A2:A10") ' Thực hiện một hành động (ví dụ: thay đổi màu nền) rng.Interior.Color = RGB(255, 255, 0) ' Màu vàng ' Thông báo hoàn thành MsgBox "Đã tô màu vàng cho vùng A2:A10!", vbInformation
End Sub
  • Sub: Định nghĩa một thủ tục (procedure) không trả về giá trị.
  • Function: Định nghĩa một hàm trả về giá trị, có thể dùng trong công thức Excel.
  • Dim: Khai báo biến.
  • Set: Gán đối tượng cho biến.
  • ThisWorkbook: Workbook chứa macro hiện tại.
  • MsgBox: Hiển thị hộp thoại thông báo.

4. Các Lệnh Cơ Bản Thường Dùng

Nhóm lệnhMô tảVí dụ
Quản lý Workbook/WorksheetMở, lưu, đóng, tạo sheetWorkbooks.Open "C:\Data.xlsx"
Xử lý RangeĐọc/ghi giá trị, định dạng, sao chépRange("B2").Value = 100
Vòng lặpFor…Next, Do…Loop, WhileFor i = 1 To 10: Cells(i,1).Value = i: Next i
Điều kiệnIf…Then…Else, Select CaseIf Cells(1,1).Value > 0 Then …
Sự kiệnWorksheet_Change, Workbook_OpenPrivate Sub Worksheet_Change(ByVal Target As Range)
Làm việc với FileFileSystemObject, Dir, KillKill "C:\Temp\oldfile.txt"
Tương tác với người dùngInputBox, MsgBox, UserFormInputBox("Nhập tên:", "Tên")
Kết nối dữ liệuADODB, DAO, QueryTablesSet cn = New ADODB.Connection

5. Ghi Lại Macro (Macro Recorder)

5.1. Cách ghi macro

  1. Developer → Record Macro.
  2. Đặt tên (không có dấu cách) và chọn Store macro in: This Workbook.
  3. Thực hiện các thao tác trên sheet (định dạng, sao chép, tính toán…).
  4. Nhấn Stop Recording.

5.2. Phân tích mã đã ghi

Sau khi dừng ghi, mở VBA Editor để xem mã. Thông thường, macro ghi lại sẽ chứa rất nhiều Select/Selection không cần thiết, có thể tối ưu hoá:

' Mã ghi lại
Range("A1").Select
Selection.Font.Bold = True ' Tối ưu
Range("A1").Font.Bold = True

5.3. Khi nào nên viết tay thay vì ghi

  • Khi cần điều kiện logic, vòng lặp, xử lý lỗi.
  • Khi muốn tối ưu hiệu năng (tránh sử dụng Select/Activate).
  • Khi tạo hàm người dùng định nghĩa (UDF) để dùng trong công thức.

6. Viết Hàm Người Dùng Định Nghĩa (UDF)

UDF cho phép bạn tạo các hàm tùy chỉnh, có thể gọi trực tiếp trong ô Excel như hàm chuẩn.

6.1. Cú pháp cơ bản

Function TenHam(ByVal ThamSo1 As Double, Optional ThamSo2 As Double = 0) As Double TenHam = ThamSo1 + ThamSo2
End Function
  • Function trả về giá trị.
  • Optional cho phép tham số không bắt buộc, có giá trị mặc định.

6.2. Ví dụ thực tế: Hàm tính trung bình có trọng số

Function TrungBinhTrongSo(ValRange As Range, WeightRange As Range) As Double Dim i As Long, SumVal As Double, SumWeight As Double If ValRange.Count <> WeightRange.Count Then TrungBinhTrongSo = CVErr(xlErrRef) ' Trả lỗi nếu kích thước không khớp Exit Function End If For i = 1 To ValRange.Count SumVal = SumVal + ValRange.Cells(i).Value WeightRange.Cells(i).Value SumWeight = SumWeight + WeightRange.Cells(i).Value Next i If SumWeight = 0 Then TrungBinhTrongSo = CVErr(xlErrDiv0) Else TrungBinhTrongSo = SumVal / SumWeight End If
End Function
  • Sử dụng trong Excel: =TrungBinhTrongSo(A2:A10, B2:B10)

7. Xây Dựng Giao Diện Người Dùng (UserForm)

7.1. Tạo UserForm

  1. Trong VBA Editor, Insert → UserForm.
  2. Thêm các Control: TextBox, ComboBox, ListBox, CommandButton.

7.2. Mã ví dụ: Form nhập dữ liệu khách hàng

Các Mã Lệnh Trong Excel
Các Mã Lệnh Trong Excel
Private Sub btnLuu_Click() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("KhachHang") Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1 ws.Cells(lastRow, 1).Value = txtMaKH.Text ws.Cells(lastRow, 2).Value = txtTenKH.Text ws.Cells(lastRow, 3).Value = txtSDT.Text ws.Cells(lastRow, 4).Value = txtDiaChi.Text MsgBox "Đã lưu thông tin khách hàng!", vbInformation Me.Hide
End Sub Private Sub UserForm_Initialize() txtMaKH.Text = "" txtTenKH.Text = "" txtSDT.Text = "" txtDiaChi.Text = ""
End Sub
  • Gán macro ShowForm để mở form:
Sub ShowForm() UserForm1.Show
End Sub

7.3. Lưu ý khi dùng UserForm

  • Không để tên control trùng với từ khóa VBA (ví dụ: Name).
  • Giải phóng bộ nhớ: Unload Me sau khi đóng.
  • Xử lý lỗi nhập: kiểm tra dữ liệu trước khi ghi vào sheet.

8. Xử Lý Lỗi (Error Handling)

8.1. Cấu trúc On Error

Sub DemoError() On Error GoTo ErrHandler Dim x As Double x = 1 / 0 ' Gây lỗi chia cho 0 Exit Sub ErrHandler: MsgBox "Đã xảy ra lỗi: " & Err.Description, vbCritical Resume Next ' Tiếp tục thực thi dòng tiếp theo
End Sub

8.2. Các phương pháp xử lý

Phương phápMô tả
On Error Resume NextBỏ qua lỗi và tiếp tục. Thường dùng khi kiểm tra tồn tại file, sheet…
On Error GoTo -1Đặt lại trạng thái lỗi.
Err.ClearXóa thông tin lỗi hiện tại.
Err.RaiseTự tạo lỗi tùy chỉnh.

8.3. Ghi log lỗi

Sub WriteLog(ByVal Msg As String) Dim logWs As Worksheet Set logWs = ThisWorkbook.Sheets("Log") Dim nextRow As Long nextRow = logWs.Cells(logWs.Rows.Count, "A").End(xlUp).Row + 1 logWs.Cells(nextRow, 1).Value = Now logWs.Cells(nextRow, 2).Value = Msg
End Sub

Sử dụng trong ErrHandler:

ErrHandler: WriteLog "Lỗi tại " & Err.Source & ": " & Err.Description MsgBox "Đã ghi lại lỗi vào sheet Log.", vbExclamation Resume Next

9. Kết Nối Dữ Liệu Ngoại Vi (External Data)

9.1. Kết nối SQL Server bằng ADODB

Sub GetDataFromSQL() Dim cn As Object, rs As Object Dim sql As String Dim ws As Worksheet Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.ConnectionString = "Provider=SQLOLEDB;Data Source=SERVERNAME;Initial Catalog=DBNAME;Integrated Security=SSPI;" cn.Open sql = "SELECT MaKH, TenKH, DiaChi FROM KhachHang WHERE TrangThai = 1" rs.Open sql, cn, 1, 3 Set ws = ThisWorkbook.Sheets("Data") ws.Range("A2").CopyFromRecordset rs rs.Close: cn.Close Set rs = Nothing: Set cn = Nothing MsgBox "Lấy dữ liệu thành công!", vbInformation
End Sub

9.2. Đọc file CSV

Sub ImportCSV() Dim filePath As String filePath = Application.GetOpenFilename("CSV Files (.csv),.csv") If filePath = "False" Then Exit Sub With ThisWorkbook.Sheets("CSVData").QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=Range("$A$1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False End With
End Sub

10. Tối Ưu Hiệu Năng Khi Viết Macro

Kỹ thuậtLý do
Tránh dùng .Select và .ActivateGiảm số lần chuyển đổi ngữ cảnh, tăng tốc độ.
Sử dụng mảng (Array) để đọc/ghi dữ liệuĐọc toàn bộ vùng vào mảng, xử lý trong RAM, sau đó ghi lại một lần.
Tắt tính năng tính toán tự độngApplication.Calculation = xlCalculationManual tránh tính lại mỗi khi thay đổi ô.
Tắt ScreenUpdatingApplication.ScreenUpdating = False ngăn Excel vẽ lại màn hình trong quá trình chạy macro.
Tắt EventsApplication.EnableEvents = False tránh chạy các sự kiện phụ khi thay đổi dữ liệu.
Sử dụng With…End WithGiảm số lần tham chiếu đối tượng, làm code ngắn gọn.

10.1. Ví dụ tối ưu đọc/ghi dữ liệu

Sub FastCopy() Dim src As Variant Dim wsSrc As Worksheet, wsDst As Worksheet Set wsSrc = ThisWorkbook.Sheets("Source") Set wsDst = ThisWorkbook.Sheets("Dest") Application.ScreenUpdating = False Application.Calculation = xlCalculationManual src = wsSrc.Range("A1:D10000").Value ' Đọc vào mảng wsDst.Range("A1").Resize(UBound(src, 1), UBound(src, 2)).Value = src ' Ghi lại Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True
End Sub

11. Bảo Mật Macro và Triển Khai

11.1. Mã hoá (Password Protect) VBA Project

  1. Trong VBA Editor, Tools → VBAProject Properties → Protection.
  2. Đánh dấu Lock project for viewing, nhập mật khẩu và xác nhận.

11.2. Chuyển đổi macro sang Add‑in (.xlam)

  • Tạo file Excel Add‑in để chia sẻ macro giữa nhiều workbook.
  • Lưu file dưới định dạng Excel Add‑in (.xlam), sau đó File → Options → Add‑Ins → Excel Add‑ins → Browse để tải.

11.3. Sử dụng Digital Signature để tránh cảnh báo

  1. Mua hoặc tạo Self‑signed certificate (Tools → Digital Signature).
  2. Ký macro bằng chứng thực để người dùng tin tưởng hơn khi mở file.

12. Thực Hành: Dự Án Mini – Tự Động Hóa Báo Cáo Doanh Thu Hàng Tháng

12.1. Yêu cầu

  • Thu thập dữ liệu bán hàng từ các sheet “Jan”, “Feb”, … “Dec”.
  • Tính tổng doanh thu, số lượng đơn hàng, trung bình giá bán.
  • Tạo sheet “Báo cáo” với bảng tổng hợp và biểu đồ cột.

12.2. Các bước thực hiện

  1. Chuẩn bị dữ liệu: Mỗi sheet tháng có cột Ngày, Mã SP, Số lượng, Đơn giá.
  2. Viết macro tổng hợp:
Sub TongHopDoanhThu() Dim wsRpt As Worksheet, ws As Worksheet Dim months As Variant, i As Long, lastRow As Long Dim totalQty As Long, totalRev As Double Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set wsRpt = ThisWorkbook.Sheets("BaoCao") wsRpt.Cells.Clear months = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", _ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") wsRpt.Range("A1:D1").Value = Array("Tháng", "Số lượng", "Doanh thu", "Trung bình/đơn") For i = LBound(months) To UBound(months) Set ws = ThisWorkbook.Sheets(months(i)) lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row totalQty = Application.WorksheetFunction.Sum(ws.Range("C2:C" & lastRow)) totalRev = Application.WorksheetFunction.SumProduct(ws.Range("C2:C" & lastRow), ws.Range("D2:D" & lastRow)) wsRpt.Cells(i + 2, 1).Value = months(i) wsRpt.Cells(i + 2, 2).Value = totalQty wsRpt.Cells(i + 2, 3).Value = totalRev wsRpt.Cells(i + 2, 4).Value = IIf(totalQty = 0, 0, totalRev / totalQty) Next i ' Tạo biểu đồ Dim cht As ChartObject Set cht = wsRpt.ChartObjects.Add(Left:=300, Top:=20, Width:=500, Height:=300) With cht.Chart .SetSourceData Source:=wsRpt.Range("A1:C13") .ChartType = xlColumnClustered .HasTitle = True .ChartTitle.Text = "Doanh thu theo tháng" End With Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True MsgBox "Báo cáo đã hoàn thành!", vbInformation
End Sub
  1. Gán macro vào nút trên sheet “Dashboard” để người dùng chỉ cần click.

12.3. Mở rộng

  • Thêm UserForm cho phép người dùng chọn năm, khu vực.
  • Kết nối SQL để lấy dữ liệu trực tiếp từ hệ thống ERP.
  • Gửi báo cáo qua email tự động (sử dụng Outlook Object Model).

13. Các Tài Nguyên Học Tập Và Cộng Đồng

NguồnMô tả
Microsoft Docs – VBA ReferenceTài liệu chính thức, đầy đủ các đối tượng, phương thức, thuộc tính.
Excel Macro Mastery (Chandoo.org)Blog, video hướng dẫn từ cơ bản tới nâng cao.
Stack OverflowCộng đồng lập trình viên, giải đáp các vấn đề cụ thể.
MrExcel ForumDiễn đàn chuyên về Excel, nhiều ví dụ thực tế.
YouTube – Leila GharaniKênh video giảng dạy VBA ngắn gọn, thực hành ngay.
Udemy / CourseraKhóa học chi tiết, có bài tập thực hành.

14. Kết Luận

Các mã lệnh trong Excel – từ macro đơn giản, hàm người dùng định nghĩa, cho tới các ứng dụng phức tạp như kết nối cơ sở dữ liệu hay xây dựng giao diện người dùng – đều mang lại giá trị to lớn cho việc tự động hoá, tối ưu hoá quy trình, và nâng cao năng suất làm việc.

Để thành thạo VBA, bạn cần:

  1. Hiểu rõ cấu trúc đối tượng của Excel (Workbook, Worksheet, Range, Chart…).
  2. Thực hành viết code thay vì chỉ dựa vào ghi macro.
  3. Áp dụng các nguyên tắc tối ưu (tránh Select, dùng mảng, tắt ScreenUpdating).
  4. Xây dựng hệ thống xử lý lỗi và log để bảo trì dễ dàng.
  5. Bảo mật và triển khai dưới dạng Add‑in hoặc ký số để chia sẻ nội bộ.

Bằng cách nắm vững các kiến thức và kỹ thuật trên, bạn sẽ biến Excel thành một công cụ mạnh mẽ, phù hợp cho mọi nhu cầu kinh doanh – từ quản lý dữ liệu đơn giản cho tới phát triển các giải pháp doanh nghiệp phức tạp. Hãy bắt đầu viết macro hôm nay và khám phá tiềm năng vô hạn của Excel!

⚠️
LƯU Ý QUAN TRỌNG: Miễn trừ trách nhiệm: Mặc dù chúng tôi luôn nỗ lực để đảm bảo tính chính xác và cập nhật của thông tin, nhưng các quy định về giáo dục và tuyển sinh có thể thay đổi theo thời gian. BigSchool không chịu trách nhiệm về bất kỳ sai sót nào hoặc kết quả phát sinh từ việc sử dụng thông tin trên trang này. Độc giả nên liên hệ trực tiếp với nhà trường hoặc cơ quan chức năng để có thông tin mới nhất. Ngoài ra, BigSchool tuyệt đối không bán sản phẩm, khóa học hay cung cấp dịch vụ được nhắc đến trong bài.

Viết một bình luận