Trần Văn Huệ
Trần Văn Huệ
Thảo luận 0 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 2152 lượt xem

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Aug 27 2020

Mặc định sẽ không có cách nào để bạn tách riêng các sheets trong Excel thành các file riêng biệt. Tuy nhiên dưới đây Gitiho sẽ Hướng dẫn cách tách từng sheets trong file Excel thành các tập tin riêng thông qua mã VBA vô cùng đơn giản. 

Tách từng sheets thành các tập tin Excel riêng biệt

Ví dụ bạn có một file Excel như được hiển thị bên dưới, giờ muốn tách mỗi một sheets thành một file Excel riêng biệt cho mỗi tháng. 

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Để thực hiện, bạn có thể sử dụng đoạn mã VBA bên dưới:

'Code Created by Gitiho.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ó một số điều bạn cần đảm bảo trước khi sử dụng mã VBA ở trên:

- Tạo một thư mục nơi mà bạn muốn xuất tất cả các sheets sau khi tách ra.

- Lưu tập tin Excel chính (có tất cả các sheets mà bạn muốn tách riêng các sheets) trong thư mục này.

Khi bạn đã hoàn thành việc này, sau đó bạn có thể chèn mã VBA ở trên vào tập tin và chạy mã.

Đoạn mã trên được viết theo cách mà nó sẽ chọn vị trí của thư mục bằng cách sử dụng đường dẫn của tập tin (trong đó mã được chạy). Đây là lý do tại sao điều quan trọng là phải lưu tập tin trong thư mục trước và sau đó sử dụng mã này.

Mã VBA hoạt động như thế nào?

Đoạn mã trên sử dụng một vòng lặp For Next đơn giản đi qua từng sheets, tạo một bản sao của sheets trong file Excel, rồi lưu file Excel này trong thư mục được chỉ định.

Dưới đây là các bước để chèn mã VBA này trong file Excel (các bước này sẽ giống nhau đối với tất cả các phương pháp khác được sử dụng trong bài này):

Chèn mã này ở đâu?

Dưới đây là các bước để chèn mã trong Visual Basic Editor:

Bước 1: Trong file Excel cần chèn mã, truy cập vào tab Developer.

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Bước 2: Trong nhóm Code, bấm nút Visual Basic ở góc trên cùng bên trái. Thao tác này sẽ mở trình soạn thảo VB (bạn cũng có thể sử dụng tổ hợp phím tắt - ALT + F11).

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Bước 3: Trong cửa sổ VB Editor hiển thị, kích chuột phải vào bất kỳ đối tượng nào của sổ làm việc mà bạn đang làm việc.

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Bước 4: Di con trỏ qua tùy chọn Insert.

Bước 5: Chọn tùy chọn Module. Thao tác này sẽ chèn một module mới

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Bước 6: Bấm đúp vào đối tượng module mới sẽ mở cửa sổ mã cho module này.

Bước 7: Sao chép mã VBA được cung cấp ở trên và dán vào cửa sổ mã module này.

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Bước 8: Chọn bất kỳ dòng nào trong mã và bấm vào nút Play màu xanh lá cây trên thanh công cụ để chạy mã macro VBA.


Các bước trên sẽ ngay lập tức chia các sheets thành các tập tin Excel riêng biệt và lưu chúng. Chỉ mất một giây nếu bạn có ít sheets, nhưng sẽ mất một chút thời gian nếu file Excel của bạn có nhiều sheets riêng lẻ.

Tên của mỗi tập tin Excel được lưu sẽ giống với tên sheets mà nó có trong tập tin chính.

Hướng dẫn cách tách từng sheets trong xcel thành các tập tin riêng

Vì đã đặt mã VBA trong file Excel nên bạn cần lưu mã này với định dạng .XLSM (là định dạng hỗ trợ macro). Điều này sẽ đảm bảo macro được lưu và hoạt động khi bạn mở tập tin này sau này.

