Trong môi trường làm việc hiện đại, Microsoft Excel đã trở thành công cụ không thể thiếu cho việc xử lý dữ liệu, phân tích và báo cáo. Tuy nhiên, khi phải đối mặt với những tác vụ lặp đi lặp lại, khối lượng dữ liệu lớn hoặc yêu cầu tự động hoá quy trình, việc chỉ dựa vào các công cụ chuẩn của Excel sẽ khiến bạn mất rất nhiều thời gian và công sức. Đó là lúc Visual Basic for Applications (VBA) xuất hiện như một “cây đũa thần”, cho phép bạn mở rộng khả năng của Excel, tự động hoá các thao tác và tạo ra những giải pháp tùy chỉnh phù hợp với nhu cầu thực tế.
Bài viết này sẽ cung cấp cho bạn một bộ sưu tập hơn 1500 từ (khoảng 10.000 ký tự) các đoạn mã VBA hữu ích, được phân loại theo từng nhóm chức năng phổ biến. Mỗi đoạn code sẽ kèm theo mô tả chi tiết, cách triển khai, cũng như một số lưu ý khi sử dụng. Hy vọng sau khi đọc xong, bạn sẽ có thể áp dụng ngay vào công việc hàng ngày, giảm thiểu lỗi thủ công và nâng cao năng suất làm việc trên Excel.
Có thể bạn quan tâm: Cách Chuyển Chữ In Hoa Sang Chữ In Thường Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
1. Giới thiệu nhanh về VBA trong Excel
1.1 VBA là gì?
VBA (Visual Basic for Applications) là một ngôn ngữ lập trình được tích hợp sẵn trong các ứng dụng của Microsoft Office, bao gồm Excel, Word, PowerPoint và Access. Với VBA, người dùng có thể viết macro (macro là tập hợp các lệnh tự động thực hiện) để tự động hoá các thao tác lặp đi lặp lại, tạo giao diện người dùng (UserForm), tương tác với các ứng dụng khác và thậm chí thao tác với hệ thống Windows.
1.2 Lợi ích khi sử dụng VBA trong Excel
- Tiết kiệm thời gian: Thực hiện các công việc lặp lại chỉ trong một cú click.
- Giảm lỗi: Loại bỏ các thao tác thủ công gây sai sót.
- Tùy biến cao: Tạo ra các hàm tùy chỉnh (UDF) phù hợp với nhu cầu riêng.
- Tự động hoá quy trình: Kết nối dữ liệu từ các nguồn khác nhau, tạo báo cáo tự động.
- Mở rộng khả năng: Tương tác với các API, tệp tin, và các phần mềm khác.
1.3 Cách bật môi trường lập trình VBA
- Mở Excel → Nhấn
Alt + F11để mở cửa sổ Visual Basic for Applications. - Nếu chưa thấy thẻ Developer trên Ribbon, vào
File → Options → Customize Ribbonvà tick vào Developer. - Trong môi trường VBA, bạn có thể chèn Module, Class Module, hoặc UserForm để viết code.
Có thể bạn quan tâm: Hướng Dẫn Chi Tiết Cách Upload Excel Lên Google Sheets: Từ Cơ Bản Đến Nâng Cao
2. Các đoạn mã VBA cơ bản nhưng cực kỳ hữu ích
2.1 Macro mở file CSV và tự động chuyển đổi sang bảng Excel
Sub OpenCSVasTable() Dim ws As Worksheet Dim fd As FileDialog Dim filePath As String ' Chọn file CSV Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .Filters.Clear .Filters.Add "CSV Files", ".csv" .AllowMultiSelect = False If .Show = -1 Then filePath = .SelectedItems(1) Else Exit Sub End If End With ' Thêm worksheet mới Set ws = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) ws.Name = "CSV_Import" ' Nhập dữ liệu CSV With ws.QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=ws.Range("A1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False End With MsgBox "Import CSV thành công!", vbInformation
End Sub
Giải thích:
– Sử dụng FileDialog để người dùng chọn file CSV.
– Tạo một sheet mới, đặt tên CSV_Import.
– Dùng QueryTables để nhập dữ liệu, tự động phát hiện dấu phẩy làm delimiter.
– Thích hợp cho việc nhập nhanh các báo cáo hàng ngày.
2.2 Tự động lọc dữ liệu và sao chép sang sheet mới
Sub FilterAndCopy() Dim src As Worksheet, dest As Worksheet Dim lastRow As Long Set src = ThisWorkbook.Sheets("Data") Set dest = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) dest.Name = "Filtered_" & Format(Now, "yyyymmdd") ' Xác định dòng cuối cùng lastRow = src.Cells(src.Rows.Count, "A").End(xlUp).Row ' Áp dụng AutoFilter (ví dụ: cột B = "Completed") src.Range("A1:E" & lastRow).AutoFilter Field:=2, Criteria1:="Completed" ' Sao chép dữ liệu đã lọc (bỏ qua tiêu đề) src.Range("A1:E" & lastRow).SpecialCells(xlCellTypeVisible).Copy _ Destination:=dest.Range("A1") ' Xóa AutoFilter src.AutoFilterMode = False MsgBox "Dữ liệu đã được lọc và sao chép!", vbInformation
End Sub
Giải thích:
– Đọc dữ liệu từ sheet Data.
– Lọc các dòng có giá trị “Completed” ở cột B.
– Sao chép các dòng lọc được sang một sheet mới, tên có ngày hiện tại.
– Thích hợp cho báo cáo công việc hoàn thành.
2.3 Tạo hàm UDF (User Defined Function) tính tổng có điều kiện
Function SumIfContains(rng As Range, txt As String) As Double Dim cell As Range Dim total As Double total = 0 For Each cell In rng If InStr(1, cell.Value, txt, vbTextCompare) > 0 Then total = total + cell.Offset(0, 1).Value ' Giả sử giá trị cần cộng nằm ở cột bên phải End If Next cell SumIfContains = total
End Function
Sử dụng trong Excel:=SumIfContains(A2:A100, "Apple")
Hàm này sẽ cộng các giá trị ở cột B tương ứng với các ô trong cột A chứa từ “Apple”.
2.4 Đánh dấu các dòng trùng lặp trong một cột
Sub HighlightDuplicates() Dim rng As Range, cell As Range Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") Set rng = Application.Selection ' Chọn vùng dữ liệu trước khi chạy macro For Each cell In rng If Not IsEmpty(cell) Then If dict.Exists(cell.Value) Then cell.Interior.Color = RGB(255, 199, 199) ' Đánh màu hồng Else dict.Add cell.Value, 1 End If End If Next cell MsgBox "Hoàn thành! Các giá trị trùng đã được tô màu.", vbInformation
End Sub
Giải thích:
– Sử dụng Dictionary để lưu trữ các giá trị đã xuất hiện.
– Khi gặp giá trị đã tồn tại, tô màu nền ô.
– Rất hữu ích khi kiểm tra dữ liệu nhập vào có trùng lặp hay không.
Có thể bạn quan tâm: Unprotect Excel Sheet Without Password: Hướng Dẫn Chi Tiết, Pháp Lệ Và Các Công Cụ Hữu Ích
3. Tự động hoá quy trình làm việc hàng ngày
3.1 Tự động gửi email báo cáo bằng Outlook
Sub SendReportEmail() Dim OutApp As Object, OutMail As Object Dim wb As Workbook, ws As Worksheet Dim rng As Range, bodyText As String Set wb = ThisWorkbook Set ws = wb.Sheets("Report") ' Lấy nội dung báo cáo (giả sử từ A1 đến D10) Set rng = ws.Range("A1:D10") bodyText = RangetoHTML(rng) ' Hàm RangetoHTML sẽ chuyển dải ô thành HTML Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .To = "manager@example.com" .CC = "" .BCC = "" .Subject = "Báo cáo ngày " & Format(Date, "dd/mm/yyyy") .HTMLBody = "<p>Kính gửi Anh/Chị,</p>" & _ "<p>Đính kèm là báo cáo ngày hôm nay.</p>" & _ bodyText & _ "<p>Trân trọng,</p><p>Người gửi</p>" .Display ' Hoặc .Send để gửi ngay End With Set OutMail = Nothing Set OutApp = Nothing
End Sub '--- Hàm hỗ trợ chuyển Range thành HTML ---
Function RangetoHTML(rng As Range) As String Dim fso As Object, ts As Object, TempFile As String Dim wb As Workbook, ws As Worksheet Set wb = rng.Worksheet.Parent rng.Copy ' Tạo tệp tạm thời TempFile = Environ$("temp") & "\" & Format(Now, "yyyymmdd_hhnnss") & ".htm" Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.CreateTextFile(TempFile, True) ' Dán vào một workbook tạm thời để lấy HTML Set ws = wb.Sheets.Add ws.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False ws.Range("A1").CurrentRegion.Copy ' Dán vào tệp HTML ts.Write ws.Range("A1").CurrentRegion.Value ts.Close ' Đọc lại nội dung Set ts = fso.OpenTextFile(TempFile, 1) RangetoHTML = ts.ReadAll ts.Close ' Xóa workbook tạm và tệp tạm Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True Kill TempFile
End Function
Lưu ý:
– Đảm bảo Outlook được cài đặt và mở.
– Thay đổi địa chỉ email, phạm vi dữ liệu (A1:D10) theo nhu cầu.
– Nếu muốn gửi file đính kèm, thêm dòng .Attachments.Add "C:\Path\file.xlsx".
3.2 Tự động tạo file PDF từ một sheet và lưu vào thư mục
Sub ExportSheetToPDF() Dim ws As Worksheet Dim folderPath As String Dim fileName As String Set ws = ThisWorkbook.Sheets("Invoice") folderPath = "C:\Reports\Invoices\" ' Thư mục lưu PDF If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath fileName = folderPath & "Invoice_" & Format(Now, "yyyymmdd_hhnnss") & ".pdf" ws.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=fileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False MsgBox "File PDF đã được lưu tại: " & fileName, vbInformation
End Sub
Ứng dụng:
– Xuất hoá đơn, báo cáo, phiếu thu, v.v. thành PDF tự động, giảm thời gian tạo file thủ công.
3.3 Tự động cập nhật dữ liệu từ một file Excel khác (Power Query thay thế)
Sub RefreshExternalData() Dim srcPath As String, srcWB As Workbook Dim tgtWS As Worksheet srcPath = "C:\Data\MasterData.xlsx" Set tgtWS = ThisWorkbook.Sheets("Data") Application.ScreenUpdating = False ' Mở file nguồn (ẩn) Set srcWB = Workbooks.Open(Filename:=srcPath, ReadOnly:=True, UpdateLinks:=False) ' Xóa dữ liệu cũ tgtWS.Cells.Clear ' Sao chép dữ liệu từ Sheet1 của file nguồn srcWB.Sheets("Sheet1").UsedRange.Copy Destination:=tgtWS.Range("A1") srcWB.Close SaveChanges:=False Application.ScreenUpdating = True MsgBox "Dữ liệu đã được cập nhật từ " & srcPath, vbInformation
End Sub
Lưu ý:
– Đảm bảo đường dẫn và tên sheet đúng.
– Có thể mở rộng để lấy dữ liệu từ nhiều sheet, hoặc dùng QueryTables để làm mới kết nối.

Có thể bạn quan tâm: Cách Sử Dụng Dấu Tách Hàng Ngàn (1000 Separator) Trong Excel Để Tối Ưu Hóa Dữ Liệu Và Trình Bày
4. Các thủ thuật nâng cao cho người dùng trung cấp
4.1 Sử dụng Array và Dictionary để xử lý dữ liệu nhanh hơn
Khi làm việc với hàng nghìn dòng, việc lặp qua từng ô trong Excel sẽ rất chậm. Thay vào đó, chúng ta có thể đọc toàn bộ dải ô vào một mảng (Array), xử lý trong bộ nhớ và ghi lại kết quả một lần duy nhất.
Sub FastProcessingWithArray() Dim ws As Worksheet Dim dataArr As Variant Dim i As Long, lastRow As Long Set ws = ThisWorkbook.Sheets("RawData") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Đọc dữ liệu vào mảng dataArr = ws.Range("A2:D" & lastRow).Value ' Xử lý: ví dụ tính tổng cột D nếu cột B = "Yes" Dim total As Double total = 0 For i = 1 To UBound(dataArr, 1) If dataArr(i, 2) = "Yes" Then total = total + CDbl(dataArr(i, 4)) End If Next i MsgBox "Tổng giá trị = " & total, vbInformation
End Sub
Ưu điểm:
– Tốc độ nhanh gấp 10-20 lần so với việc duyệt từng ô.
– Giảm thiểu việc gọi Range liên tục (mỗi lần gọi đều tốn thời gian).
4.2 Tạo UserForm để nhập dữ liệu nhanh
'--- Module: ShowForm ---
Sub ShowInputForm() frmDataEntry.Show
End Sub
UserForm (frmDataEntry) thiết kế gồm:
– txtName (TextBox) – nhập tên.
– txtQty (TextBox) – nhập số lượng.
– cboCategory (ComboBox) – chọn danh mục.
– btnAdd (CommandButton) – Thêm dữ liệu vào sheet.
– btnClose (CommandButton) – Đóng form.
'--- Code trong UserForm frmDataEntry ---
Private Sub btnAdd_Click() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Entries") Dim nextRow As Long nextRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1 ws.Cells(nextRow, 1).Value = txtName.Text ws.Cells(nextRow, 2).Value = txtQty.Text ws.Cells(nextRow, 3).Value = cboCategory.Value ws.Cells(nextRow, 4).Value = Now ' Ghi thời gian ' Xóa nội dung để chuẩn bị nhập tiếp txtName.Text = "" txtQty.Text = "" cboCategory.ListIndex = -1 MsgBox "Dữ liệu đã được ghi!", vbInformation
End Sub Private Sub UserForm_Initialize() ' Khởi tạo ComboBox With cboCategory .AddItem "Sản phẩm A" .AddItem "Sản phẩm B" .AddItem "Dịch vụ C" End With
End Sub Private Sub btnClose_Click() Unload Me
End Sub
Cách dùng:
– Nhấn Alt + F8, chọn ShowInputForm → hiển thị form nhập liệu.
– Thích hợp cho việc nhập dữ liệu nhanh trong môi trường bán hàng, kho, hoặc ghi chú.
4.3 Ghi log hoạt động vào file text
Sub WriteLog(message As String) Dim logPath As String Dim fso As Object, txt As Object Dim timeStamp As String logPath = ThisWorkbook.Path & "\log.txt" timeStamp = Format(Now, "yyyy-mm-dd hh:nn:ss") Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FileExists(logPath) Then Set txt = fso.CreateTextFile(logPath, True) Else Set txt = fso.OpenTextFile(logPath, 8) ' 8 = ForAppending End If txt.WriteLine timeStamp & " - " & message txt.Close
End Sub ' Ví dụ sử dụng:
Sub ExampleLog() WriteLog "Bắt đầu chạy macro ImportCSV." Call OpenCSVasTable WriteLog "Hoàn thành import CSV."
End Sub
Lợi ích:
– Theo dõi lịch sử thực thi, giúp debug và audit.
– File log có thể được gửi qua email hoặc lưu trữ trên server.
5. Các macro bảo mật và tối ưu hiệu suất
5.1 Tắt ScreenUpdating và Calculation khi chạy macro
Sub OptimizedMacro() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual '--- Thực hiện công việc nặng --- Dim i As Long For i = 1 To 100000 Cells(i, 1).Value = i 2 Next i Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True
End Sub
Giải thích:
– ScreenUpdating = False ngăn Excel vẽ lại màn hình trong khi chạy macro → nhanh hơn.
– Calculation = xlCalculationManual tạm thời tắt tính toán tự động, tránh tính toán lại mỗi khi thay đổi ô.
5.2 Xử lý lỗi (Error Handling) chuẩn
Sub SafeMacro() On Error GoTo ErrHandler '--- Các thao tác --- Dim wb As Workbook Set wb = Workbooks.Open("C:\NonExistingFile.xlsx") MsgBox "Mở file thành công!" Exit Sub ErrHandler: MsgBox "Đã xảy ra lỗi: " & Err.Description, vbCritical ' Có thể ghi log hoặc thực hiện clean-up ở đây
End Sub
Lưu ý:
– Luôn luôn có On Error GoTo để tránh macro dừng đột ngột.
– Ghi log lỗi để phân tích sau.
5.3 Bảo vệ macro bằng mật khẩu
Nếu muốn ngăn người dùng chỉnh sửa macro:
- Trong cửa sổ VBA, chọn Tools → VBAProject Properties → Protection.
- Tick Lock project for viewing và nhập mật khẩu.
- Lưu file dưới dạng
xlsmhoặcxlsb.
6. Những ví dụ thực tế trong môi trường doanh nghiệp
6.1 Quản lý tồn kho tự động
- Mục tiêu: Khi nhập phiếu nhập kho, tự động cập nhật bảng tồn kho, cảnh báo nếu tồn kho < mức tối thiểu.
- Cách thực hiện:
- Tạo Sheet
Importđể nhập dữ liệu (Mã SP, Số lượng, Ngày). - Khi nhấn nút “Cập nhật”, macro sẽ:
- Kiểm tra xem mã sản phẩm có tồn tại trong Sheet
Stockkhông. - Nếu có, cộng số lượng nhập vào tồn kho hiện tại.
- Nếu không, tạo dòng mới.
- So sánh với
MinStockvà nếu dưới ngưỡng, tô màu đỏ và gửi email cảnh báo.
- Kiểm tra xem mã sản phẩm có tồn tại trong Sheet
Sub UpdateStock() Dim wsImport As Worksheet, wsStock As Worksheet Dim lastImp As Long, lastStk As Long, i As Long Dim prodID As String, qty As Double, rowStk As Long Set wsImport = ThisWorkbook.Sheets("Import") Set wsStock = ThisWorkbook.Sheets("Stock") lastImp = wsImport.Cells(wsImport.Rows.Count, "A").End(xlUp).Row For i = 2 To lastImp prodID = wsImport.Cells(i, 1).Value qty = wsImport.Cells(i, 2).Value ' Tìm sản phẩm trong Stock rowStk = 0 On Error Resume Next rowStk = Application.Match(prodID, wsStock.Columns(1), 0) On Error GoTo 0 If rowStk > 0 Then wsStock.Cells(rowStk, 2).Value = wsStock.Cells(rowStk, 2).Value + qty Else ' Thêm dòng mới lastStk = wsStock.Cells(wsStock.Rows.Count, "A").End(xlUp).Row + 1 wsStock.Cells(lastStk, 1).Value = prodID wsStock.Cells(lastStk, 2).Value = qty wsStock.Cells(lastStk, 3).Value = 0 ' MinStock mặc định 0 End If ' Kiểm tra mức tồn kho If wsStock.Cells(rowStk, 2).Value < wsStock.Cells(rowStk, 3).Value Then wsStock.Cells(rowStk, 2).Interior.Color = RGB(255, 150, 150) ' Gửi email cảnh báo (có thể gọi hàm SendReportEmail) End If Next i MsgBox "Cập nhật tồn kho hoàn tất.", vbInformation
End Sub
6.2 Tự động tạo báo cáo KPI hàng tuần
- Mô tả: Mỗi thứ Hai, macro sẽ tổng hợp dữ liệu bán hàng của tuần trước, tính các chỉ số (Doanh thu, Số đơn, Trung bình đơn) và tạo file PDF gửi cho ban giám đốc.
- Lịch trình: Sử dụng
Application.OnTimeđể đặt lịch chạy vào 8:00 AM mỗi thứ Hai.
Sub ScheduleWeeklyReport() Dim runTime As Date runTime = DateAdd("d", 1 - Weekday(Date, vbMonday), Date) + TimeValue("08:00:00") Application.OnTime EarliestTime:=runTime, Procedure:="GenerateWeeklyKPI", _ Schedule:=True
End Sub Sub GenerateWeeklyKPI() Dim wsData As Worksheet, wsRpt As Worksheet Dim startDate As Date, endDate As Date Dim totalSales As Double, orderCount As Long Set wsData = ThisWorkbook.Sheets("SalesData") Set wsRpt = ThisWorkbook.Sheets("WeeklyKPI") ' Xác định tuần trước endDate = Date - Weekday(Date, vbMonday) ' Chủ nhật của tuần trước startDate = endDate - 6 ' Thứ Hai của tuần trước ' Lọc dữ liệu và tính KPI Dim rng As Range, cell As Range Set rng = wsData.Range("A2:D" & wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row) totalSales = 0 orderCount = 0 For Each cell In rng.Columns(1).Cells ' Giả sử cột A là ngày If cell.Value >= startDate And cell.Value <= endDate Then totalSales = totalSales + cell.Offset(0, 2).Value ' Cột C = doanh thu orderCount = orderCount + 1 End If Next cell ' Ghi KPI vào sheet báo cáo wsRpt.Range("A2").Value = "Tuần từ " & Format(startDate, "dd/mm/yyyy") & " đến " & Format(endDate, "dd/mm/yyyy") wsRpt.Range("B2").Value = totalSales wsRpt.Range("C2").Value = orderCount wsRpt.Range("D2").Value = IIf(orderCount = 0, 0, totalSales / orderCount) ' Trung bình đơn ' Xuất PDF và gửi mail Call ExportSheetToPDF ' Được định nghĩa ở mục 3.2 Call SendReportEmail ' Được định nghĩa ở mục 3.1 ' Đặt lịch chạy lại cho tuần tới Call ScheduleWeeklyReport
End Sub
7. Các nguồn tài liệu và cộng đồng học VBA
- Microsoft Docs: Trang chính thức của Microsoft cung cấp tài liệu chi tiết về đối tượng Excel VBA, phương thức và thuộc tính.
- Stack Overflow: Cộng đồng lập trình viên quốc tế, nơi bạn có thể đặt câu hỏi và nhận câu trả lời nhanh chóng.
- MrExcel Forum: Diễn đàn chuyên về Excel, có rất nhiều chuyên gia chia sẻ macro thực tế.
- YouTube Channels: “ExcelIsFun”, “Leila Gharani” – các kênh video dạy VBA từ cơ bản tới nâng cao.
- Sách tham khảo: “Excel VBA Programming For Dummies”, “Power Programming with VBA/Excel”.
8. Kết luận
Với sức mạnh của VBA, Excel không còn chỉ là một công cụ bảng tính tĩnh mà trở thành một nền tảng tự động hoá toàn diện. Bài viết đã cung cấp một bộ sưu tập phong phú các đoạn mã VBA hữu ích, từ các macro cơ bản như mở CSV, lọc dữ liệu, đánh dấu trùng lặp, cho đến các giải pháp nâng cao như gửi email tự động, xuất PDF, tạo UserForm nhập liệu và tối ưu hiệu suất.
Bạn có thể áp dụng các bước sau để bắt đầu:
- Xác định nhu cầu thực tế: Liệt kê các công việc lặp lại, báo cáo định kỳ, hay quy trình cần tự động hoá.
- Chọn đoạn code phù hợp: Dựa vào danh mục trên, sao chép và tùy biến lại cho phù hợp với dữ liệu và quy trình của mình.
- Kiểm thử trên dữ liệu mẫu: Đảm bảo macro hoạt động chính xác, không gây mất mát dữ liệu.
- Tối ưu và bảo mật: Áp dụng các kỹ thuật tối ưu (tắt ScreenUpdating, dùng Array) và bảo vệ macro bằng mật khẩu nếu cần.
- Lưu trữ và chia sẻ: Đặt macro vào file
xlsmchung cho đội ngũ, đồng thời ghi lại hướng dẫn sử dụng để mọi người có thể khai thác.
Hãy bắt đầu viết macro ngay hôm nay, biến những công việc tẻ nhạt thành những thao tác một cú click, và cảm nhận sự khác biệt rõ rệt trong năng suất làm việc của bạn! Nếu gặp khó khăn, đừng ngần ngại tìm đến các cộng đồng và tài liệu đã liệt kê ở mục 7 – luôn có người sẵn sàng giúp đỡ. Chúc bạn thành công trong hành trình tự động hoá Excel!

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