Lọc dữ liệu sang sheet mới theo một điều kiện nhưng ở nhiều cột khác nhau (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nguyen6571gpex

Thành viên thường trực
Tham gia
22/4/11
Bài viết
279
Được thích
80
Nghề nghiệp
Dạy học
Chào tất cả AE!
Nhờ AE giúp đỡ lọc dữ liệu theo hưỡng dẫn trong File!
Trân trọng cám ơn!
 

File đính kèm

Bạn dùng Advance filter là xong ngay sao phải Code, hoặc có Code thì ghi lại macro

Tại sheets TH ô H1 điền chữ "Năm học" giống hệt chữ đó bên tiêu đề sheets Data

sau đó advance filter => Bạn tìm hiểu diễn đàn về cái này nhé

Hoặc sau đó chạy code sau - nó cũng là ghi lại thao tác advance filter thôi
Mã:
Sub Loc()
    [A6:AT65536].ClearContents
    Sheets("Data").[A5:AT10000].AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("H1:H2"), CopyToRange:=Range("A5:AT5")
End Sub
 
Cảm ơn bạn dhn46!
mình đã chạy thử nhưng chưa đúng ý tưởng. Ví dụ: chạy năm học 2013-2014 thì chỉ lọc ra những em sinh năm 2007 (đang họ lớp 1) còn lại các em sinh năm 2006 hiện đang học lớp 2 ở cột T và những em sinh năm 2005 hiện đang học lớp 3 ở cột W,.... thì không lọc được. Còn về chức năng advance fiter thì mình sẽ tiimf hiểu tiếp.
Cảm ơn bạn hpkhuong đúng như ý bạn nêu trên đó!
Nhờ các bạn giúp đỡ!
 
Lần chỉnh sửa cuối:
Nếu vậy thì Advance cũng sửa 1 chút thôi.
 

File đính kèm

Hên xui nhé.

Mã:
Public Sub GPE()
Dim Arr, dArr, I As Long, K As Long, J As Long, Dk As String
With Sheet1
    Arr = .Range("B6", .Range("B65000").End(3)).Resize(, 45).Value
End With
ReDim dArr(1 To UBound(Arr), 1 To 48)
Dk = Range("H2").Value
For I = 1 To UBound(Arr)
    If Arr(I, 16) Like Dk Or Arr(I, 19) Like Dk Or Arr(I, 22) Like Dk Or _
    Arr(I, 25) Like Dk Or Arr(I, 28) Like Dk Or Arr(I, 31) Like Dk Then
        K = K + 1
        dArr(K, 1) = K
        For J = 1 To 45
            dArr(K, J + 1) = Arr(I, J)
        Next J
        If Len(Arr(I, 3)) <= 3 Then
            dArr(K, 47) = Val(Left(Arr(I, 3), Len(Arr(I, 3)) - 1))
            dArr(K, 48) = Right(Arr(I, 3), 1)
        Else
            dArr(K, 47) = Arr(I, 3)
        End If
    End If
Next I
    If K Then
        Range("A6").Resize(K, 48).Value = dArr
        Range("B6").Resize(K, 47).Sort Range("AU6"), xlAscending, Range("AV6"), , xlAscending
        Range("AU6").Resize(K, 2).ClearContents
    End If
End Sub
Bạn kiểm tra giúp xem khi chạy Code thì dữ lieuj loạn hết luôn
 
Nếu vậy thì Advance cũng sửa 1 chút thôi.
Bạn chỉnh giúp mình. phần lọc đã được song khi lọc được dữ liệu thì tên lớp học của những HS đã qua một số năm đều đổi thành lớp giống nhau hết. VD những HS sinh năm 2005 đều học lớp 1 qua các năm chứ không phải là lớp 1 > lớp 2 > lớp 3 > lớp 4 > lớp 5 và năm học 2016-2017 chưa có lớp (sau này sẽ là HTCTTH
 
Bạn chỉnh giúp mình. phần lọc đã được song khi lọc được dữ liệu thì tên lớp học của những HS đã qua một số năm đều đổi thành lớp giống nhau hết. VD những HS sinh năm 2005 đều học lớp 1 qua các năm chứ không phải là lớp 1 > lớp 2 > lớp 3 > lớp 4 > lớp 5 và năm học 2016-2017 chưa có lớp (sau này sẽ là HTCTTH
Bạn có để ý tôi đã sửa tiêu đề 1 chút: của bạn là năm thì thành năm 1, năm 2, năm 3...
Vậy bạn cũng sửa tưởng tự với lớp => lớp 1, lớp 2...

Chú ý: sửa cả 2 bên data với TH => code thực chất chỉ là thao tác Advance filter mà thôi.
 
Loạn chỗ nào vậy bạn??? Bạn muốn sau khi chạy code thì sort theo cột số CT2 (1a, 1b, 1c,...) mà...
Bạn chưa hiểu ý mình, cụ thể thế nay:
- Chọn một năm học bất kỳ VD 2015-2016
- Lọc tất cả các HS có năm học như vậy gồm: những HS sinh năm 2009 thì đang học lớp 1 tại cột Q (có cả 1A,1B,1C,1D) những hS sinh năm 2008 thì đang học lớp 2 ở cột T, những HS sinh năm 2007 thì đang học lớp 3 ở cột W, ... những HS sinh năm 2005 thì đang học lớp 5 ở cột AC và với qui luật này tôi tiếp tục bổ sung những HS sinh năm 2004 sẽ có năm học 2015-2016 ở cột AF là HTCTTH.
- Phải giữ nguyên tên các năm học và tên các lớp học trước hoặc sau năm học hiện có
Như thế cũng đã được rồi!
- Còn chỉ lọc như vậy mà giữ nguyên dữ liệu thì HS lớp lớn hơn sẽ ở trên HS lớp bé sẽ ở dưới.
Mình muốn khi đã lọc được như vậy mà lại sắp xếp các dữ liệu đã lọc được theo thứ tự từ 1A, 1B, .... đến 5C, 5D và HTCTTH của năm học đang được chọn để lọc đó thì càng tuyệt vời hơn! Bạn giúp mình với nhé. Cảm ơn!
 
Đúng vậy bạn hpkhuong nhé!
 
Bạn có để ý tôi đã sửa tiêu đề 1 chút: của bạn là năm thì thành năm 1, năm 2, năm 3...
Vậy bạn cũng sửa tưởng tự với lớp => lớp 1, lớp 2...

Chú ý: sửa cả 2 bên data với TH => code thực chất chỉ là thao tác Advance filter mà thôi.
Đã chạy được đúng ý. Và bây giờ mới phát sinh sai lầm của tôi không biết có xử lí được không? làm phiền bạn thêm đây: Khi chọn năm nào đó để lọc thì chỉ hiển thị năm học hiện tại và năm học trước đó, còn những năm học sau thì không cần hiển thị. VD khi chọn 2014-2015 thì những HS sinh năm 2008 chỉ hiển thị lớp năm học 2014-2015 học lớp 1, không hiển thị năm học 2015-2016 vì khi đó chưa đi học. Tương tự HS sinh năm 2007 chỉ hiển thị năm học 2013-2014 học lớp 1 và 2014-2015 học lớp 2 còn 2015-2016 chưa đi học. Trân trọng!
 
Báo cáo có lỗi không chạy được thưa hpkhuong!
 
Đã chạy được đúng ý. Và bây giờ mới phát sinh sai lầm của tôi không biết có xử lí được không? làm phiền bạn thêm đây: Khi chọn năm nào đó để lọc thì chỉ hiển thị năm học hiện tại và năm học trước đó, còn những năm học sau thì không cần hiển thị. VD khi chọn 2014-2015 thì những HS sinh năm 2008 chỉ hiển thị lớp năm học 2014-2015 học lớp 1, không hiển thị năm học 2015-2016 vì khi đó chưa đi học. Tương tự HS sinh năm 2007 chỉ hiển thị năm học 2013-2014 học lớp 1 và 2014-2015 học lớp 2 còn 2015-2016 chưa đi học. Trân trọng!

Bạn xử lý trên data nhé vì tôi thấy bạn dùng công thức tại data. Mà dựa vào năm sinh để thiết đặt liệu có "mạo hiểm" không? Bỏ sót trường hợp học sớm, học muộn thì sao bạn?
 
Bạn xử lý trên data nhé vì tôi thấy bạn dùng công thức tại data. Mà dựa vào năm sinh để thiết đặt liệu có "mạo hiểm" không? Bỏ sót trường hợp học sớm, học muộn thì sao bạn?
Cảm ơn bạn đã giúp đỡ! Tối qua tôi đã xử lí bằng Conditional Formating để dễ quan sát và tạm ổn rồi. Còn dựa vào năm sinh có thể ảnh hưởng đến học sớm học muộn, với trường hợp "hi hữu" này phải sửa trực tiếp vậy! Một lần nữa trân trọng cảm ơn tất cả các bạn!
 
Web KT

Bài viết mới nhất

Back
Top Bottom