Lập Trình Vba Trong Excel Full Pdf: Hướng Dẫn Toàn Diện Từ Cơ Bản Đến Nâng Cao

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

Mở Đầu

Trong thời đại số hoá hiện nay, Microsoft Excel không chỉ là một công cụ tính toán đơn thuần mà còn là một nền tảng mạnh mẽ cho việc tự động hoá quy trình công việc, xử lý dữ liệu lớn và xây dựng các ứng dụng nội bộ. Điều này trở nên khả thi nhờ vào Visual Basic for Applications (VBA) – một ngôn ngữ lập trình tích hợp sẵn trong Excel, cho phép người dùng viết mã để điều khiển mọi khía cạnh của bảng tính.

Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, đầy đủ (full) và có thể tải về dạng PDF về lập trình VBA trong Excel, bao gồm:

  1. Giới thiệu tổng quan về VBA và môi trường phát triển trong Excel.
  2. Cài đặt, cấu hình và chuẩn bị môi trường làm việc.
  3. Các khái niệm cơ bản: biến, kiểu dữ liệu, cấu trúc điều khiển, hàm và thủ tục.
  4. Tương tác với các đối tượng Excel: Workbook, Worksheet, Range, Chart, PivotTable…
  5. Xây dựng Macro ghi lại (Record Macro) và chuyển đổi thành mã VBA.
  6. Lập trình sự kiện (Event-driven programming) trong Excel.
  7. Xử lý lỗi và debug hiệu quả.
  8. Kết nối Excel với các nguồn dữ liệu bên ngoài (Access, SQL Server, Web API).
  9. Tối ưu hoá hiệu năng và bảo mật macro.
  10. Các ví dụ thực tế: tự động hoá báo cáo, tạo biểu đồ động, thu thập dữ liệu web, phân tích tài chính.
  11. Hướng dẫn xuất bản và chia sẻ file VBA dưới dạng PDF để học tập và tham khảo.

Sau khi đọc xong, bạn sẽ có một tài liệu “full PDF” đáng tin cậy để học, tra cứu và áp dụng VBA trong mọi dự án Excel của mình.

1. Tổng Quan Về VBA Trong Excel

1.1 VBA là gì?

VBA (Visual Basic for Applications) là một ngôn ngữ lập trình hướng đối tượng, dựa trên Visual Basic, được Microsoft tích hợp trong các ứng dụng Office (Excel, Word, PowerPoint, Access). VBA cho phép người dùng:

  • Tự động hoá các thao tác lặp lại.
  • Tạo giao diện người dùng tùy chỉnh (UserForm, Controls).
  • Kết nối dữ liệu từ nhiều nguồn khác nhau.
  • Mở rộng chức năng của Excel bằng các hàm và add‑in tùy chỉnh.

1.2 Lợi Ích Khi Sử Dụng VBA

