Tách sheet theo nhiều điều kiện

Liên hệ QC

thao nguyen01

Thành viên thường trực
Tham gia
8/12/19
Bài viết
214
Được thích
25
Kính gửi anh/chị trên diễn đàn,

Em bị vướng vấn đề tách sheet như sau ạ: Em muốn tách sheet dựa vào đơn vị và khách hàng. Nếu từng đơn vị gắn với mỗi khách hàng (cột J và K) trùng với ô D2 và D3 thì sẽ lọc ra, sau đó tách sheet tương ứng
Mã:
Sub baocao()
Dim i As Long
Dim k As Long
Dim dcuoi As Long
Dim arr_N()
Dim arr_D()
Dim kh As String
Dim donvi As String


dcuoi = Sheet1.Range("A1000").End(xlUp).Row
arr_N = Sheet1.Range("A3:G" & dcuoi)
ReDim arr_D(1 To UBound(arr_N, 1), 1 To 7)
kh = Sheet2.Range("D3")
donvi = Sheet2.Range("D2")

For i = 1 To UBound(arr_N, 1)
    If arr_N(i, 2) = donvi And arr_N(i, 3) = kh Then
        k = k + 1
        'arr_D(k, 1) = k
        arr_D(k, 1) = arr_N(i, 1)
        arr_D(k, 2) = arr_N(i, 2)
        arr_D(k, 3) = arr_N(i, 3)
        arr_D(k, 4) = arr_N(i, 4)
        arr_D(k, 5) = arr_N(i, 5)
        arr_D(k, 6) = arr_N(i, 6)
        arr_D(k, 7) = arr_N(i, 7)
        End If
Next
Sheet2.Range("A6:G1000").Clear
Sheet2.Range("A6").Resize(k, 7) = arr_D


End Sub
Sub tachsheet()

Dim i As Long
Dim k As Long
Dim arr_DS()
Dim arr_DS02()
Dim arr_D()
Dim dcuoi As Long
Dim dcuoi02 As Long
Dim sh As Worksheet

Application.DisplayAlerts = False
dcuoi = Sheet2.Range("J1000").End(xlUp).Row
arr_DS = Sheet2.Range("J2:J" & dcuoi)

dcuoi02 = Sheet2.Range("K10000").End(xlUp).Row
arr_DS02 = Sheet2.Range("K2:K" & dcuoi02)


For Each sh In Worksheets
    If sh.Name <> "data" And sh.Name <> "bao cao" Then
        sh.Delete
    End If
Next

For i = 1 To UBound(arr_DS, 1)
    For j = 1 To UBound(arr_DS02, 1)
        If Sheet2.Range("D2") = arr_DS(i, 1) And Sheet2.Range("D3") = arr_DS02(j, 1) Then
            Call baocao
            Sheet2.Copy before:=Sheet2
            ActiveSheet.Name = arr_DS(i, 1) & "_" & arr_DS02(j, 1)
            Sheet2.Activate
        End If
    Next
Next
Application.DisplayAlerts = False
End Sub
Em có ví dụ sheet Chi nhánh A-Nguyễn Tuấn Anh. Tương tự sẽ là Chi nhánh A-Trần Thanh Bình

Anh/chị xem giúp em ạ. Em cảm ơn anh/chị nhiều ạ.
 

File đính kèm

  • file01.xlsb
    21.8 KB · Đọc: 19
Dạ, em xin lỗi ạ. Code em viết xong gặp chút vấn đề: Vì em cho xoá sheet khác "data" và "bao cao" nên khi vòng lặp chạy thì nó lại xoá sheet vừa tách trước đó. Em cũng chưa biết xử lý sao nữa.
Kết quả mong muốn của bạn như thế nào nhỉ, mình xem xong nhưng chưa hiểu được.
 
Upvote 0
Kết quả mong muốn của bạn như thế nào nhỉ, mình xem xong nhưng chưa hiểu được.
Kết quả mong muốn của mình là: Dựa vào cột J và K bên sheet "bao cao" gán nó vào ô D2, D3 và lọc data theo đó. Nếu có kết quả sẽ tách sheet theo điều kiện lọc đó ạ.
 
Upvote 0
Trong ví dụ của bạn thì Chi nhánh A - Trần Thanh Bình lấy từ đâu ra vậy.
Mình lấy từ data lọc theo đơn vị là chi nhánh A và tên khách hàng là Nguyễn Tuấn Anh. Mình cho lần lượt vòng lặp cột J và K gán vào đơn vị và chi nhánh để lọc, sau đó tách sheet vừa lọc ra.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình lấy từ data lọc theo đơn vị là chi nhánh A và tên khách hàng là Trần Thanh Bình. Mình cho lần lượt vòng lặp cột J và K gán vào đơn vị và chi nhánh để lọc, sau đó tách sheet vừa lọc ra.
Trong data của bạn không có trường hợp đấy mà, nên mình mới hỏi từ đâu ra.
 
Upvote 0
Kính gửi anh/chị trên diễn đàn,

Em bị vướng vấn đề tách sheet như sau ạ: Em muốn tách sheet dựa vào đơn vị và khách hàng. Nếu từng đơn vị gắn với mỗi khách hàng (cột J và K) trùng với ô D2 và D3 thì sẽ lọc ra, sau đó tách sheet tương ứng

Em có ví dụ sheet Chi nhánh A-Nguyễn Tuấn Anh. Tương tự sẽ là Chi nhánh A-Trần Thanh Bình

Anh/chị xem giúp em ạ. Em cảm ơn anh/chị nhiều ạ.
Cách bạn trình bày mong muốn cũng hơi khó hiểu. Mình sửa thử thế này xem coi được không. Nếu không đúng ý thì coi như cách để bạn tham khảo. Trong sheet data mình thêm một cột dk cần tách. Khi cần tách thì đánh x vào dòng đó
 

File đính kèm

  • Copy of file01-1.xlsb
    27 KB · Đọc: 19
Upvote 0
Cách bạn trình bày mong muốn cũng hơi khó hiểu. Mình sửa thử thế này xem coi được không. Nếu không đúng ý thì coi như cách để bạn tham khảo. Trong sheet data mình thêm một cột dk cần tách. Khi cần tách thì đánh x vào dòng đó
Mình cũng đoán lờ mờ như vậy, nhưng không lẽ 200 khách hàng thì phải rải ra 200 sheet bạn nhỉ.
 
Upvote 0
Cách bạn trình bày mong muốn cũng hơi khó hiểu. Mình sửa thử thế này xem coi được không. Nếu không đúng ý thì coi như cách để bạn tham khảo. Trong sheet data mình thêm một cột dk cần tách. Khi cần tách thì đánh x vào dòng đó
Dạ, anh viết đúng các sheet em cần tách ạ. Nhưng vì dữ liệu của em khoảng 1000 dòng, nên em muốn dựa vào các cột J và K cho chạy vòng lặp, nếu có sẽ lấy ra và tách sheet ạ. Dữ liệu nhiều nên nếu dùng cột phụ em sẽ không kiểm soát có đánh sót các sheet cần tách không ạ. Nếu có thể, anh giúp em với ạ. Em cảm ơn anh.
Bài đã được tự động gộp:

Mình cũng đoán lờ mờ như vậy, nhưng không lẽ 200 khách hàng thì phải rải ra 200 sheet bạn nhỉ.
dạ, không nhiều khách như vậy ạ. Nhưng data khoảng 1000 dòng. Vì một khách có thể mua nhiều ngày trong tháng ạ.
 
Upvote 0
Dạ, anh viết đúng các sheet em cần tách ạ. Nhưng vì dữ liệu của em khoảng 1000 dòng, nên em muốn dựa vào các cột J và K cho chạy vòng lặp, nếu có sẽ lấy ra và tách sheet ạ. Dữ liệu nhiều nên nếu dùng cột phụ em sẽ không kiểm soát có đánh sót các sheet cần tách không ạ. Nếu có thể, anh giúp em với ạ. Em cảm ơn anh.
Bài đã được tự động gộp:


dạ, không nhiều khách như vậy ạ. Nhưng data khoảng 1000 dòng. Vì một khách có thể mua nhiều ngày trong tháng ạ.
Vậy bạn nên đưa nhiều dữ liệu hơn và kết quả sheet ví dụ cũng nhiều hơn chứ cách trình bày của bạn khó hình dung quá.
 
Upvote 0
Vậy bạn nên đưa nhiều dữ liệu hơn và kết quả sheet ví dụ cũng nhiều hơn chứ cách trình bày của bạn khó hình dung quá.
Dạ, mình gửi lại file ạ. Chi nhánh A- Nguyễn Tuấn Anh sẽ có nhiều ngày trong tháng, miễn trùng điều kiện lọc ạ
 

File đính kèm

  • file01.xlsb
    22.8 KB · Đọc: 12
Upvote 0
Dạ, anh viết đúng các sheet em cần tách ạ. Nhưng vì dữ liệu của em khoảng 1000 dòng, nên em muốn dựa vào các cột J và K cho chạy vòng lặp, nếu có sẽ lấy ra và tách sheet ạ. Dữ liệu nhiều nên nếu dùng cột phụ em sẽ không kiểm soát có đánh sót các sheet cần tách không ạ. Nếu có thể, anh giúp em với ạ. Em cảm ơn anh.
Bài đã được tự động gộp:


dạ, không nhiều khách như vậy ạ. Nhưng data khoảng 1000 dòng. Vì một khách có thể mua nhiều ngày trong tháng ạ.
Thêm một dạng trích lọc để bạn tham khảo. Trong sheet Tach, tại dòng số 2 (tô vàng), bạn muốn lọc gì cũng rất thuận tiện
Không đúng mong muốn thì coi như tham khảo nhé
 

File đính kèm

  • Copy of file01-1.xlsb
    22.8 KB · Đọc: 23
Upvote 0
Thêm một dạng trích lọc để bạn tham khảo. Trong sheet Tach, tại dòng số 2 (tô vàng), bạn muốn lọc gì cũng rất thuận tiện
Không đúng mong muốn thì coi như tham khảo nhé
Dạ, em học thêm được dạng trích lọc nữa. Em cảm ơn anh nhiều.
 
Upvote 0
Nếu có nhiều chi nhánh và nhiều nhân viên thì tách sheet không hiệu quả vì chỉ rối thêm,...

Nếu chỉ cần thống kê, in báo cáo ... --> sheet baocao có các tùy chọn chi nhánh tại cell D2 và khách hàng tại ô D3 là OK ... chọn * khi ALL
 

File đính kèm

  • file01 (2).xlsm
    212.9 KB · Đọc: 17
Upvote 0
Dạ, em cảm ơn anh
Bài đã được tự động gộp:

Nếu có nhiều chi nhánh và nhiều nhân viên thì tách sheet không hiệu quả vì chỉ rối thêm,...

Nếu chỉ cần thống kê, in báo cáo ... --> sheet baocao có các tùy chọn chi nhánh tại cell D2 và khách hàng tại ô D3 là OK ... chọn * khi ALL
Dạ, em cảm ơn anh
 
Upvote 0
Web KT
Back
Top Bottom