Chỉnh sửa code VBA .

Liên hệ QC

nguyenquyetnd993

Thành viên chính thức
Tham gia
31/5/19
Bài viết
53
Được thích
11
Chào mọi người ạ!
Em có lấy 1 code trong 1 bài viết trên GPE để áp dụng cho bài toán của mình. code lọc theo 3 điều kiện nhưng có 1 vấn đề là nếu em nhập thiếu 1 trong 3 điều kiện này thì code chạy không đúng ý, nhờ mọi người sửa dùm em, nếu thiếu 1 hoặc 2 trong 3 điều kiện này( Ô điền điều kiện bổ trống) thì nó sẽ lọc theo điều kiện còn lại . Em xin phép đính kèm file đó luôn.
Em xin cảm ơn.

Sub GPE()
Dim i As Long, j As Integer, iRow As Long, Arr(), k As Long, Ngay1, Ngay2, LoaiVB As String
iRow = Sheets(2).Range("B5").End(xlDown).Row
ReDim Arr(1 To iRow, 1 To 11)
Ngay1 = Sheets(1).Range("C2"): Ngay2 = Sheets(1).Range("F2")
LoaiVB = Sheets(1).Range("C3")
With Worksheets(2).Range("b5:b" & iRow)
Set c = .Find(Sheets(1).Range("C4"), LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address

Do
If Sheets(2).Cells(c.Row, 4) = LoaiVB And Sheets(2).Cells(c.Row, 7) >= Ngay1 _
And Sheets(2).Cells(c.Row, 7) <= Ngay2 Then
k = k + 1: Arr(k, 1) = k
For j = 2 To 11
Arr(k, j) = Sheets(2).Cells(c.Row, j)
Next
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Sheets(1).Range("A8:K" & Sheets(1).Range("B65500").End(xlUp).Row + 2).ClearContents
If k > 0 Then Sheets(1).Range("A8").Resize(k, 11) = Arr
End Sub
 

File đính kèm

(1) Chuyện đầu tiên là thiết kế trang tính của bạn chỉ chú tâm làm đẹp, chứ không hề đếm xỉa đến nó nhanh chóng biến thành đống rác 1 lúc nào đó!

(2)
nếu thiếu 1 hoặc 2 trong 3 điều kiện này( Ô điền điều kiện bổ trống) thì nó sẽ lọc theo điều kiện còn lại .
Chuyện này cũng có thể làm được, nhưng phải gọi các macro con để thực hiện cho bạn trong từng trường hợp (bỏ trống) khác nhau Ví du
PHP:
If Đ/K01 Then
    GPE1 ThamBien1
ElseIf Đ/K02 Then
    GPE2  ThamBien2
ElseIf Đ/K03 Then
    GPE2  ThamBien1, ThamBien2
Else
    MsgBox "Xéo Ngay!"
End If
 
Lần chỉnh sửa cuối:
Upvote 0
(1) Chuyện đầu tiên là thiết kế trang tính của bạn chỉ chú tâm làm đẹp, chứ không hề đếm xỉa đến nó nhanh chóng biến thành đống rác 1 lúc nào đó!

(2)
Chuyện này cũng có thể làm được, nhưng phải gọi các macro con để thực hiện cho bạn trong từng trường hợp (bỏ trống) khác nhau Ví du
PHP:
If Đ/K 1 Then
    GPE1 ThamBien1
ElseIf Đ/K 2 Then
    GPE2  ThamBien2
ElseIf Đ/K 3 Then
    GPE2  ThamBien1, ThamBien2
Else
    MsgBox "Xéo Ngay!"
End If
Cảm ơn bác đã quan tâm.
Vấn đề trang tính này chỉ là ví dụ cho chạy code thôi ạ.
Bác có thể giúp cháu giải quyết vấn đề làm các macro con được không ạ,
VBA cháu mới chỉ tập tẹ mới học thôi ạ.
 
Upvote 0
Chào mọi người ạ!
Em có lấy 1 code trong 1 bài viết trên GPE để áp dụng cho bài toán của mình. code lọc theo 3 điều kiện nhưng có 1 vấn đề là nếu em nhập thiếu 1 trong 3 điều kiện này thì code chạy không đúng ý, nhờ mọi người sửa dùm em, nếu thiếu 1 hoặc 2 trong 3 điều kiện này( Ô điền điều kiện bổ trống) thì nó sẽ lọc theo điều kiện còn lại . Em xin phép đính kèm file đó luôn.
Em xin cảm ơn.

Sub GPE()
Dim i As Long, j As Integer, iRow As Long, Arr(), k As Long, Ngay1, Ngay2, LoaiVB As String
iRow = Sheets(2).Range("B5").End(xlDown).Row
ReDim Arr(1 To iRow, 1 To 11)
Ngay1 = Sheets(1).Range("C2"): Ngay2 = Sheets(1).Range("F2")
LoaiVB = Sheets(1).Range("C3")
With Worksheets(2).Range("b5:b" & iRow)
Set c = .Find(Sheets(1).Range("C4"), LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address

Do
If Sheets(2).Cells(c.Row, 4) = LoaiVB And Sheets(2).Cells(c.Row, 7) >= Ngay1 _
And Sheets(2).Cells(c.Row, 7) <= Ngay2 Then
k = k + 1: Arr(k, 1) = k
For j = 2 To 11
Arr(k, j) = Sheets(2).Cells(c.Row, j)
Next
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Sheets(1).Range("A8:K" & Sheets(1).Range("B65500").End(xlUp).Row + 2).ClearContents
If k > 0 Then Sheets(1).Range("A8").Resize(k, 11) = Arr
End Sub
Chỉnh tàm tạm
If (Sheets(2).Cells(c.Row, 4) = LoaiVB or len(LoaiVB)=0) And _
(Sheets(2).Cells(c.Row, 7) >= Ngay1 or len(Ngay1)=0) _
And (Sheets(2).Cells(c.Row, 7) <= Ngay2 or len(Ngay2)=0) Then
 
Upvote 0
Bạn tham khảo (tạm) theo file:
 

File đính kèm

Upvote 0
Chỉnh tàm tạm
If (Sheets(2).Cells(c.Row, 4) = LoaiVB or len(LoaiVB)=0) And _
(Sheets(2).Cells(c.Row, 7) >= Ngay1 or len(Ngay1)=0) _
And (Sheets(2).Cells(c.Row, 7) <= Ngay2 or len(Ngay2)=0) Then
Cảm ơn anh, em làm được rồi ạ
Bài đã được tự động gộp:

Bạn tham khảo (tạm) theo file:
Cảm ơn bác cháu làm theo bài trên được rồi ạ
 
Upvote 0
Web KT

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

Back
Top Bottom