Lợi ÍchMô Tả
Tiết kiệm thời gianThực hiện các tác vụ lặp lại trong vài giây thay vì giờ đồng hồ.
Độ chính xác caoGiảm thiểu lỗi do nhập liệu thủ công.
Tích hợp sâuTruy cập và điều khiển mọi tính năng của Excel, bao gồm cả các tính năng nâng cao như Power Query, Power Pivot.
Tái sử dụngMã VBA có thể lưu trữ trong workbook và dùng lại trong các dự án khác.
Khả năng mở rộngKết nối với các ngôn ngữ khác (C#, Python) qua COM, DLL.

1.3 PDF Là Gì Và Tại Sao Nên Chuẩn Bị Tài Liệu PDF?

PDF (Portable Document Format) là định dạng tài liệu điện tử phổ biến, giữ nguyên bố cục, định dạng và có thể mở trên mọi hệ thống. Khi bạn biên soạn một tài liệu hướng dẫn VBA đầy đủ, PDF giúp:

  • Bảo đảm nội dung không bị thay đổi.
  • Chia sẻ dễ dàng qua email, cloud hoặc in ấn.
  • Tích hợp hình ảnh, biểu đồ, mã nguồn, và chú giải rõ ràng.

2. Chuẩn Bị Môi Trường Làm Việc

2.1 Kiểm Tra Phiên Bản Excel

VBA được hỗ trợ trên các phiên bản:

  • Excel 2026, 2026, 2026, 2026, Microsoft 365 (Office 365).
  • Excel for Mac (có một số hạn chế về UI, nhưng vẫn hỗ trợ VBA).

Lưu ý: Excel 2026 và Microsoft 365 luôn có bản cập nhật bảo mật mới, vì vậy bạn nên cập nhật đầy đủ trước khi bắt đầu.

2.2 Kích Hoạt Tab “Developer”

  1. Vào File → Options → Customize Ribbon.
  2. Đánh dấu Developer trong danh sách bên phải.
  3. Nhấn OK.

Bây giờ thanh công cụ Developer sẽ xuất hiện trên Ribbon, cung cấp các công cụ như Visual Basic, Record Macro, Insert Form Controls.

2.3 Cài Đặt Môi Trường VBA

  • VBA Editor (VBE): Mở bằng Alt + F11.
  • Cài đặt tham chiếu (References): Trong VBE, vào Tools → References, tích chọn các thư viện cần thiết (Microsoft Scripting Runtime, Microsoft XML, v.v.) để sử dụng các đối tượng đặc biệt.

2.4 Tạo File PDF Mẫu

Bạn có thể tạo một file PDF mẫu để chèn vào tài liệu hướng dẫn:

  1. Mở một workbook trống, nhập tiêu đề, mục lục và một vài ví dụ.
  2. Vào File → Save As → PDF.
  3. Lưu lại dưới tên “Mau_BaoCao_VBA.pdf”.

3. Các Khái Niệm Cơ Bản Trong VBA

3.1 Cấu Trúc Cơ Bản Của Một Module

Option Explicit Sub TenMacro() ' Mô tả: Đây là một macro đơn giản MsgBox "Xin chào, đây là VBA trong Excel!"
End Sub
  • Option Explicit buộc khai báo biến, giúp giảm lỗi.
  • Sub là thủ tục (procedure) không trả về giá trị.
  • Function trả về giá trị và có thể gọi trong công thức Excel.

3.2 Kiểu Dữ Liệu

KiểuMô tảKích thước
IntegerSố nguyên từ -32,768 đến 32,7672 byte
LongSố nguyên lớn hơn4 byte
DoubleSố thực, độ chính xác cao8 byte
StringChuỗi ký tựĐộ dài tùy ý
BooleanTrue/False2 byte
VariantKiểu dữ liệu linh hoạt, mặc định16 byte
DateNgày giờ8 byte
ObjectTham chiếu tới đối tượng COM4/8 byte

3.3 Biến và Hằng

Const PI As Double = 3.14159265358979
Dim i As Long, total As Double
  • Const khai báo hằng số, không thể thay đổi trong runtime.
  • Dim khai báo biến, có thể đặt Public (toàn cục) hoặc Private (cục bộ).

3.4 Cấu Trúc Điều Khiển

' If…Then…Else
If total > 1000 Then MsgBox "Doanh thu vượt mục tiêu!"
Else MsgBox "Cần cải thiện."
End If ' For…Next
For i = 1 To 10 Cells(i, 1).Value = i 2
Next i ' Do…Loop While
Do While Not IsEmpty(ActiveCell) ActiveCell.Offset(1, 0).Select
Loop

3.5 Hàm và Thủ Tục

  • Hàm (Function) có thể dùng trong công thức Excel: =TinhTong(A1:A10).
  • Thủ tục (Sub) thường thực hiện hành động, không trả về giá trị.
Function TinhTong(rng As Range) As Double Dim cell As Range Dim sum As Double For Each cell In rng If IsNumeric(cell.Value) Then sum = sum + cell.Value Next cell TinhTong = sum
End Function

4. Tương Tác Với Các Đối Tượng Excel

4.1 Workbook và Worksheet

Dim wb As Workbook
Dim ws As Worksheet Set wb = ThisWorkbook ' Workbook hiện tại
Set ws = wb.Sheets("Data") ' Lấy sheet có tên "Data"
  • ThisWorkbook: workbook chứa macro.
  • ActiveWorkbook: workbook đang hoạt động (có thể khác).

4.2 Range – Truy Cập Ô Và Vùng Dữ Liệu

Dim rng As Range
Set rng = ws.Range("A1:D10")
rng.Font.Bold = True
rng.Interior.Color = RGB(220, 230, 241)
  • Cells(row, column): truy cập ô bằng chỉ số.
  • Offset(rowOffset, colOffset): di chuyển tương đối.

4.3 Chart – Tự Động Tạo Biểu Đồ

Dim cht As ChartObject
Set cht = ws.ChartObjects.Add(Left:=300, Top:=10, Width:=400, Height:=250)
With cht.Chart .SetSourceData Source:=ws.Range("A1:B10") .ChartType = xlLineMarkers .HasTitle = True .ChartTitle.Text = "Biểu đồ doanh thu"
End With

4.4 PivotTable – Tạo Báo Cáo Tổng Hợp

Dim ptCache As PivotCache
Dim pt As PivotTable
Dim dest As Range Set dest = ws.Range("F1")
Set ptCache = wb.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=ws.Range("A1:D500"))
Set pt = ptCache.CreatePivotTable( _ TableDestination:=dest, _ TableName:="PivotDoanhThu")
With pt .PivotFields("KhuVuc").Orientation = xlRowField .PivotFields("DoanhThu").Orientation = xlDataField
End With

4.5 UserForm – Giao Diện Người Dùng

  1. Trong VBE, Insert → UserForm.
  2. Thêm các Controls: TextBox, CommandButton, ListBox…
  3. Viết code cho sự kiện Click của nút:
Private Sub cmdOK_Click() Dim ten As String ten = Me.txtName.Text MsgBox "Xin chào " & ten, vbInformation Unload Me
End Sub

Để hiển thị Form: UserForm1.Show.

5. Ghi Lại (Record Macro) Và Chuyển Đổi Thành Mã VBA

Lập Trình Vba Trong Excel Full Pdf
Lập Trình Vba Trong Excel Full Pdf

5.1 Sử Dụng Record Macro

  1. Vào Developer → Record Macro.
  2. Thực hiện các thao tác (định dạng, sao chép, tạo biểu đồ).
  3. Dừng ghi và kiểm tra mã trong VBE.

5.2 Tối Ưu Hóa Mã Được Ghi

  • Xóa các lệnh không cần thiết (Select, Activate).
  • Thêm Option Explicit và khai báo biến.
  • Sử dụng With…End With để giảm lặp.
With Sheets("Report") .Range("A1").Value = "Ngày" .Range("B1").Value = "Doanh thu" .Columns("A:B").AutoFit
End With

6. Lập Trình Sự Kiện (Event-Driven Programming)

Excel cung cấp nhiều sự kiện cho Workbook, Worksheet và Application.

6.1 Các Sự Kiện Thông Dụng

Đối tượngSự kiệnMô tả
WorkbookOpen, BeforeClose, BeforeSaveKhi mở, đóng, lưu workbook.
WorksheetChange, SelectionChange, BeforeDoubleClickKhi thay đổi ô, thay đổi lựa chọn, nhấp đúp.
ApplicationSheetActivate, NewWorkbookKhi kích hoạt sheet, tạo workbook mới.

6.2 Ví Dụ: Tự Động Kiểm Tra Dữ Liệu Khi Người Dùng Nhập

Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("B2:B100")) Is Nothing Then If Not IsNumeric(Target.Value) Then MsgBox "Vui lòng nhập số!", vbExclamation Application.EnableEvents = False Target.ClearContents Application.EnableEvents = True End If End If
End Sub

Lưu ý: Khi thay đổi giá trị trong sự kiện, tắt Application.EnableEvents để tránh vòng lặp vô hạn.

7. Xử Lý Lỗi Và Debug

7.1 Các Lệnh Xử Lý Lỗi

On Error GoTo ErrHandler
' Code có thể gây lỗi
Exit Sub ErrHandler: MsgBox "Lỗi: " & Err.Number & " - " & Err.Description, vbCritical Resume Next ' Hoặc Resume <label>
  • On Error Resume Next bỏ qua lỗi (không khuyến khích).
  • On Error GoTo 0 tắt xử lý lỗi tùy chỉnh.

7.2 Công Cụ Debug

  • Breakpoints (F9) để dừng thực thi tại dòng.
  • Watch Window để theo dõi giá trị biến.
  • Immediate Window (Ctrl+G) để thử lệnh nhanh.

7.3 Ghi Log Lỗi Vào File

Sub GhiLogLoi(ByVal txt As String) Dim fso As Object, ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile(ThisWorkbook.Path & "\Log.txt", 8, True) ts.WriteLine Now & " - " & txt ts.Close
End Sub

Gọi GhiLogLoi Err.Description trong block ErrHandler.

8. Kết Nối Excel Với Các Nguồn Dữ Liệu Bên Ngoài

8.1 Kết Nối Với Access

Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\MyDB.accdb;"
cn.Open Set rs = cn.Execute("SELECT FROM KhachHang")
Worksheets("Data").Range("A2").CopyFromRecordset rs rs.Close: cn.Close

8.2 Kết Nối Với SQL Server

Dim cn As New ADODB.Connection
cn.ConnectionString = "Driver={SQL Server};Server=SERVER01;Database=SalesDB;Trusted_Connection=Yes;"
cn.Open

8.3 Gửi Yêu Cầu Web API (JSON)

Dim http As Object, json As String
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.exchangerate-api.com/v4/latest/USD", False
http.send
json = http.responseText
' Sau đó dùng JSON parser (VBA‑JSON) để xử lý

Bạn cần thêm reference tới Microsoft XML, v6.0.

9. Tối Ưu Hoá Hiệu Năng Và Bảo Mật

9.1 Tối Ưu Hoá Mã

  • Tránh sử dụng Select/Activate.
  • Sử dụng biến mảng để xử lý dữ liệu lớn: đọc Range.Value vào Variant, thao tác trong VBA, rồi ghi lại.
  • Tắt ScreenUpdating và Calculation trong quá trình chạy:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' ... code ...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

9.2 Bảo Mật Macro

  • Digital Signature: ký macro bằng chứng chỉ để người dùng tin cậy.
  • Macro Settings: trong Trust Center → Macro Settings → “Disable all macros with notification”.
  • Password Protect VBA Project: Tools → VBAProject Properties → Protection → Set password.

9.3 Tránh Phụ Thuộc Vào Đường Dẫn Cứng

Sử dụng ThisWorkbook.Path để tạo đường dẫn tương đối, tránh lỗi khi di chuyển file.

10. Các Ví Dụ Thực Tế

10.1 Tự Động Hoá Báo Cáo Hàng Tháng

Sub BaoCaoHangThang() Dim wsSrc As Worksheet, wsDst As Worksheet Dim lastRow As Long, i As Long Set wsSrc = ThisWorkbook.Sheets("RawData") Set wsDst = ThisWorkbook.Sheets("Report") Application.ScreenUpdating = False wsDst.Cells.Clear wsDst.Range("A1").Value = "Tháng" wsDst.Range("B1").Value = "Doanh thu" For i = 2 To wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row If wsSrc.Cells(i, "A").Value = Format(Date, "mm/yyyy") Then wsDst.Cells(2, "A").Value = wsSrc.Cells(i, "A").Value wsDst.Cells(2, "B").Value = wsDst.Cells(2, "B").Value + wsSrc.Cells(i, "C").Value End If Next i ' Định dạng và tạo biểu đồ With wsDst .Columns("A:B").AutoFit Call TaoBieuDo(.Range("A1:B2")) End With Application.ScreenUpdating = True MsgBox "Báo cáo tháng đã hoàn thành!", vbInformation
End Sub Sub TaoBieuDo(rng As Range) Dim cht As ChartObject Set cht = rng.Worksheet.ChartObjects.Add(Left:=300, Top:=20, Width:=400, Height:=250) With cht.Chart .SetSourceData Source:=rng .ChartType = xlColumnClustered .HasTitle = True .ChartTitle.Text = "Doanh thu tháng " & Format(Date, "mm/yyyy") End With
End Sub

10.2 Thu Thập Dữ Liệu Từ Web (Web Scraping)

Sub LayBangGia() Dim http As Object, html As Object, tbl As Object, tr As Object, td As Object Dim i As Long, j As Long Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", "https://www.example.com/bang-gia", False http.send Set html = CreateObject("HTMLFile") html.body.innerHTML = http.responseText Set tbl = html.getElementsByTagName("table")(0) For i = 0 To tbl.Rows.Length - 1 Set tr = tbl.Rows(i) For j = 0 To tr.Cells.Length - 1 Set td = tr.Cells(j) ThisWorkbook.Sheets("Gia").Cells(i + 1, j + 1).Value = td.innerText Next j Next i MsgBox "Lấy bảng giá thành công!", vbInformation
End Sub