Lưu ý: Bạn có thể sử dụng các dòng mã Application.ScreenUpdating = False và Application.DisplayAlerts = False nếu muốn mọi thứ xảy ra trong nền mà không có thông báo hay bất kỳ điều gì đang xảy ra trên màn hình của file Excel đang được xử lý.

Cách tốt nhất, bạn nên tạo một bản sao lưu của file Excel gốc (có các sheets mà bạn muốn tách). Điều này sẽ đảm bảo bạn không bị mất dữ liệu trong trường hợp có bất kỳ sự cố nào xảy ra. 

Tách từng sheets và lưu dưới dạng PDF riêng biệt

Trong trường hợp bạn muốn tách các sheets trong một file Excel và lưu  dưới định dạng tập tin PDF thay vì tệp Excel, bạn có thể sử dụng mã dưới đây:

'Code Created by Gitiho.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 & ".xlsx"
Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


Những điều bạn cần đảm bảo trước khi sử dụng mã này:

- Tạo một thư mục nơi mà bạn muốn xuất tất cả các sheets sau khi tách ra.

- Lưu tập tin Excel chính (có tất cả các sheets mà bạn muốn tách riêng các sheets) trong thư mục này.

- Đoạn mã trên sẽ chia từng sheets trong file Excel gốc và lưu dưới dạng PDF trong cùng thư mục nơi bạn đã file Excel ban đầu.

Chỉ tách những sheets có chứa từ/cụm từ thành các file Excel riêng 

Trong trường hợp bạn có nhiều sheets trong một file Excel và chỉ muốn tách những sheets có văn bản cụ thể trong đó, bạn cũng có thể thực hiện điều đó.

Ví dụ: Bạn có một file Excel trong đó có dữ liệu trong nhiều năm và mỗi sheets trong file có số năm làm tiền tố. 

Bây giờ, giả sử bạn muốn tách tất cả các sheets của năm 2020 và lưu thành các tập tin Excel riêng biệt. Để thực hiện việc này, bạn cần phải kiểm tra bằng cách nào đó tên của mỗi sheets và chỉ những sheets có số 2020 mới được tách và lưu, các sheets còn lại sẽ giữ nguyên.

Điều này có thể được thực hiện bằng cách sử dụng mã macro VBA sau :

'Code Created by Gitiho.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


Trong đoạn mã trên, chúng ta đã sử dụng một biến TexttoFind được gán cho “2020” ngay từ đầu. Mã VBA sau đó sử dụng vòng lặp For Next trong VBA để đi qua từng sheets và sau đó kiểm tra tên của mỗi sheets thông qua hàm INSTR. Hàm này sẽ kiểm tra xem tên các sheets có từ 2020 hay không. 

Nếu có, nó sẽ trả về số vị trí nơi tìm thấy văn bản này (trong trường hợp này là năm 2020). Nếu không tìm thấy văn bản chúng ta đang tìm kiếm, nó sẽ trả về 0.

Điều này được sử dụng với điều kiện IF Then. Do đó nếu tên sheets có chuỗi văn bản 2020, nó sẽ được tách và lưu thành một tập tin riêng biệt. Nếu không có chuỗi văn bản này, điều kiện IF sẽ không được đáp ứng và không có gì xảy ra.

CÓ THỂ BẠN CŨNG QUAN TÂM
Hướng dẫn cách sử dụng Hàm IF trong Excel đơn giản dễ hiểu
Hướng dẫn cách thao tác trình bày định dạng bảng dữ liệu trong Excel chuẩn nhất
Hướng dẫn cách tạo bảng dữ liệu tiêu chuẩn trên Excel

Cuối cùng, đừng quên tham khảo khóa học EXG01 - Tuyệt đỉnh Excel - Trở thành bậc thầy Excel trong 16 giờ của Gitiho bạn nhé! Hẹn gặp lại các bạn trong những bài viết tiếp theo. 


Cùng tham gia cộng đồng hỏi đáp về chủ đề VBA

Thảo luận 0 câu trả lời
Lượt xem 2152 lượt xem
Vỗ tay vỗ tay

0 Bình luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội