Hoàn thiện Code lọc dữ liệu

Liên hệ QC

nmhung49

Thành viên tích cực
Tham gia
20/8/09
Bài viết
1,186
Được thích
1,337
Em có vấn đề lọc ngày tháng mà không biết xử lý làm sao mong AC giúp đỡ, Nếu em chọn tháng tương ứng với năm thì sẽ lọc dữ liệu tương ứng vớ tháng năm đó Còn nếu em chọn "*" thì dữ liệu sẽ thể hiện toàn bộ tương ứng với năm đó, Nếu dùng cột phụ để VBA thì em đã tham khảo trên diễn đàn thì em có thể làm được loc theo month năm như chưa hoàn thiện, Còn nếu dùng trực tiếp không dùng cột phụ thì không biết làm sao. Mong các bạn và anh chị trên diễn đàn giúp đỡ. Thanks
 
Lần chỉnh sửa cuối:
Em có vấn đề lọc ngày tháng mà không biết xử lý làm sao mong AC giúp đỡ, Nếu em chọn tháng tương ứng với năm thì sẽ lọc dữ liệu tương ứng vớ tháng năm đó Còn nếu em chọn "*" thì dữ liệu sẽ thể hiện toàn bộ tương ứng với năm đó, Nếu dùng cột phụ để VBA thì em đã tham khảo trên diễn đàn thì em có thể làm được loc theo month năm như chưa hoàn thiện, Còn nếu dùng trực tiếp không dùng cột phụ thì không biết làm sao. Mong các bạn và anh chị trên diễn đàn giúp đỡ. Thanks
Thử vầy xem:
PHP:
Sub Loc()
  With Range([A4], [E60000])
    .Offset(, 1).Resize(, 1).NumberFormat = IIf([C1] = "*", "yyyy", "mmyyyy")
    .AutoFilter 2, IIf([C1] = "*", [C2], Format([C1], "00") & [C2])
    .Offset(, 1).Resize(, 1).NumberFormat = "dd/mm/yyyy"
  End With
End Sub
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([C1:C2], Target) Is Nothing Then Loc
End Sub
Xài tạm thôi, chưa phải là hoàn thiện đâu!
 

File đính kèm

Upvote 0
To Ndu sao em nhấn chọn tháng "*" thì nó không showall hết anh? Anh coi lại giúp em với Một lần nữa cảm ơn anh nhiều nhiều
 
Upvote 0
Theo mình thì để lọc ngày thì cứ lọc theo kiểu từ ngày đến ngày, muốn khoản thời gian nào thì cứ việc gõ vào, có thể dùng Calendar cho trường hợp này.
mình xin góp vui code như sau:

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
    If Not Intersect(Target, Range("C1:C2")) Is Nothing Then
        If IsDate(Target) Then
            On Error Resume Next
                Application.EnableEvents = False
                   Range("A4:G4").AutoFilter Field:=2, Criteria1:=">=" & CDbl(Range("C1")), _
                        Operator:=xlAnd, Criteria2:="<=" & CDbl(Range("C2"))
                Application.EnableEvents = True
            Else
              MsgBox "Ban phai nhap ngay dung chuan"
              Sheet1.ShowAllData
        End If
    End If
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
To Ndu sao em nhấn chọn tháng "*" thì nó không showall hết anh? Anh coi lại giúp em với Một lần nữa cảm ơn anh nhiều nhiều
Sơ ý chút!
Thêm đoạn này vào là được:
.Parent.AutoFilterMode = False'
Cụ thể là:
PHP:
Sub Loc()
  With Range([A4], [E60000])
    .Parent.AutoFilterMode = False
    .Offset(, 1).Resize(, 1).NumberFormat = IIf([C1] = "*", "yyyy", "mmyyyy")
    .AutoFilter 2, IIf([C1] = "*", [C2], Format([C1], "00") & [C2])
    .Offset(, 1).Resize(, 1).NumberFormat = "dd/mm/yyyy"
  End With
End Sub
(Tức là ShowAll trước, xong mới Format)
Bài này cũng có thể làm bằng AdvancedFilter đấy!
 

File đính kèm

Upvote 0
To Ndu sao em nhấn chọn tháng "*" thì nó không showall hết anh? Anh coi lại giúp em với Một lần nữa cảm ơn anh nhiều nhiều
Làm tiếp file này bằng cách dùng AdvancedFilter... Code ngắn hơn:
PHP:
Sub Loc()
  With Range("A4").CurrentRegion
    .AdvancedFilter 1, [G1:G2]
  End With
End Sub
Chú ý công thức trong cell G1 (đấy là vùng điều kiện)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom