Lọc nhiều điều kiện bị giới hạn

Liên hệ QC

MeKbang

Thành viên mới
Tham gia
4/2/17
Bài viết
8
Được thích
0
Các anh chị giúp em với!
Em viết code lọc trên cùng 1 table, lọc trên nhiều trường (max 9 trường). Lúc ghi thử bằng macro thì được. Nhưng khi viết code lại và gán cho Button thì excel chỉ nhận lọc cùng lúc 3 điều kiện, khi em thêm code từ điều kiện thứ 4 trở đi, thì lọc trả về ko có giá trị (sai thực tế). Nhờ các anh/chị giúp em. Em cảm ơn!

Sub VnerCo_Srch_Bt()
Range("B11").Select
Application.ScreenUpdating = False
ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=2, Criteria1:="*" & [B4] & "*", Operator:=xlFilterValues
ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=3, Criteria1:="*" & [B6] & "*", Operator:=xlFilterValues
' ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=6, Criteria1:=ActiveSheet.Range("e4").Value
'ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=7, Criteria1:=ActiveSheet.Range("c4").Value
ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=8, Criteria1:=ActiveSheet.Range("c6").Value
' ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=9, Criteria1:=ActiveSheet.Range("c8").Value
Application.ScreenUpdating = True
End Sub
 
Các anh chị giúp em với!
Em viết code lọc trên cùng 1 table, lọc trên nhiều trường (max 9 trường). Lúc ghi thử bằng macro thì được. Nhưng khi viết code lại và gán cho Button thì excel chỉ nhận lọc cùng lúc 3 điều kiện, khi em thêm code từ điều kiện thứ 4 trở đi, thì lọc trả về ko có giá trị (sai thực tế). Nhờ các anh/chị giúp em. Em cảm ơn!

Sub VnerCo_Srch_Bt()
Range("B11").Select
Application.ScreenUpdating = False
ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=2, Criteria1:="*" & [B4] & "*", Operator:=xlFilterValues
ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=3, Criteria1:="*" & [B6] & "*", Operator:=xlFilterValues
' ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=6, Criteria1:=ActiveSheet.Range("e4").Value
'ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=7, Criteria1:=ActiveSheet.Range("c4").Value
ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=8, Criteria1:=ActiveSheet.Range("c6").Value
' ActiveSheet.ListObjects("VNER_CO").Range.AutoFilter Field:=9, Criteria1:=ActiveSheet.Range("c8").Value
Application.ScreenUpdating = True
End Sub
Đưa cái hình lên làm gì.
Bạn đưa file lên và nói rõ yêu cầu, có kết quả mẫu càng tốt, lúc này nhiều người có nhiều cách khác nhau để tạo ra kết quả như bạn muốn.
 
Upvote 0
Xin nhờ các bác chỉ giúp, mình dùng DIC lọc theo điều kiện nhưng, nhưng bảng tính nhiều cột, có cách nào làm gọn lại giùm xin cảm ơn.
Sub REMIX()
Dim Arrdata(), Arrkq()
Dim dic As Object
Dim i As Long, J As Long, LRow As Long, Tong As Long
Set dic = CreateObject("scripting.dictionary")
With S109
LRow = Sheets("TH-XNT").[B65536].End(xlUp).Row
Arrdata = .Range("B9:V" & LRow).Value2
ReDim Arrkq(1 To UBound(Arrdata), 1 To 21)
For i = 1 To UBound(Arrdata)
If Arrdata(i, 21) = 1 Then
J = J + 1
dic.Add Arrdata(i, 1), J
Arrkq(J, 1) = Arrdata(i, 1)
Arrkq(J, 2) = Arrdata(i, 2)
Arrkq(J, 3) = Arrdata(i, 3)
Arrkq(J, 4) = Arrdata(i, 4)
Arrkq(J, 5) = Arrdata(i, 5)
Arrkq(J, 6) = Arrdata(i, 6)
Arrkq(J, 7) = Arrdata(i, 7)
Arrkq(J, 8) = Arrdata(i, 8)
Arrkq(J, 9) = Arrdata(i, 9)
Arrkq(J, 10) = Arrdata(i, 10)
Arrkq(J, 11) = Arrdata(i, 11)
Arrkq(J, 12) = Arrdata(i, 12)
Arrkq(J, 13) = Arrdata(i, 13)
Arrkq(J, 14) = Arrdata(i, 14)
Arrkq(J, 15) = Arrdata(i, 15)
Arrkq(J, 16) = Arrdata(i, 16)
Arrkq(J, 17) = Arrdata(i, 17)
Arrkq(J, 18) = Arrdata(i, 18)
Arrkq(J, 19) = Arrdata(i, 19)

End If
Next i
End With
S109.Range("A9:V10000").ClearContents
S109.Range("B9").Resize(J, 19) = Arrkq
Erase Arrdata, Arrkq
Set dic = Nothing
End Sub
 
Upvote 0
Xin nhờ các bác chỉ giúp, mình dùng DIC lọc theo điều kiện nhưng, nhưng bảng tính nhiều cột, có cách nào làm gọn lại giùm xin cảm ơn.
Sub REMIX()
Dim Arrdata(), Arrkq()
Dim dic As Object
Dim i As Long, J As Long, LRow As Long, Tong As Long
Set dic = CreateObject("scripting.dictionary")
With S109
LRow = Sheets("TH-XNT").[B65536].End(xlUp).Row
Arrdata = .Range("B9:V" & LRow).Value2
ReDim Arrkq(1 To UBound(Arrdata), 1 To 21)
For i = 1 To UBound(Arrdata)
If Arrdata(i, 21) = 1 Then
J = J + 1
dic.Add Arrdata(i, 1), J
Arrkq(J, 1) = Arrdata(i, 1)
Arrkq(J, 2) = Arrdata(i, 2)
Arrkq(J, 3) = Arrdata(i, 3)
Arrkq(J, 4) = Arrdata(i, 4)
Arrkq(J, 5) = Arrdata(i, 5)
Arrkq(J, 6) = Arrdata(i, 6)
Arrkq(J, 7) = Arrdata(i, 7)
Arrkq(J, 8) = Arrdata(i, 8)
Arrkq(J, 9) = Arrdata(i, 9)
Arrkq(J, 10) = Arrdata(i, 10)
Arrkq(J, 11) = Arrdata(i, 11)
Arrkq(J, 12) = Arrdata(i, 12)
Arrkq(J, 13) = Arrdata(i, 13)
Arrkq(J, 14) = Arrdata(i, 14)
Arrkq(J, 15) = Arrdata(i, 15)
Arrkq(J, 16) = Arrdata(i, 16)
Arrkq(J, 17) = Arrdata(i, 17)
Arrkq(J, 18) = Arrdata(i, 18)
Arrkq(J, 19) = Arrdata(i, 19)

End If
Next i
End With
S109.Range("A9:V10000").ClearContents
S109.Range("B9").Resize(J, 19) = Arrkq
Erase Arrdata, Arrkq
Set dic = Nothing
End Sub
Dùng một vòng lặp
thay
Arrkq(J, 1) = Arrdata(i, 1)
..................................................
Arrkq(J, 19) = Arrdata(i, 19)

bằng:
For k = 1 to 19
Arrkq(j,k)=Arrdata(i,k)
next k
 
Upvote 0
Web KT
Back
Top Bottom