làm thế nào sử dụng Advancedfilter với đồng thời 2 điều kiện (1 người xem)

  • Thread starter Thread starter dungb
  • Ngày gửi Ngày gửi
Liên hệ QC

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

dungb

Thành viên mới
Tham gia
4/9/12
Bài viết
8
Được thích
0
Chào cả nhà,
em mới sử dụng VBA. Bước đầu em tập lọc dữ liệu nhưng mà sau khi đọc qua một loạt các bài về lọc dữ liệu mà ko vỡ được tí nào nên đành post hỏi, mong các pro giúp đỡ.
Em muốn lọc dữ ;liệu thoả mãn đồng thời 2 điều kiện là ngày cột G <=A1 và cột H> A1. Dữ liệu thoả mãn đk được chuyển sang sheeT "Loc".
Em thử làm công thức rôi record MAcro nhưng vấn đề là sang sheet "Loc" có các dòng trống và công thức vẫn còn
Em làm advancedfilter nhưng không biết làm thế nào để diễn đạt 2 điều kiện một lúc ><
Các bác giúp em ạ
Em cám ơn
 

File đính kèm

Chào cả nhà,
em mới sử dụng VBA. Bước đầu em tập lọc dữ liệu nhưng mà sau khi đọc qua một loạt các bài về lọc dữ liệu mà ko vỡ được tí nào nên đành post hỏi, mong các pro giúp đỡ.
Em muốn lọc dữ ;liệu thoả mãn đồng thời 2 điều kiện là ngày cột G <=A1 và cột H> A1. Dữ liệu thoả mãn đk được chuyển sang sheeT "Loc".
Em thử làm công thức rôi record MAcro nhưng vấn đề là sang sheet "Loc" có các dòng trống và công thức vẫn còn
Em làm advancedfilter nhưng không biết làm thế nào để diễn đạt 2 điều kiện một lúc ><
Các bác giúp em ạ
Em cám ơn

Cho code dưới đây vào 1 module nhé:
PHP:
Sub Main()
  Dim rData As Range, rTarget As Range, rCrit As Range
  On Error Resume Next
  With Sheets("Dulieu")
    Set rData = .Range("A4:H1000")
    Set rTarget = Sheets("Loc").Range("A4")
    rTarget.Parent.Range("IU1:IV1").Value = .Range("G4:H4").Value
    rTarget.Parent.Range("IU2").Value = "<=" & CLng(.Range("A1").Value)
    rTarget.Parent.Range("IV2").Value = ">" & CLng(.Range("A1").Value)
    Set rCrit = rTarget.Parent.Range("IU1:IV2")
    rData.AdvancedFilter 2, rCrit, rTarget
    rCrit.ClearContents
  End With
End Sub
Nhớ xóa hết dữ liệu tại sheet Loc trước khi chạy code nhé
 
Lần chỉnh sửa cuối:
Upvote 0
dạ em cám ơn bác ạ,
nhưng bác cho em hỏi nốt:

rTarget.Parent.Range("IU1:IV1").Value = .Range("G4:H4").Value
để làm gì ạ ?
 
Upvote 0
dạ em cám ơn bác ạ,
nhưng bác cho em hỏi nốt:

rTarget.Parent.Range("IU1:IV1").Value = .Range("G4:H4").Value
để làm gì ạ ?

Thì để lấy tiêu đề cần lọc ở sheet Dulieu cho vào vùng IU1:IV1 thôi ---> Vùng điều kiện của AdvancedFilter luôn phải có 2 dòng mà: Dòng trên là tiêu đề, dòng dưới là điều kiện lọc
 
Upvote 0
dạ nhưng sao lại là IU1:IV1 vì em thấy tiêu đề nằm ở A4:H4, và ở đây chỉ =.range("G4:H4")
vậy tiêu đề từ A4 đến F4 làm tn vào sheet loc được ạ ?

(em hỏi hơi nhiều mong bác bỏ quá cho ạ)
 
