Lọc Và trích lọc dữ liệu với 2 điều kiện

Liên hệ QC

vanvan9697

Thành viên chính thức
Tham gia
11/5/12
Bài viết
94
Được thích
5
Em có 1 Data
1546765710500.png
Giờ em muốn trích lọc với phần điều kiện đồng thời cả hai cột A và B dạng "*" &A& "*", "*" &B& "*" và kết quả thỏa mãn theo điều kiện ạ !
"
1546765962220.png
Em rất mong anh (chị) giúp đỡ em ạ !.
 

File đính kèm

  • Hoi Gpe.xlsx
    14.9 KB · Đọc: 8
Upvote 0
Bạn tham khảo hàm BS_VLOOKUP có thể lọc nhiều điều kiện cho bạn.
 
Upvote 0
Em cảm ơn chị Ạ. ! chị có thể giúp em Bằng đoạn VBA được không ạ !
Bạn xem nhé.Xem có đúng ý không.
Mã:
Sub tach()
Dim arr, arr1
Dim a As Long, lr As Long, i As Integer, j As Integer
Dim dk1, dk2 As String
With Sheets("Data")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr = .Range("A2:I" & lr).Value
     ReDim arr1(1 To UBound(arr, 1), 1 To 9)
End With
With Sheets("trichloc")
     dk1 = "*" & .Range("A2").Value & "*"
     dk2 = "*" & .Range("b2").Value & "*"
     For i = 1 To UBound(arr, 1)
         If UCase(arr(i, 7)) Like UCase(dk1) And UCase(arr(i, 8)) Like UCase(dk2) Then
            a = a + 1
            For j = 1 To 9
               arr1(a, j) = arr(i, j)
            Next j
         End If
    Next i
    lr = .Range("C" & Rows.Count).End(xlUp).Row
    If lr > 3 Then .Range("C4:K" & lr).ClearContents
    If a Then .Range("C4").Resize(a, 9).Value = arr1
End With
End Sub
 

File đính kèm

  • Hoi Gpe.xlsm
    24.4 KB · Đọc: 13
Upvote 0
Bạn xem nhé.Xem có đúng ý không.
Mã:
Sub tach()
Dim arr, arr1
Dim a As Long, lr As Long, i As Integer, j As Integer
Dim dk1, dk2 As String
With Sheets("Data")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr = .Range("A2:I" & lr).Value
     ReDim arr1(1 To UBound(arr, 1), 1 To 9)
End With
With Sheets("trichloc")
     dk1 = "*" & .Range("A2").Value & "*"
     dk2 = "*" & .Range("b2").Value & "*"
     For i = 1 To UBound(arr, 1)
         If UCase(arr(i, 7)) Like UCase(dk1) And UCase(arr(i, 8)) Like UCase(dk2) Then
            a = a + 1
            For j = 1 To 9
               arr1(a, j) = arr(i, j)
            Next j
         End If
    Next i
    lr = .Range("C" & Rows.Count).End(xlUp).Row
    If lr > 3 Then .Range("C4:K" & lr).ClearContents
    If a Then .Range("C4").Resize(a, 9).Value = arr1
End With
End Sub
Dạ của em nó là 1 mảng có nhiều lấy nhiều cặp A2-B2 xuống dưới nữa chứ không phải như vậy anh ạ !. Cái này mới giải quyết được A2 và B2 thay đổi thôi ạ
 
Upvote 0
Cái này có thể dùng query theo nguyên tắc CSDL. Tôi mách cho cái lệnh SQL, bạn nhờ thành viên nào đó thích code ADO làm phần còn lại.
Select Bang2.* From Bang1 Inner Join Bang2 On Left(Bang2.TK_NO_DANGTEXT, 3) = Bang1.TK_NO_DANGTEXT And Left(Bang2.TK_CO_DANGTEXT, 3) = Bang1.TK_CO_DANGTEXT

Bang1 là bảng điều kiện và Bang2 là dữ liệu cần lọc.

Chú: thiệt ra phiên bản 2016+ thì dùng powerquery là "xịn" (pờ rồ) nhất.
 
Upvote 0
Dạ của em nó là 1 mảng có nhiều lấy nhiều cặp A2-B2 xuống dưới nữa chứ không phải như vậy anh ạ !. Cái này mới giải quyết được A2 và B2 thay đổi thôi ạ
Bạn dùng thử code này xem.
Mã:
Dim a As Long, lr As Long, i As Integer, j As Integer
Dim dk As Long
With Sheets("Data")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr = .Range("A2:I" & lr).Value
     ReDim arr1(1 To UBound(arr, 1), 1 To 9)
End With
With Sheets("trichloc")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr2 = .Range("A2:B" & lr).Value
     For i = 1 To UBound(arr, 1)
         dk = kiemtra(arr2, arr(i, 7), arr(i, 8))
         If dk = 1 Then
            a = a + 1
            For j = 1 To 9
               arr1(a, j) = arr(i, j)
            Next j
         End If
    Next i
    lr = .Range("C" & Rows.Count).End(xlUp).Row
    If lr > 3 Then .Range("C4:K" & lr).ClearContents
    If a Then .Range("C4").Resize(a, 9).Value = arr1
End With
End Sub
Function kiemtra(ByVal arr As Variant, ByVal dk1 As String, ByVal dk2 As String) As Long
         Dim a As Long, i As Long
         Dim dk As String
         For i = 1 To UBound(arr, 1)
             If UCase(dk1) Like UCase("*" & arr(i, 1) & "*") And UCase(dk2) Like UCase("*" & arr(i, 2) & "*") Then
                kiemtra = 1
                Exit For
             End If
         Next i
End Function
 

File đính kèm

  • Hoi Gpe.xlsm
    26.4 KB · Đọc: 22
Upvote 0
Bạn dùng thử code này xem.
Mã:
Dim a As Long, lr As Long, i As Integer, j As Integer
Dim dk As Long
With Sheets("Data")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr = .Range("A2:I" & lr).Value
     ReDim arr1(1 To UBound(arr, 1), 1 To 9)
End With
With Sheets("trichloc")
     lr = .Range("A" & Rows.Count).End(xlUp).Row
     If lr < 2 Then Exit Sub
     arr2 = .Range("A2:B" & lr).Value
     For i = 1 To UBound(arr, 1)
         dk = kiemtra(arr2, arr(i, 7), arr(i, 8))
         If dk = 1 Then
            a = a + 1
            For j = 1 To 9
               arr1(a, j) = arr(i, j)
            Next j
         End If
    Next i
    lr = .Range("C" & Rows.Count).End(xlUp).Row
    If lr > 3 Then .Range("C4:K" & lr).ClearContents
    If a Then .Range("C4").Resize(a, 9).Value = arr1
End With
End Sub
Function kiemtra(ByVal arr As Variant, ByVal dk1 As String, ByVal dk2 As String) As Long
         Dim a As Long, i As Long
         Dim dk As String
         For i = 1 To UBound(arr, 1)
             If UCase(dk1) Like UCase("*" & arr(i, 1) & "*") And UCase(dk2) Like UCase("*" & arr(i, 2) & "*") Then
                kiemtra = 1
                Exit For
             End If
         Next i
End Function
Dạ vâng em cảm ơn anh Ạ !
 
Upvote 0
Em muốn hỏi anh @snow25 . Vùng điều kiện của em thêm 2 cột ghi chú và em muốn hiển thị thêm 2 cột ghi chú này ở kết quả

Anh cập nhật thêm giúp em với ạ ! Em cảm ơn anh ạ
 

File đính kèm

  • Hoi Gpe.xlsm
    26.3 KB · Đọc: 5
Upvote 0
Web KT
Back
Top Bottom