Dùng toán tử AND lấy kết quả khi autofil 2 field

Liên hệ QC

spacemanforever

Thành viên hoạt động
Tham gia
8/10/08
Bài viết
113
Được thích
71
Chào GPE!
Có cách nào để lấy kết quả khi lọc 2 field không?
Nếu làm theo cách thông thường sẽ không nhận được kết quả mong muốn (như file đính kèm - có mô tả chi tiết)
Em định sữ dụng toán tử OR cho 2 field nhưng không biết viết thế nào?
Xin các anh hỗ trợ.
Cảm ơn CÁc anh nhiều}}}}}}}}}}
 

File đính kèm

Chào GPE!
Có cách nào để lấy kết quả khi lọc 2 field không?
Nếu làm theo cách thông thường sẽ không nhận được kết quả mong muốn (như file đính kèm - có mô tả chi tiết)
Em định sữ dụng toán tử OR cho 2 field nhưng không biết viết thế nào?
Xin các anh hỗ trợ.
Cảm ơn CÁc anh nhiều}}}}}}}}}}
Sao không giải thích rõ từ đâu có kết quả như thế này?
|
I​
|
J​
|
K​
|
L​
|
8​
|
Date1​
|
Date2​
|
A​
|
B​
|
9​
|
14/06/2011​
|
16/06/2011​
|a1|b1|
10​
|
15/06/2011​
|
24/04/2011​
|a2|b2|
11​
|
16/06/2011​
|
26/06/2011​
|a3|b3|
Dòng này lại càng khó hiểu:
|
I​
|
J​
|
K​
|
L​
|
10​
|
15/06/2011​
|
24/04/2011​
|
a2​
|
b2​
|
 
Upvote 0
Chào GPE!
Có cách nào để lấy kết quả khi lọc 2 field không?
Nếu làm theo cách thông thường sẽ không nhận được kết quả mong muốn (như file đính kèm - có mô tả chi tiết)
Em định sữ dụng toán tử OR cho 2 field nhưng không biết viết thế nào?
Xin các anh hỗ trợ.
Cảm ơn CÁc anh nhiều}}}}}}}}}}
Chưa xem file nhưng mà với code dùng array thì có 100 and và từ 100 sh cũng lấy OK.
Cứ nhẫn nại mà for i= 1 to .... là ra hết.
Nghĩ sao thì viết code vậy.
 
Upvote 0
Sao không giải thích rõ từ đâu có kết quả như thế này?
|
I​
|
J
|
K​
|
L​
|
8​
|
Date1​
|
Date2​
|
A​
|
B​
|
9​
|
14/06/2011​
|
16/06/2011​
|a1|b1|
10​
|
15/06/2011​
|
24/04/2011​
|a2|b2|
11​
|
16/06/2011​
|
26/06/2011​
|a3|b3|
Dòng này lại càng khó hiểu:
|
I​
|
J​
|
K​
|
L​
|
10​
|
15/06/2011​
|
24/04/2011​
|
a2​
|
b2​
|
Em xin mô tả sơ bộ lại:
1. Em có bảng dữ liệu sau:
data.jpg

2. Em tiến hành lọc theo ngày:
date.jpg
3. Như code thì lọc sẽ thực hiện trình tự từ cột Date1 và cột Date2.
4.Kết quả mong muốn như sau:
result.jpg
Và đây là code em chạy chưa được kết quả như mong muốn:
PHP:
Sub f()
Dim s1 As Double
    Dim s2 As Double
    
    s1 = [C4]
    s1 = CDbl(s1)
    s2 = [C5]
    s2 = CDbl(s2)
    AutoFilterMode = False
    With Worksheets("sheet1")
      With .Range("B7:E7")
         .AutoFilter Field:=2, Criteria1:=">=" & s1, Operator:=xlAnd, Criteria2:="<=" & s2
         .AutoFilter Field:=3, Criteria1:=">=" & s1, Operator:=xlAnd, Criteria2:="<=" & s2
        
         
      End With
    End With
End Sub
Em xin gởi lại file các anh hỗ trợ giúp nhé.
Hi Thunghi!
cảm ơn sự góp ý của bạn, việc dùng vòng lập ở đây sẽ không hợp lý nếu file có nhiều dữ liệu (16000 dòng chẳn hạn). Nếu có thể tận dụng được phương pháp autofilter này chúng ta sẽ tiết kiệm được rất nhiều thời gian.
)(&&@@)(&&@@
thanks+-+-+-+
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào GPE!
Có cách nào để lấy kết quả khi lọc 2 field không?
Nếu làm theo cách thông thường sẽ không nhận được kết quả mong muốn (như file đính kèm - có mô tả chi tiết)
Em định sữ dụng toán tử OR cho 2 field nhưng không biết viết thế nào?
Xin các anh hỗ trợ.
Cảm ơn CÁc anh nhiều}}}}}}}}}}
Xem kỹ file của bạn, thấy rằng yêu cầu này không thể dùng AutoFilter mà phải là Advanced Filter
Tôi làm như sau:
- Gõ vào cell J2 công thức:
PHP:
=OR(AND(B8>=$C$4,B8<=$C$5),AND(C8>=$C$4,C8<=$C$5))
- Code như sau:
PHP:
Sub f()
  With Sheet1
    .Range("I7:L100").Clear
    .Range("B7:E100").AdvancedFilter 2, .[J1:J2], .[I7]
  End With
End Sub
 

File đính kèm

Upvote 0
Xem kỹ file của bạn, thấy rằng yêu cầu này không thể dùng AutoFilter mà phải là Advanced Filter
Tôi làm như sau:
- Gõ vào cell J2 công thức:
PHP:
=OR(AND(B8>=$C$4,B8<=$C$5),AND(C8>=$C$4,C8<=$C$5))
- Code như sau:
PHP:
Sub f()
  With Sheet1
    .Range("I7:L100").Clear
    .Range("B7:E100").AdvancedFilter 2, .[J1:J2], .[I7]
  End With
End Sub
Cảm ơn bác Ndu nhiều.
Đây đúng là cái em cần. Thỉnh thoảng nhờ bác chỉ giúp thêm.
 
Upvote 0
Em xin mô tả sơ bộ lại:
1. Em có bảng dữ liệu sau:
Hi Thunghi!
cảm ơn sự góp ý của bạn, việc dùng vòng lập ở đây sẽ không hợp lý nếu file có nhiều dữ liệu (16000 dòng chẳn hạn). Nếu có thể tận dụng được phương pháp autofilter này chúng ta sẽ tiết kiệm được rất nhiều thời gian.
)(&&@@)(&&@@
thanks+-+-+-+
Bạn nói là for i với 16.000 dòng không hợp lý.
Chưa đúng đâu, nếu dữ liệu khoản 1 tr dòng thì chỉ dùng arr và for i thì thích hợp nhất, nhất là với nhiều điều kiện phức tạp hơn.
Do ndu đã làm rồi nên thôi, chớ dùng AdFi với số dòng lớn và trích lọc nhiều điều kiện thì chưa chắc nhanh hơn for i.
Do code hơi rườm rà thôi.
PHP:
Sub LocArr()
Dim endR&, s&, eDate&, fDate&, k&
Dim Arr(), ArrKq()
With Sheet1
  fDate = CLng(.[C4]): eDate = CLng(.[C5])
  endR = .Cells(100000, 5).End(3).Row
  Arr = .Range("B8:E" & endR).Value
End With
s = 0
ReDim ArrKq(1 To UBound(Arr), 1 To UBound(Arr, 2))
For i = 1 To UBound(Arr)
  If CLng(Arr(i, 1)) >= fDate Then
    If CLng(Arr(i, 1)) <= eDate Then
      s = s + 1
      For k = 1 To 4
        ArrKq(s, k) = Arr(i, k)
      Next k
    End If
  End If
  If CLng(Arr(i, 2)) >= fDate Then
    If CLng(Arr(i, 2)) <= eDate Then
      s = s + 1
      For k = 1 To 4
        ArrKq(s, k) = Arr(i, k)
      Next k
    End If
  End If
Next i
If s = 0 Then Exit Sub
With Sheet1
  .Range("N8:Q100").Clear
  .[N8].Resize(s, 4) = ArrKq
End With
Erase Arr(), ArrKq()
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nói là for i với 16.000 dòng không hợp lý.
Chưa đúng đâu, nếu dữ liệu khoản 1 tr dòng thì chỉ dùng arr và for i thì thích hợp nhất, nhất là với nhiều điều kiện phức tạp hơn.
Do ndu đã làm rồi nên thôi, chớ dùng AdFi với số dòng lớn và trích lọc nhiều điều kiện thì chưa chắc nhanh hơn for i.
Đương nhiên For... Next trên Array là nhanh nhất rồi. Tuy nhiên cứ làm tạm bằng Advanced Filter cho tác giả dễ hiểu. Khi nào "chịu hết nỗi" sẽ có việc làm tiếp thôi
Ẹc... Ẹc...
 
Upvote 0
Web KT

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

Back
Top Bottom