10.3 Phân Tích Tài Chính – Tính Tỷ Suất Lợi Nhuận

Function TinhLoiNhuan(giaBan As Double, giaVon As Double) As Double If giaVon = 0 Then TinhLoiNhuan = 0 Else TinhLoiNhuan = (giaBan - giaVon) / giaVon End If
End Function Sub ApplyLoiNhuan() Dim rng As Range, cell As Range Set rng = Sheets("SanPham").Range("C2:C100") ' Giá bán For Each cell In rng cell.Offset(0, 1).Value = TinhLoiNhuan(cell.Value, cell.Offset(0, -1).Value) ' Giả sử giá vốn ở cột B Next cell MsgBox "Tính lợi nhuận hoàn tất."
End Sub

11. Xuất Bản Và Chia Sẻ Tài Liệu PDF

11.1 Tạo PDF Từ VBA

Sub XuatPDF() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Report") ws.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=ThisWorkbook.Path & "\BaoCaoThang.pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True
End Sub

11.2 Đánh Dấu (Watermark) Trên PDF

VBA không hỗ trợ trực tiếp, nhưng bạn có thể:

  1. Thêm hình ảnh (logo, watermark) vào sheet trước khi xuất PDF.
  2. Hoặc sử dụng thư viện bên thứ ba như PDFCreator qua COM.
Sub AddWatermark() Dim shp As Shape Set shp = ThisWorkbook.Sheets("Report").Shapes.AddTextEffect( _ PresetTextEffect:=msoTextEffect1, _ Text:="CONFIDENTIAL", _ FontName:="Arial", _ FontSize:=72, _ FontBold:=msoTrue, _ FontItalic:=msoFalse, _ Left:=100, Top:=200) shp.Fill.Transparency = 0.8 shp.Rotation = 45
End Sub

Sau khi chạy AddWatermark, thực hiện XuatPDF.

11.3 Phân Phối PDF

  • Email: sử dụng Outlook Automation để gửi file PDF.
  • SharePoint/OneDrive: tải lên thư mục chia sẻ.
  • Website: đặt PDF lên server và cung cấp link tải.
Sub GuiEmailPDF() Dim olApp As Object, olMail As Object Set olApp = CreateObject("Outlook.Application") Set olMail = olApp.CreateItem(0) ' 0 = olMailItem With olMail .To = "nguoi_nhan@example.com" .Subject = "Báo cáo tháng - PDF" .Body = "Kính gửi, vui lòng xem báo cáo đính kèm." .Attachments.Add ThisWorkbook.Path & "\BaoCaoThang.pdf" .Send End With MsgBox "Email đã được gửi.", vbInformation
End Sub

12. Kết Luận

Việc học và thành thạo lập trình VBA trong Excel không chỉ giúp bạn tối ưu hoá quy trình làm việc, mà còn mở ra cánh cửa sáng tạo các giải pháp tự động hoá phức tạp, tích hợp dữ liệu và xây dựng công cụ phân tích mạnh mẽ. Bằng cách biên soạn một tài liệu “full PDF” như chúng ta vừa làm, bạn sẽ có nguồn tham khảo đầy đủ, có thể in ấn, chia sẻ và cập nhật theo nhu cầu thực tế.

Các Bước Tiếp Theo Đề Xuất

  1. Thực hành ngay: Tạo một workbook mẫu, áp dụng các macro đã học.
  2. Lưu trữ PDF: Sử dụng các đoạn code xuất PDF để ghi lại các dự án và tài liệu hướng dẫn.
  3. Tham gia cộng đồng: Các diễn đàn như MrExcel, Stack Overflow, và nhóm Facebook “VBA Việt Nam” là nơi chia sẻ kiến thức quý báu.
  4. Tiếp tục học: Nghiên cứu các công nghệ bổ trợ như Power Query, Power Pivot, và tích hợp Python qua xlwings để mở rộng khả năng của Excel.

Hy vọng tài liệu này sẽ là cẩm nang toàn diện cho mọi người muốn “đi từ A tới Z” trong thế giới VBA và Excel. Chúc bạn thành công trong mọi dự án tự động hoá!

⚠️
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