Upvote 0
dạ nhưng sao lại là IU1:IV1 vì em thấy tiêu đề nằm ở A4:H4, và ở đây chỉ =.range("G4:H4")
vậy tiêu đề từ A4 đến F4 làm tn vào sheet loc được ạ ?

(em hỏi hơi nhiều mong bác bỏ quá cho ạ)

Nhưng bạn cần lọc theo cột G và cột H cơ mà
Mà tiêu đề cột G là "Ngay bat dau" nằm tại G4 và tiêu đề cột H là "Ngay den han" nằm tại H4 ---> Không đúng sao?
Vùng điều kiên tôi thích đặt đâu chẳng được, trong file tôi đặt nó tại IU1:IV2, còn bạn thích đặt chổ khác thì cứ việc sửa ---> Đàng nào lọc xong cũng xóa nó luôn rồi
-------------
Nói chung mấy code loại này bạn chỉ cần record macro quá trình làm bằng tay sẽ tự hiểu
 
Upvote 0
dạ vâng. em cám ơn bác ạ. E sẽ cố gằng học hỏi theo cách bác chỉ. Có gì nhờ bác chỉ giáo giúp ạ
 
Upvote 0
bác ndu ơi, h trong bảng dữ liệu của em có thêm vài cột và trong những cột này thì có dòng có dữ liệu, có dòng ko có dữ liệu. code giờ ko chạy nữa
em phải xử lý thế nào ạ ?!$@!!
 

File đính kèm

Upvote 0
bác ndu ơi, h trong bảng dữ liệu của em có thêm vài cột và trong những cột này thì có dòng có dữ liệu, có dòng ko có dữ liệu. code giờ ko chạy nữa
em phải xử lý thế nào ạ ?!$@!!

Thì sửa thành vầy:
Mã:
Sub Main()
  Dim rData As Range, rTarget As Range, rCrit As Range
  On Error Resume Next
  With Sheets("Dulieu")
    Set rData = [COLOR=#ff0000].Range("A4:M1000")[/COLOR]
    Set rTarget = Sheets("Loc").Range("A4")
    [COLOR=#ff0000]rTarget.Parent.UsedRange.ClearContents[/COLOR]
    [COLOR=#ff0000]rTarget.Parent.Range("IU1").Value = .Range("I4").Value[/COLOR]
    [COLOR=#ff0000]rTarget.Parent.Range("IV1").Value = .Range("L4").Value[/COLOR]
    rTarget.Parent.Range("IU2").Value = "<=" & CLng(.Range("A1").Value)
    rTarget.Parent.Range("IV2").Value = ">" & CLng(.Range("A1").Value)
    Set rCrit = rTarget.Parent.Range("IU1:IV2")
    rData.AdvancedFilter 2, rCrit, rTarget
    rCrit.ClearContents
  End With
End Sub
Những chổ màu đỏ là những chổ sửa lại
 
Upvote 0
bác ạ, em lập sheets để phân tách dữ liệu với điều kiện mua/bán
nếu là cột C sheet Loc là M/B thì dữ liệu "Số lượng" tương ứng sẽ vào cột "So luong Mua"/"So uong ban"cua Sheets DataInput
cac du lieu ve Tiền và ngày cugnx sẽ chạy theo tương tự
em viết ra đc cái code như bên dưới nhưng nó chỉ chạy cho mỗi cột số lượng còn các dữ liệu khác em ko biêt thêm vào thế nào, dùng hàm And mà ko đc.
Em định dùng Esle liền tiếp để chạy cho các dữ liệu Bán mà nó cứ báo lỗi Else without IF ạ
Bác cho em một ít gợi ý được ko ạ ?
MÀ em mới cho I chạy tưd 1 đến 30 thôi nhưng lâu lắm ạ **~**

Sub DataInput()
Dim rng, ab As Range, I As Long
Set rng = Sheets("Loc").[A5:L30]
Set ab = Sheets("DataInput").[A5:H20]
For I = 1 To 30
If rng(I, 3) = "M" Then ab(I, 3) = rng(I, 8) Else ab(I, 6) = rng(I, 8)

Next I

End Sub
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom