Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic

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 Off By Anh bán hàng
Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic

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

Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic

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

 

Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic

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.

Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic

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.

Tách dữ liệu trong Exel thành nhiều file khác nhau tự động bằng Visual Basic

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: