Xuất dữ liệu từ 1 file excel tổng ra nhiều file excel con

Liên hệ QC

dongthao

Thành viên mới
Tham gia
24/6/10
Bài viết
14
Được thích
2
Chào mọi người.
Mình có bài toán như sau, nhờ mọi người hỗ trợ.
Trong file dữ liệu tổng mình có rất nhiều NCC khác nhau.
Để quản lý và gửi cho từng nhà cung cấp riêng lẻ, thì từ file tổng mình phải xuất dữ liệu ra nhiều file.
Bây giờ mình muốn giải quyết bằng VBA , khi mình click vào nút xuất dữ liệu.
Thì từng cột giá trị liên quan đến NCC nào, sẽ được xuất ra file riêng lẻ theo định dạng có sẵn.
Mình có tạo dữ liệu mẫu như trong file đính kèm.
Nhờ mọi người giúp đỡ nhé.
 

File đính kèm

  • bcncc.zip
    48.3 KB · Đọc: 37
Bài này hay nè, mà chưa thấy anh chị nào vào xem giúp. Mình "tương tác" để nó ngoi lên giúp chủ thớt !
Xin lỗi vì mình không biết giải bài này. :(
 
Chào mọi người.
Mình có bài toán như sau, nhờ mọi người hỗ trợ.
Trong file dữ liệu tổng mình có rất nhiều NCC khác nhau.
Để quản lý và gửi cho từng nhà cung cấp riêng lẻ, thì từ file tổng mình phải xuất dữ liệu ra nhiều file.
Bây giờ mình muốn giải quyết bằng VBA , khi mình click vào nút xuất dữ liệu.
Thì từng cột giá trị liên quan đến NCC nào, sẽ được xuất ra file riêng lẻ theo định dạng có sẵn.
Mình có tạo dữ liệu mẫu như trong file đính kèm.
Nhờ mọi người giúp đỡ nhé.
Dùng thử code này xem sao?
Mã:
Public Sub GPE()
Dim i%, j%, Arr, Path As String, NewWb, Wb
Dim fso As Object, sFile As String
Set fso = CreateObject("Scripting.FileSystemObject")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
    Set Wb = ThisWorkbook
    Path = ThisWorkbook.Path
    Arr = Sheet1.Range("A3", Sheet1.[F65000].End(3)).Value
   
    j = UBound(Arr)
        For i = 2 To UBound(Arr, 2)
            sFile = Path & "\" & Arr(1, i) & ".xlsx"
            If fso.FileExists(sFile) Then
                Set NewWb = Workbooks.Open(sFile)
                With NewWb
                    Wb.Sheets(1).Range("A3").Resize(j).Copy .Sheets(1).[A3]
                    Wb.Sheets(1).Range("A3").Offset(, i - 1).Resize(j).Copy .Sheets(1).[B3]
                    .Close True
                End With
            End If
        Next i
    j = UBound(Arr, 2)
        For i = 2 To UBound(Arr)
            sFile = Path & "\" & Arr(i, 1) & ".xlsx"
            If fso.FileExists(sFile) Then
                Set NewWb = Workbooks.Open(sFile)
                With NewWb
                    Wb.Sheets(1).Range("A3").Resize(, j).Copy .Sheets(1).[A3]
                    Wb.Sheets(1).Range("A4").Offset(i - 2).Resize(, j).Copy .Sheets(1).[A4]
                    .Close True
                End With
            End If
        Next i
       
    Set NewWb = Nothing
    Set fso = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Da thuc hien viec tach du lieu xong"
End Sub
 
Các anh, các chị ơi! Em cũng có 1 vấn đề tương tự là xuất từ file tổng ra các file con; nhưng ở file Tổng mức độ chi tiết và cách trình bày vùng kết xuất trên bảng tính cũng phức tạp hơn bài của bạn @dongthao
Em xin nhờ các anh, chị hỗ trợ code cho em để xuất ra các file con. Như em trình bày sau ạ
+ Trên file Tổng, Click vào Nút Kết Xuất File, có 1 userform hiện ra, nhập số tháng muốn kết xuất, Click tiếp OK.
Phần này em đã làm được Userform và đã khoanh được vùng khi nhập tháng vào Textbox của Userform (em xuất kết quả vùng được lựa chọn ra ô B1 và C1 trên sheet các anh chị nhé). Sau khi chọn xong tháng trên Userform, người dùng Click tiếp OK Export File (đến đây thì em không biết code tiếp như thế nào ạ). Em trình bày bằng hình ảnh
Untitled.png
Sau khi Click vào nút OK Export File trên Userform của File Tổng, code sẽ tạo ra các file con như hình ạ
Untitled2.png
Các file con sẽ chính là kết quả của việc lọc các giá trị ở cột Cửa hàng tương ứng tại vùng tháng đã chọn ạ.
Ví dụ đây là hình ảnh của file con của Theo dõi tháng 3 cửa hàng d được xuất từ file tổng ạ

Untitled4.png
Cơ chế lọc từ file tổng để ra file con tháng 3 cửa hàng D như hình này ạ
Untitled3.png

Chi tiết em gửi file tổng và các file con đã làm ra kết quả thủ công
(Vì đơn vị em các nhân viên luân chuyển từ cửa hàng này sang cửa hàng kia nhiều và thường nghỉ việc đột xuất nên em cần theo dõi trên 1 file tổng để hàng hàng xuất file gửi Mail và yêu cầu từng cửa hàng thu tiền Công đoàn của các nhân viên theo danh sách)
Rất mong nhận được sự giúp đỡ của các anh chị
 

File đính kèm

  • Theo doi KPCD2020.rar
    104 KB · Đọc: 15
NHờ các anh, các chị và các bạn xem và tìm hướng xử lý giúp mình ở #4 với
 
Chào mọi người.
Mình có bài toán như sau, nhờ mọi người hỗ trợ.
Trong file dữ liệu tổng mình có rất nhiều NCC khác nhau.
Để quản lý và gửi cho từng nhà cung cấp riêng lẻ, thì từ file tổng mình phải xuất dữ liệu ra nhiều file.
Bây giờ mình muốn giải quyết bằng VBA , khi mình click vào nút xuất dữ liệu.
Thì từng cột giá trị liên quan đến NCC nào, sẽ được xuất ra file riêng lẻ theo định dạng có sẵn.
Mình có tạo dữ liệu mẫu như trong file đính kèm.
Nhờ mọi người giúp đỡ nhé.
Mình cũng có công việc giống với chủ thớt àm toàn phải làm thủ công, nhung duwxc liệu của mình lại lấy theo hàng chứ k theo cột
Bài đã được tự động gộp:

File của mình đây ạ, Các cao nhân giúp mình với. Cảm ơn trước ạ
 

File đính kèm

  • THÁNG 05-2020 TO ACC - Copy.xlsx
    214.6 KB · Đọc: 17
Lần chỉnh sửa cuối:
Chà! Cái thớt này nhiều người nhờ vả thật. Mà sao chủ thớt chẳng quan tâm code chạy đúng không và cảm ơn người giúp mình 1 tiếng nhỉ (hơn nửa tháng rồi chứ ít đâu)?
 
Chà! Cái thớt này nhiều người nhờ vả thật. Mà sao chủ thớt chẳng quan tâm code chạy đúng không và cảm ơn người giúp mình 1 tiếng nhỉ (hơn nửa tháng rồi chứ ít đâu)?
1/ Chủ Topic đã có nhấn nút cám ơn bạn giaiphap rồi, có nghĩa là họ đã sử dụng Code ở bài 3 được rồi nên không có ý kiến gì thêm, nếu họ sử dụng không được thì tự khắc họ sẽ lên tiếng.
2/ File bài 4 và bài 6 cũng đã có vài thành viên tải về rồi, khi làm xong thì họ mới giúp code.
 
NHờ các anh, các chị và các bạn xem và tìm hướng xử lý giúp mình ở #4 với
Bạn xem nhé!
Hi vọng đúng ý bạn.
Tôi có thêm 1 sheets("Danh sach gui email") dùng để tham chiếu, tiện sẵn nếu có dùng để viết code gửi mail tự động sẽ dùng đến.
 

File đính kèm

  • Theo doi KPCD.xlsb
    45 KB · Đọc: 27
Các anh, các chị ơi! Em cũng có 1 vấn đề tương tự là xuất từ file tổng ra các file con; nhưng ở file Tổng mức độ chi tiết và cách trình bày vùng kết xuất trên bảng tính cũng phức tạp hơn bài của bạn @dongthao
Em xin nhờ các anh, chị hỗ trợ code cho em để xuất ra các file con. Như em trình bày sau ạ
+ Trên file Tổng, Click vào Nút Kết Xuất File, có 1 userform hiện ra, nhập số tháng muốn kết xuất, Click tiếp OK.
Phần này em đã làm được Userform và đã khoanh được vùng khi nhập tháng vào Textbox của Userform (em xuất kết quả vùng được lựa chọn ra ô B1 và C1 trên sheet các anh chị nhé). Sau khi chọn xong tháng trên Userform, người dùng Click tiếp OK Export File (đến đây thì em không biết code tiếp như thế nào ạ). Em trình bày bằng hình ảnh

Sau khi Click vào nút OK Export File trên Userform của File Tổng, code sẽ tạo ra các file con như hình ạ

Các file con sẽ chính là kết quả của việc lọc các giá trị ở cột Cửa hàng tương ứng tại vùng tháng đã chọn ạ.
Ví dụ đây là hình ảnh của file con của Theo dõi tháng 3 cửa hàng d được xuất từ file tổng ạ

Cơ chế lọc từ file tổng để ra file con tháng 3 cửa hàng D như hình này ạ



Chi tiết em gửi file tổng và các file con đã làm ra kết quả thủ công
(Vì đơn vị em các nhân viên luân chuyển từ cửa hàng này sang cửa hàng kia nhiều và thường nghỉ việc đột xuất nên em cần theo dõi trên 1 file tổng để hàng hàng xuất file gửi Mail và yêu cầu từng cửa hàng thu tiền Công đoàn của các nhân viên theo danh sách)
Rất mong nhận được sự giúp đỡ của các anh chị
Tôi chỉ góp thêm cho vui cửa vui nhà về việc dùng Dictionary để lọc dữ liệu lấy ra 5 mảng cho 5 cửa hàng.
Khởi đầu có 2 sheet, gồm KPCD2020 chứa dữ liệu và Sheet1 nhận kết quả. Dữ liệu nguồn lấy hết từ A3 đến AA96 của KPCD2020. Bạn nào gặp kiểu tương tự như vậy thì tùy biến chút xíu để sử dụng.
PHP:
Sub TrichXuat()
Dim ArrKQ, tmpArr, ArriTem
Dim Dic1 As Object, irow As Long, irow2 As Long, icol As Long, i As Long, j As Long
Dim Sh As Worksheet, ShKQ As Worksheet
Dim sFile As String, NewWb As Workbook, Wb As Workbook

Set Wb = ThisWorkbook
Set Sh = Wb.Sheets("KPCD2020")
Set ShKQ = Wb.Sheets("Sheet1")
Set Dic1 = CreateObject("Scripting.Dictionary")

    Application.ScreenUpdating = False
    tmpArr = Sh.Range("A4:AA" & Sh.Range("B" & Sh.Rows.Count).End(xlUp).Row).Value

ReDim ArrKQ(1 To UBound(tmpArr, 1), 1 To 27)
ReDim ArriTem(1 To UBound(tmpArr, 1), 1 To 27)

    For irow = 1 To UBound(tmpArr, 1)

        If Not IsEmpty(tmpArr(irow, 4)) And Not Dic1.Exists(tmpArr(irow, 4)) Then
    
            i = i + 1
        
            Dic1.Add tmpArr(irow, 4), i

            For irow2 = 1 To UBound(tmpArr, 1)
                If tmpArr(irow2, 4) = tmpArr(irow, 4) Then
                    j = j + 1
                    For icol = 1 To 27
                        ArriTem(j, icol) = tmpArr(irow2, icol)
                    Next
                End If
            Next
        
            Dic1(tmpArr(irow, 4)) = ArriTem
        
            With ShKQ
                .Range("A3:AA10000").ClearContents
                .Range("A3").Resize(j, 27) = Dic1.Item(tmpArr(irow, 4))
            End With
        
            sFile = Wb.Path & "\" & tmpArr(irow, 4) & ".xlsx"
            Set NewWb = Workbooks.Add
            With NewWb
                ShKQ.Range("A1:AA" & j + 2).Copy .Sheets(1).Range("A1")
                 .Sheets(1).Name = tmpArr(irow, 4)
                Application.DisplayAlerts = False
                .Close True, sFile
            
            End With
            j = 0
    
        End If
    
    Next irow

    Application.DisplayAlerts = True

    Application.ScreenUpdating = True

Set Dic1 = Nothing
    MsgBox "Xong roi ban nhe!"
End Sub
 
Lần chỉnh sửa cuối:
Mình cũng có công việc giống với chủ thớt àm toàn phải làm thủ công, nhung duwxc liệu của mình lại lấy theo hàng chứ k theo cột
Bài đã được tự động gộp:

File của mình đây ạ, Các cao nhân giúp mình với. Cảm ơn trước ạ
File ví dụ hơi bị ẩu. Mã số cần tìm dùng để lọc chẳng có trong file, và cột mã số lại đưa tít ra đằng xa cái bảng dữ liệu
 
File ví dụ hơi bị ẩu. Mã số cần tìm dùng để lọc chẳng có trong file, và cột mã số lại đưa tít ra đằng xa cái bảng dữ liệu
:( file lương của mình đấy. do mỗi nhà cung cấp lại có cn làm tại các bộ phận khác nhau nên mã nhà cung cấp mình phải để ở phía cuối bảng dữ liệu( ở cột bộ phận trong bảng lương cũng có mã này). Bảng này mình gửi bên kế toán và các nhà cung cấp sau khi đã tách mà bạn kêu ẩu :((
 
:( file lương của mình đấy. do mỗi nhà cung cấp lại có cn làm tại các bộ phận khác nhau nên mã nhà cung cấp mình phải để ở phía cuối bảng dữ liệu( ở cột bộ phận trong bảng lương cũng có mã này). Bảng này mình gửi bên kế toán và các nhà cung cấp sau khi đã tách mà bạn kêu ẩu :((
:wallbash: Bạn đưa nó sát với cái bảng ngó không đẹp hơn à? Dữ liệu phải liền khối chứ. Rồi giả sử ai đó code rồi bạn lại muốn đưa vào thì lại phải hỏi nữa sao?
 
:wallbash: Bạn đưa nó sát với cái bảng ngó không đẹp hơn à? Dữ liệu phải liền khối chứ. Rồi giả sử ai đó code rồi bạn lại muốn đưa vào thì lại phải hỏi nữa sao?
à không, vì trong cột bộ phận đã có rồi, mình chỉ lấy mã ra để dễ nhìn hơn và vlookup tên của các nhà cung cấp theo mã thôi ( có nhiều mã thì k nhớ nổi tên nên phải làm vậy). và dĩ nhiên là k cần đưa vào cùng 1 khối dữ liệu với bảng lương ạ. cái file mẫu mình gửi lên là file chứa sheet tổng và các sheet nhà cung cấp mình tách thủ công để gửi kế toán, còn mình lại phải tách thủ công để tạo thành file con để gửi từng nhà cung cấp.
 
à không, vì trong cột bộ phận đã có rồi, mình chỉ lấy mã ra để dễ nhìn hơn và vlookup tên của các nhà cung cấp theo mã thôi ( có nhiều mã thì k nhớ nổi tên nên phải làm vậy). và dĩ nhiên là k cần đưa vào cùng 1 khối dữ liệu với bảng lương ạ. cái file mẫu mình gửi lên là file chứa sheet tổng và các sheet nhà cung cấp mình tách thủ công để gửi kế toán, còn mình lại phải tách thủ công để tạo thành file con để gửi từng nhà cung cấp.
Tôi nghĩ bạn nên dành cột AC để vlookup ra cái tên nhà cung cấp cho nó liền khối chứ trong bảng đã có đâu
 
Tôi nghĩ bạn nên dành cột AC để vlookup ra cái tên nhà cung cấp cho nó liền khối chứ trong bảng đã có đâu
Hix vậy tách theo mã nhà cung cấp cũng được không nhất thiết tách theo tên thì mã nhà cung cấp có sẵn trong bảng dữ liệu rồi. còn cái phần mã và tên nhà cung cấp không liền khối kia là tự mình làm để tách thủ công thôi mà. :(
 
Bạn xem nhé!
Hi vọng đúng ý bạn.
Tôi có thêm 1 sheets("Danh sach gui email") dùng để tham chiếu, tiện sẵn nếu có dùng để viết code gửi mail tự động sẽ dùng đến.
Em cảm ơn anh vanthinh3101 nhiều code cho cửa hàng A,B,C,D,E ra đúng rồi, nhưng em cũng rất xin lỗi anh , khi mà đưa file lên, em lại cho dữ liệu tên cửa hàng dốt quá, cũng hơi ẩu toàn lấy A,B,C.. , mà thực tế các cửa hàng của em lấy theo tên phố, khi em đổi tên cửa hàng chạy code nó không ra, mong anh bớt chút thời gian xem lại giúp em với nhé.
(trước rất hâm mộ anh, vì anh có nhiều bài giải rất công phu mà bẵng một thời gian không thấy anh đâu...., gần đây mới lại có dịp nhìn thấy anh)Untitled.png
 

File đính kèm

  • Theo doi kpcd.rar
    98.8 KB · Đọc: 9
Em cảm ơn anh vanthinh3101 nhiều code cho cửa hàng A,B,C,D,E ra đúng rồi, nhưng em cũng rất xin lỗi anh , khi mà đưa file lên, em lại cho dữ liệu tên cửa hàng dốt quá, cũng hơi ẩu toàn lấy A,B,C.. , mà thực tế các cửa hàng của em lấy theo tên phố, khi em đổi tên cửa hàng chạy code nó không ra, mong anh bớt chút thời gian xem lại giúp em với nhé.
(trước rất hâm mộ anh, vì anh có nhiều bài giải rất công phu mà bẵng một thời gian không thấy anh đâu...., gần đây mới lại có dịp nhìn thấy anh)View attachment 240774
Bạn lưu ý, tôi đã nói là tôi thêm 1 sheet.
Tôi lấy danh sách tham chiếu ở Sheet đó.
Bạn phải tạo 1 danh sách chuẩn cửa hàng ở sheet đó để code tham chiếu và chạy đúng nhé!
Không phải sửa code đâu.
 
Bạn lưu ý, tôi đã nói là tôi thêm 1 sheet.
Tôi lấy danh sách tham chiếu ở Sheet đó.
Bạn phải tạo 1 danh sách chuẩn cửa hàng ở sheet đó để code tham chiếu và chạy đúng nhé!
Không phải sửa code đâu.
Vâng! em hiểu rồi, mình sửa lại danh sách cửa hàng ở Sheet1 là được rồi ạ. Cảm ơn anh nhiều
 
Vâng! em hiểu rồi, mình sửa lại danh sách cửa hàng ở Sheet1 là được rồi ạ. Cảm ơn anh nhiều
Bạn nên tìm hiểu cách gửi mail tự động luôn.
Sau khi tách được file, soạn thảo email đến địa chỉ email đã thiết lập sẵn, attach file vừa tạo --> Send.
Chúc bạn thành công.
 
Web KT
Back
Top Bottom