Lọc dữ liệu theo nhiều điều kiện (1 người xem)

Liên hệ QC

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

Ai_Ma_Biet

Thành viên hoạt động
Tham gia
22/4/15
Bài viết
127
Được thích
20
Giới tính
Nam
Chào Anh, Chị.

Mình có file Excel gồm 2 sheet.

Sheet "Chi tiet" thể hiện tất cả dữ liệu nguyên 1 năm: từ cột A đến cột M
Sheet "Tong hop" mình muốn lọc dữ liệu từ sheet "Chi tiet" theo điều kiện tại O2 đến Q3 như sau:
O2 là ngày bắt đầu
O3 là ngày kết thúc
P2 là MSKH cần lọc
Q2 là MSGM cần lọc
Nếu P2 không có dữ liệu thì chỉ xét theo điều kiện O2,O3, Q2
Nếu Q2 không có dữ liệu thì chỉ xét theo điều kiện O2,O3, P2.
Nếu cả P2 và Q2 không có dữ liệu thì chỉ xét điều kiện tại O2, O3.

Cám ơn Anh chị.
Mình có làm mẫu sẵn tại sheet "Tong hop"
 

File đính kèm

Chào Anh, Chị.

Mình có file Excel gồm 2 sheet.

Sheet "Chi tiet" thể hiện tất cả dữ liệu nguyên 1 năm: từ cột A đến cột M
Sheet "Tong hop" mình muốn lọc dữ liệu từ sheet "Chi tiet" theo điều kiện tại O2 đến Q3 như sau:
O2 là ngày bắt đầu
O3 là ngày kết thúc
P2 là MSKH cần lọc
Q2 là MSGM cần lọc
Nếu P2 không có dữ liệu thì chỉ xét theo điều kiện O2,O3, Q2
Nếu Q2 không có dữ liệu thì chỉ xét theo điều kiện O2,O3, P2.
Nếu cả P2 và Q2 không có dữ liệu thì chỉ xét điều kiện tại O2, O3.

Cám ơn Anh chị.
Mình có làm mẫu sẵn tại sheet "Tong hop"
Vận dụng các ô điều kiện để dùng Advanced Filter là được.
 
Chào Anh, Chị.

Mình có file Excel gồm 2 sheet.

Sheet "Chi tiet" thể hiện tất cả dữ liệu nguyên 1 năm: từ cột A đến cột M
Sheet "Tong hop" mình muốn lọc dữ liệu từ sheet "Chi tiet" theo điều kiện tại O2 đến Q3 như sau:
O2 là ngày bắt đầu
O3 là ngày kết thúc
P2 là MSKH cần lọc
Q2 là MSGM cần lọc
Nếu P2 không có dữ liệu thì chỉ xét theo điều kiện O2,O3, Q2
Nếu Q2 không có dữ liệu thì chỉ xét theo điều kiện O2,O3, P2.
Nếu cả P2 và Q2 không có dữ liệu thì chỉ xét điều kiện tại O2, O3.

Cám ơn Anh chị.
Mình có làm mẫu sẵn tại sheet "Tong hop"
Nếu biết VBA thì bạn chạy code này xem nhé.
Mã:
Sub loc()
    Dim i As Long, lr As Long, ngaybd As Long, ngaykt As Long, T, arr, kq, dk As String, dks As String, N(), a As Long
    Dim T1, b As Integer, k As Integer, j As Integer
    With Sheets("chi tiet")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 2 Then Exit Sub
         arr = .Range("A2:M" & lr).Value
         ReDim kq(1 To UBound(arr), 1 To 13)
    End With
    With Sheets("tong hop")
         ngaybd = .Range("o2").Value
         ngaykt = .Range("o3").Value
         T = Array(9, 10)
         T1 = .Range("p2:q2")
         For i = 1 To 2
             If Len(T1(1, i)) > 0 Then
                b = b + 1
                dk = dk & "#" & T1(1, i)
                ReDim Preserve N(1 To b)
                N(b) = T(i - 1)
             End If
         Next i
         For i = 1 To UBound(arr)
             If CLng(arr(i, 1)) >= ngaybd And CLng(arr(i, 1)) <= ngaykt Then
                dks = Empty
                For k = 1 To b
                    dks = dks & "#" & arr(i, N(k))
                Next k
                If dk = dks Then
                   a = a + 1
                   For j = 1 To 13
                       kq(a, j) = arr(i, j)
                   Next j
                End If
            End If
         Next i
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 2 Then .Range("A2:M" & lr).ClearContents
         If a Then .Range("A2:M2").Resize(a).Value = kq
    End With
End Sub
 
Nếu biết VBA thì bạn chạy code này xem nhé.
Mã:
Sub loc()
    Dim i As Long, lr As Long, ngaybd As Long, ngaykt As Long, T, arr, kq, dk As String, dks As String, N(), a As Long
    Dim T1, b As Integer, k As Integer, j As Integer
    With Sheets("chi tiet")
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr < 2 Then Exit Sub
         arr = .Range("A2:M" & lr).Value
         ReDim kq(1 To UBound(arr), 1 To 13)
    End With
    With Sheets("tong hop")
         ngaybd = .Range("o2").Value
         ngaykt = .Range("o3").Value
         T = Array(9, 10)
         T1 = .Range("p2:q2")
         For i = 1 To 2
             If Len(T1(1, i)) > 0 Then
                b = b + 1
                dk = dk & "#" & T1(1, i)
                ReDim Preserve N(1 To b)
                N(b) = T(i - 1)
             End If
         Next i
         For i = 1 To UBound(arr)
             If CLng(arr(i, 1)) >= ngaybd And CLng(arr(i, 1)) <= ngaykt Then
                dks = Empty
                For k = 1 To b
                    dks = dks & "#" & arr(i, N(k))
                Next k
                If dk = dks Then
                   a = a + 1
                   For j = 1 To 13
                       kq(a, j) = arr(i, j)
                   Next j
                End If
            End If
         Next i
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         If lr > 2 Then .Range("A2:M" & lr).ClearContents
         If a Then .Range("A2:M2").Resize(a).Value = kq
    End With
End Sub
Cám ơn Anh nhiều. Anh có thể sửa giúp Em trường hợp này:
Chỗ Q2 nếu điền vào MSGM thì sẽ lọc loại trừ MSGM đó ra, còn lại sẽ lọc hết.
 

File đính kèm

Ý là giờ thêm cách lọc là sẽ loại những MSGM có tại Q2 để tiện lọc theo nhiều cách.
Thua luôn rồi..................
Trong file bài #6, ô Q2 bạn có 3 lựa chọn:
1/ Để trống: Lấy tất các mã
2/ Nhập 1 mã, ví dụ "GMA", lọc chỉ lấy mã "GMA"
3/ Nhập "<>GMA", lọc lấy tất cả các mã khác với "GMA".
Tương tự bạn có thể áp dụng cho ô P2.
Các ngày trong O1 và O2 bắt buộc phải có.
Bạn muốn có bao nhiêu cái "tiện..." nữa?
 
Lần chỉnh sửa cuối:
Ý là giờ thêm cách lọc là sẽ loại những MSGM có tại Q2 để tiện lọc theo nhiều cách.
Bạn thử tải file trong bài này về tham khảo thêm bài này xem có ứng dụng được gì không, trong file đó có rất nhiều các làm khác nhau:
 
Bạn thử tải file trong bài này về tham khảo thêm bài này xem có ứng dụng được gì không, trong file đó có rất nhiều các làm khác nhau:
Bài trong link đó có điều kiện tìm kiếm không chuẩn mà cứ khoe hoài. Bài chủ đề này xài Acvanced filter của lão @Ba Tê là đủ, cái đó chuẩn.
 
Bài trong link đó có điều kiện tìm kiếm không chuẩn mà cứ khoe hoài. Bài chủ đề này xài Acvanced filter của lão @Ba Tê là đủ, cái đó chuẩn.
Ơ, chú Mỹ cứ thù con cái vụ dữ liệu không chuẩn chỉnh nhỉ hehe.
Thầy BaTê mà tham gia thì không còn gì mà chê được nữa. Nhưng vì con thấy bạn đó đòi tiện hơn gì đó mới bảo qua đó tham khảo thêm nhiêug cách khác nữa ạ.
 
Thua luôn rồi..................
Trong file bài #6, ô Q2 bạn có 3 lựa chọn:
1/ Để trống: Lấy tất các mã
2/ Nhập 1 mã, ví dụ "GMA", lọc chỉ lấy mã "GMA"
3/ Nhập "<>GMA", lọc lấy tất cả các mã khác với "GMA".
Tương tự bạn có thể áp dụng cho ô P2.
Các ngày trong O1 và O2 bắt buộc phải có.
Bạn muốn có bao nhiêu cái "tiện..." nữa?
Chỗ đổi ngày qua dạng số nhìn bất tiện, làm trực tiếp tại O2, O3 luôn được không.
 
x

xóa luôn được không.
Được chứ bạn, bạn có thể xử lý trong code chuyển vùng điều kiện lọc ra chỗ khác tránh xa vùng dữ liệu của bạn gọi là vùng tạm.
Sau đó code sẽ đưa dữ liệu điều kiện lọc vào các vùng này (link từ từ các ô mà bạn muốn) sau khi lọc dữ liệu xong code xóa sạch cái vùng tạm này đi không để lại dấu vết.
 
Được chứ bạn, bạn có thể xử lý trong code chuyển vùng điều kiện lọc ra chỗ khác tránh xa vùng dữ liệu của bạn gọi là vùng tạm.
Sau đó code sẽ đưa dữ liệu điều kiện lọc vào các vùng này (link từ từ các ô mà bạn muốn) sau khi lọc dữ liệu xong code xóa sạch cái vùng tạm này đi không để lại dấu vết.
làm giúp mình đi
 
Bạn thử xóa dữ liệu trong cột R và S rồi sử dụng đoạn code này xem:
Mã:
Option Explicit

