Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic
Tháng Ba 13, 2023
Trong quá trình xử lý dữ liệu từ Exel, bạn sẽ thường gặp trường hợp file dữ liệu của bạn có nhiều cột và dòng có giá trị, và cần tách dữ liệu theo từng dòng được xác định trong bảng tính Exel thành nhiều file khác nhau theo bộ lọc của một dòng xác định. Ví dụ bạn có một bảng dữ liệu gồm cột nhân viên bán hàng, sản phẩm, ngày, doanh số bán hàng và cần tách dữ liệu trong Exel thành nhiều file khác nhau của từng nhân viên bán hàng. Cách làm thông thường là: Lọc từng cột nhân viên bán hàng, sau đó copy dữ liệu và dán vào một file khác, lưu file đó lại, sau đó lại lọc tiếp các nhân viên bán hàng khác và tạo, lưu file đến hết các nhân viên ở cột cần lọc. Điều này rất mất thời gian, bạn có thể tiết kiệm thời gian xử lý bằng hàm Visual Basic hay VBA sau để có thể tách dữ liệu trong file Exel thành nhiều file khác nhau một cách tự động.
Cách tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng VBA
Để có thể sử dụng đoạn mã Visual Basic trong xử lý trong Exel, đầu tiên bạn phải gọi được Tab Developer trong Exel.
Cách mở thẻ Developer như hướng dẫn tại đây của Microsoft Office
Sau khi đã mở được thẻ Developer trong Exel thì các bạn chọn thẻ Insert => Module

Sau đó bạn copy đoạn mã sau và nhấn run để chạy.
Sub ProcessData()
' anhbanhang.com doi ten sheet
If ActiveSheet.Name <> "Sheet1" Then
ActiveSheet.Name = "Sheet1"
End If
' anhbanhang.com
Dim dong_batdau As Integer
dong_batdau = InputBox("anhbanhang.com nhap dong bat dau/duoi tieu de:")
' anhbanhang.com
Dim dong_tieude As Integer
dong_tieude = dong_batdau - 1
' anhbanhang.com
Dim vung_1 As Range
Set vung_1 = Range(Cells(dong_batdau, 1), Cells(Rows.Count, 1).End(xlUp))
' anhbanhang.com
Dim sheet_DanhMuc As Worksheet
On Error Resume Next ' anhbanhang.com
Set sheet_DanhMuc = Worksheets("Danh_Muc")
On Error GoTo 0 ' B?t l?i vi?c báo l?i
If sheet_DanhMuc Is Nothing Then ' anhbanhang.com
Set sheet_DanhMuc = Worksheets.Add(After:=Worksheets(Worksheets.Count))
sheet_DanhMuc.Name = "Danh_Muc"
End If
Dim danhsach As Range
Set danhsach = sheet_DanhMuc.Range("A1")
vung_1.Copy danhsach
danhsach.CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlNo
'anhbanhang.com tach du lieu bang visual basic tren exel
Dim currentSheet As Worksheet
Dim danhMucSheet As Worksheet
'anhbanhang.com
Set currentSheet = ActiveWorkbook.Sheets("Sheet1")
Set danhMucSheet = ActiveWorkbook.Sheets("Danh_Muc")
'anhbanhang.com khoi tao gia tri
Dim giatri_chon As String
'duyet gia tri
Dim lastRow As Long
lastRow = danhMucSheet.Cells(Rows.Count, 1).End(xlUp).Row 'L?y s? dòng cu?i cùng c?a c?t A trong sheet danh_muc
For i = 1 To lastRow
'lay gia tri
giatri_chon = danhMucSheet.Cells(i, 1).Value
currentSheet.Range(currentSheet.Cells(dong_tieude, 1), currentSheet.Cells(currentSheet.Cells(Rows.Count, 1).End(xlUp).Row, currentSheet.Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter Field:=1, Criteria1:=giatri_chon
'anhbanhang.com copy du lieu duoc loc vao file exel moi
Dim newWorkbook As Workbook
Set newWorkbook = Workbooks.Add 'T?o workbook m?i
currentSheet.Range(currentSheet.Cells(dong_tieude, 1), currentSheet.Cells(currentSheet.Cells(Rows.Count, 1).End(xlUp).Row, currentSheet.Cells(1, Columns.Count).End(xlToLeft).Column)).SpecialCells(xlCellTypeVisible).Copy newWorkbook.Sheets(1).Range("A1")
newWorkbook.SaveAs giatri_chon & ".xlsx" 'Luu workbook m?i v?i tên là giá tr? du?c ch?n t? danh m?c
newWorkbook.Close SaveChanges:=False 'Ðóng workbook m?i
'anhbanhang.com
currentSheet.AutoFilterMode = False
Next i
MsgBox "Cam on cac ban da tin tuong www.anhbanhang.com truy cap de co them nhieu thong tin!"
End Sub
Ví dụ minh họa khi sử dụng đoạn mã VBA tách dữ liệu Exel thành nhiều file Exel khác nhau

Với bảng dữ liệu mô phỏng trên bạn sẽ có 1 sheet dữ liệu có các cột và dữ liệu cần tách là cột NVBH, bạn cần tách dữ liệu trong Exel thành nhiều file với mỗi file là mỗi dữ liệu của NVBH khác nhau như minh họa sau.

Lưu ý khi dùng đoạn mã trên tách dữ liệu Exel thành nhiều file khác nhau
Vì đoạn mã trên được tạo cho một tình huống nhất định nên khi sử dụng bạn cần lưu ý sau:
1. Chỉ tách dữ liệu theo dữ liệu ở cột đầu tiên, vì vậy bạn cần lưu ý khi tách dữ liệu thì chuyển dữ liệu cần dùng để tách ở cột đầu tiên của bảng tính Exel.
2. Các file dữ liệu được lưu tại thư mục cùng với file Exel đang sử dụng để tách dữ liệu và được lưu với tên của dữ liệu từ cột được tách.
3. Khi sử dụng thì lưu ý chọn sheet có dữ liệu cần tách trước khi chạy, không chọn cả bảng tính và thực hiện khi đang làm việc ở sheet dữ liệu cần tách.
4. Nếu trong file Exel có sheet có tên là sheet1 thì đổi tên sheet đó thành tên bất kỳ, tránh phát sinh lỗi không chạy được.
5. Đoạn mã trên sẽ tự động tạo một sheet mới là sheet Danh_muc.

6. Các file tạo thành trong Exel sẽ ở cơ chế ghi đè lên các file cũ cùng tên, nên các bạn lưu ý tránh mất dữ liệu nếu bị ghi đè.
7. Dữ liệu của file gốc sẽ vẫn giữ nguyên, chỉ bị đổi tên sheet dữ liệu bạn cần tách thành sheet1 và tạo thêm một sheet Danh_Mục
Như vậy với cách tách dữ liệu Exel thành nhiều fie khác nhau một cách tự động bằng mã VBA, bạn đã có thể tự động hóa khi cần tách dữ liệu thành nhiều file khác nhau một cách nhanh chóng.
Xem video hướng dẫn sau: