Skip to content

Edupedia

  • Home
  • Excel Tips
  • VBA Tips

Edupedia

  • Home » 
  • Excel Tips » 
  • Cách Tách Từng Sheet Trong Excel Thành File Riêng Biệt Bằng VBA

Cách Tách Từng Sheet Trong Excel Thành File Riêng Biệt Bằng VBA

By Edupedia Tháng 2 20, 2026 0
File Excel chứa nhiều sheet dữ liệu cho các tháng khác nhau
Table of Contents

Thời gian đọc ước tính: 5 phút

Những điểm chính

  • Tự động hóa: Sử dụng VBA để thay thế thao tác thủ công tốn kém thời gian và dễ sai sót.
  • Đa dạng định dạng: Hỗ trợ tách sheet thành file Excel (.xlsx) hoặc file PDF.
  • Lọc có điều kiện: Khả năng chỉ tách các sheet chứa từ khóa cụ thể (ví dụ: theo năm hoặc tên bộ phận).
  • Quy trình an toàn: Hướng dẫn chi tiết cách thiết lập môi trường và lưu trữ dữ liệu trước khi chạy mã.

Việc quản lý một tệp Excel (workbook) chứa hàng chục, thậm chí hàng trăm trang tính (worksheet) là một thách thức lớn về mặt tổ chức dữ liệu. Trong nhiều trường hợp, bạn cần gửi báo cáo riêng lẻ cho từng bộ phận, khách hàng hoặc lưu trữ dữ liệu theo từng tháng riêng biệt. Việc sao chép thủ công từng sheet ra một file mới không chỉ kém hiệu quả mà còn tiềm ẩn nguy cơ sai lệch dữ liệu cao.

Giải pháp tối ưu nhất cho vấn đề này là sử dụng mã VBA (Visual Basic for Applications). Phương pháp này cho phép bạn tách toàn bộ các sheet thành các file riêng biệt chỉ trong vài giây. Bài viết này sẽ cung cấp các đoạn mã chuẩn xác và hướng dẫn từng bước để thực hiện quy trình này một cách an toàn.

Tách từng Worksheet thành file Excel riêng biệt

Đây là nhu cầu phổ biến nhất khi xử lý dữ liệu tổng hợp. Giả sử bạn có một file tổng hợp chứa dữ liệu doanh thu của 12 tháng, mỗi tháng nằm trên một sheet riêng biệt. Mục tiêu là tạo ra 12 file Excel độc lập từ file gốc này.

File Excel chứa nhiều sheet dữ liệu cho các tháng khác nhauFile Excel chứa nhiều sheet dữ liệu cho các tháng khác nhau

Để thực hiện, bạn hãy sử dụng đoạn mã VBA dưới đây. Mã này sẽ duyệt qua từng sheet và lưu chúng thành file mới trong cùng thư mục với file gốc.

'Code Created by Sumit Bansal from trumpexcel.com
Sub SplitEachWorksheet()
    Dim FPath As String
    FPath = Application.ActiveWorkbook.Path
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        Application.ActiveWorkbook.SaveAs Filename:=FPath & "" & ws.Name & ".xlsx"
        Application.ActiveWorkbook.Close False
    Next

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Cơ chế hoạt động của đoạn mã:
Đoạn mã trên sử dụng vòng lặp For Each để đi qua từng worksheet trong workbook hiện tại. Với mỗi sheet, hệ thống thực hiện lệnh Copy để tạo ra một workbook mới chỉ chứa sheet đó. Sau đó, lệnh SaveAs sẽ lưu file mới này vào đường dẫn FPath (thư mục chứa file gốc) với tên file trùng với tên sheet. Cuối cùng, các lệnh ScreenUpdating và DisplayAlerts được đặt về False để tắt cập nhật màn hình và cảnh báo, giúp quá trình chạy mượt mà hơn.

Điều kiện tiên quyết trước khi chạy mã:

  1. Tạo thư mục lưu trữ: Bạn nên tạo một thư mục mới dành riêng cho việc chứa các file kết quả.
  2. Lưu file gốc: File Excel chứa mã VBA và các sheet cần tách phải được lưu vào thư mục này trước khi chạy mã. Điều này giúp biến Application.ActiveWorkbook.Path xác định chính xác vị trí lưu file đầu ra.

Hướng dẫn chi tiết cách chèn và chạy mã VBA

Quy trình đưa mã vào Excel và thực thi không yêu cầu kiến thức lập trình chuyên sâu. Bạn chỉ cần thực hiện chính xác theo trình tự các bước dưới đây để đảm bảo mã hoạt động đúng.

Bước 1: Mở trình soạn thảo VBA
Trên thanh công cụ của Excel, bạn tìm đến tab Developer. Nếu tab này chưa hiển thị, bạn có thể kích hoạt nó trong phần Excel Options.

Vị trí tab Developer trên thanh công cụ ExcelVị trí tab Developer trên thanh công cụ Excel

Trong nhóm Code, nhấn chọn biểu tượng Visual Basic. Thao tác này sẽ mở ra cửa sổ Microsoft Visual Basic for Applications. Một cách nhanh hơn là sử dụng tổ hợp phím tắt ALT + F11.

Chọn Visual Basic để mở trình biên tập mã VBAChọn Visual Basic để mở trình biên tập mã VBA

Bước 2: Tạo Module mới
Tại giao diện Project Explorer (thường nằm bên trái), bạn nhấp chuột phải vào tên của workbook đang làm việc.

Nhấp chuột phải vào đối tượng trong Project ExplorerNhấp chuột phải vào đối tượng trong Project Explorer

Di chuyển chuột đến mục Insert và chọn Module. Một Module mới sẽ xuất hiện trong danh sách, đây là nơi chứa đoạn mã xử lý.

Chọn Module để thêm khung nhập mã mớiChọn Module để thêm khung nhập mã mới

Bước 3: Dán và chạy mã
Nhấp đúp chuột vào Module vừa tạo để mở cửa sổ soạn thảo. Sao chép đoạn mã VBA phù hợp với nhu cầu của bạn (Excel hoặc PDF) và dán vào đây.

Dán đoạn mã VBA vào cửa sổ ModuleDán đoạn mã VBA vào cửa sổ Module

Để thực thi, bạn đặt con trỏ chuột vào bất kỳ dòng nào trong đoạn mã, sau đó nhấn nút Play (hình tam giác màu xanh lá) trên thanh công cụ hoặc nhấn phím F5.

Sau khi quá trình hoàn tất, bạn mở thư mục đã tạo ở bước đầu tiên. Các file mới sẽ xuất hiện đầy đủ tương ứng với từng sheet trong file gốc. Tên file sẽ được đặt tự động theo tên của sheet.

Kết quả các file Excel riêng biệt sau khi táchKết quả các file Excel riêng biệt sau khi tách

Lưu ý quan trọng: Vì file Excel của bạn hiện có chứa mã Macro, bạn bắt buộc phải lưu file gốc dưới định dạng Excel Macro-Enabled Workbook (.xlsm). Nếu lưu dưới dạng .xlsx thông thường, đoạn mã VBA sẽ bị xóa khi bạn đóng file.

Tách từng Worksheet và lưu dưới dạng PDF

Trong môi trường doanh nghiệp, định dạng PDF thường được ưa chuộng để gửi báo cáo cuối cùng nhằm tránh việc chỉnh sửa số liệu. Bạn có thể thay đổi mã VBA một chút để xuất trực tiếp từng sheet thành file PDF thay vì file Excel.

Sử dụng đoạn mã sau để thực hiện chuyển đổi sang PDF:

'Code Created by Sumit Bansal from trumpexcel.com
Sub SplitEachWorksheet()
    Dim FPath As String
    FPath = Application.ActiveWorkbook.Path
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        Application.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FPath & "" & ws.Name & ".pdf"
        Application.ActiveWorkbook.Close False
    Next

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Đoạn mã này sử dụng phương thức ExportAsFixedFormat với tham số Type:=xlTypePDF. Kết quả đầu ra sẽ là các file PDF nằm trong cùng thư mục với file gốc, giữ nguyên tên của từng sheet.

Tách Worksheet có điều kiện dựa trên tên Sheet

Một tình huống thực tế khác là bạn chỉ muốn tách các sheet thỏa mãn một điều kiện nhất định, thay vì toàn bộ workbook. Ví dụ: Bạn có dữ liệu của nhiều năm (2019, 2020, 2021) và chỉ muốn trích xuất các sheet thuộc năm “2020”.

Bạn có thể sử dụng hàm InStr để kiểm tra sự tồn tại của chuỗi ký tự cụ thể trong tên sheet. Dưới đây là đoạn mã thực hiện việc lọc và tách này:

'Code Created by Sumit Bansal from trumpexcel.com
Sub SplitEachWorksheet()
    Dim FPath As String
    Dim TexttoFind As String
    TexttoFind = "2020"
    FPath = Application.ActiveWorkbook.Path
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each ws In ThisWorkbook.Sheets
        If InStr(1, ws.Name, TexttoFind, vbBinaryCompare) > 0 Then
            ws.Copy
            Application.ActiveWorkbook.SaveAs Filename:=FPath & "" & ws.Name & ".xlsx"
            Application.ActiveWorkbook.Close False
        End If
    Next

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Giải thích logic lọc:
Biến TexttoFind được gán giá trị “2020”. Vòng lặp sẽ kiểm tra từng tên sheet. Nếu hàm InStr trả về giá trị lớn hơn 0 (nghĩa là tìm thấy chuỗi “2020” trong tên sheet), lệnh copy và lưu file mới được thực thi. Ngược lại, nếu không tìm thấy, mã sẽ bỏ qua sheet đó và chuyển sang sheet tiếp theo. Bạn có thể thay đổi giá trị trong TexttoFind thành bất kỳ từ khóa nào phù hợp với dữ liệu của mình (ví dụ: “Báo cáo”, “HN”, “HCM”).

FAQ (Câu hỏi thường gặp)

1. Làm thế nào nếu tôi không thấy tab Developer?
Bạn có thể kích hoạt tab này bằng cách: Nhấp chuột phải vào bất kỳ đâu trên thanh Ribbon > Chọn Customize the Ribbon > Tích vào ô Developer ở cột bên phải > Nhấn OK.