Sub GPE()

    Dim r As Long, rTam As Range
    Const cTam As String = "ZZ1"
    r = Sheets("Chi tiet").Range("A100000").End(xlUp).Row
    With Sheets("Tong hop")
        .Range("A1:M" & r).Clear
        Set rTam = .Range(cTam)
        rTam.Resize(2, 2).Value = .Range("P1:Q2").Value
        rTam.Offset(, 2).Resize(, 2).Value = Sheets("Chi tiet").Range("A1")
        rTam.Offset(1, 2).Value = ">=" & .Range("O1").Value
        rTam.Offset(1, 3).Value = "<=" & .Range("O2").Value
        Sheets("Chi tiet").Range("A1:M" & r).AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=rTam.Resize(2, 4), CopyToRange:=.Range("A1:M1"), Unique:=False
        rTam.Resize(2, 4).Clear
    End With
    
End Sub
 
thấy cũng đầy đủ rồi mà. người sống nội tâm thì như vậy thôi. có sai quy tắc diễn đàn không Mod
Không biết code trên của OT sửa lại đã làm hài lòng bạn chưa nhỉ, hihi chờ bạn mà không thấy bạn thông tin lại.
Còn vấn đề khác OT thấybạn thông tin nhanh thật.
Thôi được hay không thì có chú Mỹ ở đây rồi OT xin phép rút lui ạ.
Con chào chú Mỹ nhé hí hí hí
 
Bạn đang nhờ giúp mà viết cộc lốc như thế này là không lịch sự, nếu không nói là khiếm nhã.
Người ta có quan niệm GPE không phải là nơi của "người nhã nhặn".
Họ muốn giúp thì giúp, thái độ của người hỏi không thành vấn đề.

Vì vậy, 100 người hỏi bài, hơn 90 người quan niệm rằng đây là nơi trao đổi công nghê, chả liên quan gì đến ăn nói cả.

Đáng nói chăng là những người vô tình đã giúp cho lớp này lên mặt.
 
Người ta có quan niệm GPE không phải là nơi của "người nhã nhặn".
Họ muốn giúp thì giúp, thái độ của người hỏi không thành vấn đề.

Vì vậy, 100 người hỏi bài, hơn 90 người quan niệm rằng đây là nơi trao đổi công nghê, chả liên quan gì đến ăn nói cả.

Đáng nói chăng là những người vô tình đã giúp cho lớp này lên mặt.
Xin chào Bác @VetMini
Mới đầu con cũng để ý vấn đề này rồi Bác, nhưng mà con nghĩ lỡ xác nhận rồi thì làm luôn thôi Bác (nếu con đủ điều kiện) vì con cũng được mọi người giúp nhiều rồi nên cũng muốn làm gì đó thôi.. mà thôi nhé, còn xin phép nhé, không con lại lên top bây giờ hehe. --=0
 
Sai quy tắc làm người văn minh, có học.
vậy là có học phải viết đúng quy tắc văn minh hả Smod, nếu có học mà viết không văn minh thì bị tịch thu bằng cấp à, Smod kiến nghị nên bộ giáo dục đi. Smod quyền lực thế nhỉ.
 
Xin chào Bác @VetMini
Mới đầu con cũng để ý vấn đề này rồi Bác, nhưng mà con nghĩ lỡ xác nhận rồi thì làm luôn thôi Bác (nếu con đủ điều kiện) vì con cũng được mọi người giúp nhiều rồi nên cũng muốn làm gì đó thôi.. mà thôi nhé, còn xin phép nhé, không con lại lên top bây giờ hehe. --=0
Thực sự cũngn khó trách cô. Người trẻ bảo nhìn xa thì hoá ra già [chết tiệt] như bọn tôi.

Thôi thì cứ nhìn trước mắt đấy: "cháy nhà ra mặt chuột". Bây giờ không còn là "kém lịch sự" vì không để ý nữa. Mà là vênh váo thách thức.
 
Thực sự cũngn khó trách cô. Người trẻ bảo nhìn xa thì hoá ra già [chết tiệt] như bọn tôi.

Thôi thì cứ nhìn trước mắt đấy: "cháy nhà ra mặt chuột". Bây giờ không còn là "kém lịch sự" vì không để ý nữa. Mà là vênh váo thách thức.
Tôi xin lỗi! Vì ai mà biết sẽ gặp như thế này.
Từ bài #8 tôi đã "thua luôn rồi ...."
 
Lần chỉnh sửa cuối:
Theo cháu là bắn bỏ đi các bác oi, đúng là loại vô học chị OT @NHN_Phương và mọi người giúp đỡ chỉ bảo quá sai lầm và lãng phí noron thần kinh
 
vậy là có học phải viết đúng quy tắc văn minh hả Smod, nếu có học mà viết không văn minh thì bị tịch thu bằng cấp à, Smod kiến nghị nên bộ giáo dục đi. Smod quyền lực thế nhỉ.
Anh nhận của em mấy vái ạ, anh nên đi học lại nhận thức xã hội đi ạ, ăn nói như anh em sợ quá. Các anh chị trên kia còn dùng ngôn ngữ nhẹ nhàng đó chứ nếu ngoài xã hội thì chắc phải nói là loại .......
 

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

Back
Top Bottom