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

dongthao

Thành viên mới
Tham gia ngày
24 Tháng sáu 2010
Bài viết
14
Được thích
2
Điểm
665
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

tiniluu123

Có bao giờ bạn tự hỏi "Tôi là ai?"
Tham gia ngày
25 Tháng một 2019
Bài viết
192
Được thích
100
Điểm
180
Nơi ở
Mỹ Tho- Tiền Giang
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. :(
 

giaiphap

==(^o^)==
Tham gia ngày
12 Tháng ba 2007
Bài viết
5,238
Được thích
4,877
Điểm
860
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
 

Excel my love_1

Thành viên thường trực
Tham gia ngày
12 Tháng mười một 2019
Bài viết
207
Được thích
130
Điểm
195
Tuổi
31
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

Excel my love_1

Thành viên thường trực
Tham gia ngày
12 Tháng mười một 2019
Bài viết
207
Được thích
130
Điểm
195
Tuổi
31
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
 

ngocha1114

Thành viên mới
Tham gia ngày
28 Tháng mười một 2017
Bài viết
13
Được thích
10
Điểm
165
Tuổi
30
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

Lần chỉnh sửa cuối:

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
589
Được thích
500
Điểm
210
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)?
 

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
9,573
Được thích
9,348
Điểm
560
Tuổi
63
Nơi ở
Biên Hòa, Đồng Nai
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.
 

vanthinh3101

Thành viên tích cực
Tham gia ngày
24 Tháng một 2015
Bài viết
907
Được thích
1,032
Điểm
560
Tuổi
32
Nơi ở
Hà Nội
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

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
589
Được thích
500
Điểm
210
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:

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
589
Được thích
500
Điểm
210
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
 

ngocha1114

Thành viên mới
Tham gia ngày
28 Tháng mười một 2017
Bài viết
13
Được thích
10
Điểm
165
Tuổi
30
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 :((
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
589
Được thích
500
Điểm
210
:( 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?
 

ngocha1114

Thành viên mới
Tham gia ngày
28 Tháng mười một 2017
Bài viết
13
Được thích
10
Điểm
165
Tuổi
30
: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.
 

Maika8008

Thành viên từ sao Hỏa
Tham gia ngày
12 Tháng sáu 2020
Bài viết
589
Được thích
500
Điểm
210
à 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
 

ngocha1114

Thành viên mới
Tham gia ngày
28 Tháng mười một 2017
Bài viết
13
Được thích
10
Điểm
165
Tuổi
30
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à. :(
 

Excel my love_1

Thành viên thường trực
Tham gia ngày
12 Tháng mười một 2019
Bài viết
207
Được thích
130
Điểm
195
Tuổi
31
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

vanthinh3101

Thành viên tích cực
Tham gia ngày
24 Tháng một 2015
Bài viết
907
Được thích
1,032
Điểm
560
Tuổi
32
Nơi ở
Hà Nội
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.
 

Excel my love_1

Thành viên thường trực
Tham gia ngày
12 Tháng mười một 2019
Bài viết
207
Được thích
130
Điểm
195
Tuổi
31
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
 

vanthinh3101

Thành viên tích cực
Tham gia ngày
24 Tháng một 2015
Bài viết
907
Được thích
1,032
Điểm
560
Tuổi
32
Nơi ở
Hà Nội
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.
 
Top Bottom