2. Tôi có thể hoàn tác (Undo) sau khi chạy mã VBA không?
Không, các thao tác thực hiện bởi VBA thường không thể hoàn tác bằng lệnh Undo (Ctrl+Z). Do đó, nguyên tắc an toàn là luôn sao lưu (backup) file gốc trước khi chạy bất kỳ đoạn mã nào.

3. Mã VBA có chạy được trên Excel cho MacBook không?
Cấu trúc hệ thống tệp của MacOS khác với Windows, nên các lệnh liên quan đến đường dẫn (Path) có thể cần điều chỉnh. Đoạn mã trên được tối ưu cho môi trường Windows. Trên Mac, bạn có thể cần thay đổi cách trích xuất đường dẫn hoặc dấu phân cách thư mục.

4. Tại sao màn hình của tôi bị nháy khi chạy code?
Để tránh hiện tượng này, trong mã đã có dòng Application.ScreenUpdating = False. Nếu bạn vẫn thấy nháy hoặc mã chạy chậm, hãy kiểm tra xem bạn đã sao chép đủ dòng lệnh này ở đầu và trả về True ở cuối đoạn mã chưa.

5. Định dạng file .xlsm có an toàn không?
File .xlsm là định dạng chuẩn của Excel hỗ trợ Macro. Tuy nhiên, khi nhận file .xlsm từ người lạ, bạn cần cẩn trọng vì macro có thể chứa mã độc. Với mã bạn tự viết hoặc sao chép từ nguồn uy tín như bài viết này, nó hoàn toàn an toàn để sử dụng.

Nguồn tham khảo

  1. Microsoft Learn: Tài liệu hướng dẫn về vòng lặp For Each…Next trong VBA
  2. Microsoft Learn: Phương thức Workbook.SaveAs
  3. Excel Campus: Cách lưu sheet thành file PDF bằng VBA
  4. CFI (Corporate Finance Institute): Hướng dẫn về các loại lỗi thường gặp trong VBA
Share
facebookShare on FacebooktwitterShare on TwitterpinterestShare on Pinterest
linkedinShare on LinkedinvkShare on VkredditShare on ReddittumblrShare on TumblrviadeoShare on ViadeobufferShare on BufferpocketShare on PocketwhatsappShare on WhatsappviberShare on ViberemailShare on EmailskypeShare on SkypediggShare on DiggmyspaceShare on MyspacebloggerShare on Blogger YahooMailShare on Yahoo mailtelegramShare on TelegramMessengerShare on Facebook Messenger gmailShare on GmailamazonShare on AmazonSMSShare on SMS
Post navigation
Previous post

Cách Ẩn Công Thức Trong Excel: Bảo Vệ Dữ Liệu Và Logic Tính Toán

Next post

Hướng Dẫn Toàn Tập Về Hyperlink Trong Excel: Cách Tạo, Quản Lý Và Tự Động Hóa

Edupedia

Edupedia

Related Posts

Categories Excel Tips Cách Tách Từng Sheet Trong Excel Thành File Riêng Biệt Bằng VBA

Hàm XLOOKUP Trong Excel: Hướng Dẫn Chi Tiết Và 11 Ví Dụ Ứng Dụng (2026)

Categories Excel Tips Cách Tách Từng Sheet Trong Excel Thành File Riêng Biệt Bằng VBA

Hướng Dẫn Chi Tiết Cách Xóa Định Dạng Trong Excel (Cập Nhật 2025)

Categories Excel Tips Cách Tách Từng Sheet Trong Excel Thành File Riêng Biệt Bằng VBA

Cách Sắp Xếp Tên Theo Thứ Tự ABC Trong Excel (Theo Họ) – Hướng Dẫn Chi Tiết

Leave a Comment Hủy

Edupedia

Edupedia

Tùy chọn Office Insider trong phần Tài khoản Excel

Hàm XLOOKUP Trong Excel: Hướng Dẫn Chi Tiết Và 11 Ví Dụ Ứng Dụng (2026)

Tháng 2 20, 2026
Nhấn vào tam giác màu xám ở góc trái để chọn toàn bộ bảng tính

Hướng Dẫn Chi Tiết Cách Xóa Định Dạng Trong Excel (Cập Nhật 2025)

Tháng 2 20, 2026
Names to Sort by Last Name

Cách Sắp Xếp Tên Theo Thứ Tự ABC Trong Excel (Theo Họ) – Hướng Dẫn Chi Tiết

Tháng 2 20, 2026
Tùy chọn sắp xếp trong thẻ Data của Excel

Hướng Dẫn Chi Tiết Cách Sắp Xếp Dữ Liệu Trong Excel: Từ Cơ Bản Đến Nâng Cao

Tháng 2 20, 2026
Insert Tab in Excel Ribbon

6 Cách Chèn Ký Hiệu Delta (Δ) Trong Excel: Hướng Dẫn Chi Tiết Từ A-Z

Tháng 2 20, 2026
Copyright © 2026 Edupedia
Offcanvas
Offcanvas

  • Lost your password ?