Hướng dẫn lọc dữ liệu trong khoảng thời gian đầu tháng và cuối tháng

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
709
Được thích
90
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Hiện tại em đang có bảng dữ liệu theo dõi công việc em muốn lọc trong khoảng thời gian từ đầu tháng đến cuối tháng theo biến fDay, eDay và cột tùy ý nhập vào. Tuy nhiên không hiểu sai ở đâu mà dữ liệu lọc lại không ra được kết quả, mong anh chị xem và chỉ giúp chỗ sai ạ
Em cám ơn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error Resume Next
    Dim lr As Long
    Dim fDay As Date, eDay As Date

    With Sheets("Data")
        fDay = .Range("F2").Value
        eDay = .Range("H2").Value
        If fDay = Empty Then fDay = DateValue("1000/1/1")
        If eDay = Empty Then eDay = DateValue("2100/1/1")
    End With
    lr = Range("B" & Rows.Count).End(xlUp).Row

    
    If Not Intersect(Target, Range("B4:I4")) Is Nothing Then
        If Target.Value <> Empty Then
            'MsgBox fDay
            'Range("A5:U" & lr).AutoFilter Field:=Target.Column, Criteria2:="*" & Cells(4, Target.Column) & "*" , Operator:=xlAnd
            Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & CDbl(fDay)
            Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria2:="*" & Cells(4, Target.Column) & "*" ', Operator:=xlAnd
         Else
            ShowAllData
        End If
    End If
    

End Sub

1614772536901.png
 

File đính kèm

  • Help_AutoFilter.xlsm
    467.4 KB · Đọc: 10
Bạn xem thử đã đúng ý chưa. Click nút LỌC (kết quả trả về ỏ Sheet2)
 

File đính kèm

  • Help_AutoFilter.xlsm
    458.9 KB · Đọc: 8
Mình muốn lọc trực tiếp trên Sheet đó bạn ơi
 
Hiện tại em đang có bảng dữ liệu theo dõi công việc em muốn lọc trong khoảng thời gian từ đầu tháng đến cuối tháng theo biến fDay, eDay và cột tùy ý nhập vào. Tuy nhiên không hiểu sai ở đâu mà dữ liệu lọc lại không ra được kết quả, mong anh chị xem và chỉ giúp chỗ sai ạ
Em cám ơn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error Resume Next
    Dim lr As Long
    Dim fDay As Date, eDay As Date

    With Sheets("Data")
        fDay = .Range("F2").Value
        eDay = .Range("H2").Value
        If fDay = Empty Then fDay = DateValue("1000/1/1")
        If eDay = Empty Then eDay = DateValue("2100/1/1")
    End With
    lr = Range("B" & Rows.Count).End(xlUp).Row

   
    If Not Intersect(Target, Range("B4:I4")) Is Nothing Then
        If Target.Value <> Empty Then
            'MsgBox fDay
            'Range("A5:U" & lr).AutoFilter Field:=Target.Column, Criteria2:="*" & Cells(4, Target.Column) & "*" , Operator:=xlAnd
            Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & CDbl(fDay)
            Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria2:="*" & Cells(4, Target.Column) & "*" ', Operator:=xlAnd
         Else
            ShowAllData
        End If
    End If
   

End Sub

View attachment 254781
Thử sửa lại thế này xem sao.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error Resume Next
    Dim lr As Long
    Dim fDay As Date, eDay As Date

    With Sheets("Data")
        fDay = .Range("F2").Value
        eDay = .Range("H2").Value
        If fDay = Empty Then fDay = DateValue("1000/1/1")
        If eDay = Empty Then eDay = DateValue("2100/1/1")
    End With
    lr = Range("B" & Rows.Count).End(xlUp).Row

    If Not Intersect(Target, Range("B4:I4")) Is Nothing Then
        If Target.Value <> Empty Then
            Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & CDbl(fDay), Operator:=xlAnd, Criteria2:="<=" & CDbl(eDay)
            Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria1:="=*" & Cells(4, Target.Column) & "*" ', Operator:=xlAnd
         Else
            ShowAllData
        End If
    End If
End Sub
 
Hiện tại em đang có bảng dữ liệu theo dõi công việc em muốn lọc trong khoảng thời gian từ đầu tháng đến cuối tháng theo biến fDay, eDay và cột tùy ý nhập vào. Tuy nhiên không hiểu sai ở đâu mà dữ liệu lọc lại không ra được kết quả, mong anh chị xem và chỉ giúp chỗ sai ạ
Em cám ơn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error Resume Next
    Dim lr As Long
    Dim fDay As Date, eDay As Date

    With Sheets("Data")
        fDay = .Range("F2").Value
        eDay = .Range("H2").Value
        If fDay = Empty Then fDay = DateValue("1000/1/1")
        If eDay = Empty Then eDay = DateValue("2100/1/1")
    End With
    lr = Range("B" & Rows.Count).End(xlUp).Row

   
    If Not Intersect(Target, Range("B4:I4")) Is Nothing Then
        If Target.Value <> Empty Then
            'MsgBox fDay
            'Range("A5:U" & lr).AutoFilter Field:=Target.Column, Criteria2:="*" & Cells(4, Target.Column) & "*" , Operator:=xlAnd
            Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & CDbl(fDay)
            Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria2:="*" & Cells(4, Target.Column) & "*" ', Operator:=xlAnd
         Else
            ShowAllData
        End If
    End If
   

End Sub

View attachment 254781
Chỉnh lại
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  'On Error Resume Next
  Dim lr As Long, fDay As Date, eDay As Date
 
  lr = Range("B" & Rows.Count).End(xlUp).Row
  If Not Intersect(Target, Union(Range("F2"), Range("H2"))) Is Nothing Then
    fDay = Range("F2").Value
    eDay = Range("H2").Value
    If fDay = Empty Then fDay = DateValue("1000/1/1")
    If eDay = Empty Then eDay = DateValue("2100/1/1")
    Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & fDay, Operator:=xlAnd, Criteria2:="<=" & eDay
  ElseIf Not Intersect(Target, Range("C4:I4")) Is Nothing Then
    If Target.Value <> Empty Then
        Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria1:="*" & Cells(4, Target.Column) & "*"
    Else
        Range("A5:I" & lr).AutoFilter Field:=Target.Column
    End If
  End If
End Sub
 
Dạ cám ơn anh!
Nhưng code vẫn lọc ra các công việc không nằm trong khoảng thời gian đó ạ
1614818940270.png
 
Hiện tại em đang có bảng dữ liệu theo dõi công việc em muốn lọc trong khoảng thời gian từ đầu tháng đến cuối tháng theo biến fDay, eDay và cột tùy ý nhập vào. Tuy nhiên không hiểu sai ở đâu mà dữ liệu lọc lại không ra được kết quả, mong anh chị xem và chỉ giúp chỗ sai ạ
Em cám ơn
Dùng Advanced Filter cho dễ.
Vùng điều kiện K2:L3 bạn để ở đâu đó tùy bạn.
 

File đính kèm

  • Ad_Filter.xlsm
    447.4 KB · Đọc: 6
Xóa ô F2, sau đó nhập lại
Dear anh HieuCD. Vẫn bị lỗi ạ
Dùng Advanced Filter cho dễ.
Vùng điều kiện K2:L3 bạn để ở đâu đó tùy bạn.
Dear anh Ba Tê. Cám ơn anh đã hỗ trợ, nếu áp dụng cách của anh đang lọc ngày tháng trong khoảng yêu cầu (Nếu vùng K2: L3) muốn tách riêng thì làm thế nào ạ
Ở đây em muốn lọc theo công việc, hay người phụ trách trong khoảng thời gian ạ
 
Dear anh HieuCD. Vẫn bị lỗi ạ

Dear anh Ba Tê. Cám ơn anh đã hỗ trợ, nếu áp dụng cách của anh đang lọc ngày tháng trong khoảng yêu cầu (Nếu vùng K2: L3) muốn tách riêng thì làm thế nào ạ
Ở đây em muốn lọc theo công việc, hay người phụ trách trong khoảng thời gian ạ
Chỉnh tý xíu
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  'On Error Resume Next
  Dim lr As Long, fDay As Date, eDay As Date
 
  lr = Range("B" & Rows.Count).End(xlUp).Row
  If Not Intersect(Target, Union(Range("F2"), Range("H2"))) Is Nothing Then
    fDay = Range("F2").Value
    eDay = Range("H2").Value
    If fDay = Empty Then fDay = DateValue("1900/1/1")
    If eDay = Empty Then eDay = DateValue("2100/1/1")
    Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & fDay, Operator:=xlAnd, Criteria2:="<=" & eDay
  ElseIf Not Intersect(Target, Range("C4:I4")) Is Nothing Then
    If Target.Value <> Empty Then
        Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria1:="*" & Cells(4, Target.Column) & "*"
    Else
        Range("A5:I" & lr).AutoFilter Field:=Target.Column
    End If
  End If
End Sub
 

File đính kèm

  • Help_AutoFilter.xlsm
    452.9 KB · Đọc: 8
Thử sửa lại thế này xem sao.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
'On Error Resume Next
    Dim lr As Long
    Dim fDay As Date, eDay As Date

    With Sheets("Data")
        fDay = .Range("F2").Value
        eDay = .Range("H2").Value
        If fDay = Empty Then fDay = DateValue("1000/1/1")
        If eDay = Empty Then eDay = DateValue("2100/1/1")
    End With
    lr = Range("B" & Rows.Count).End(xlUp).Row

    If Not Intersect(Target, Range("B4:I4")) Is Nothing Then
        If Target.Value <> Empty Then
            Range("A5:I" & lr).AutoFilter Field:=2, Criteria1:=">=" & CDbl(fDay), Operator:=xlAnd, Criteria2:="<=" & CDbl(eDay)
            Range("A5:I" & lr).AutoFilter Field:=Target.Column, Criteria1:="=*" & Cells(4, Target.Column) & "*" ', Operator:=xlAnd
         Else
            ShowAllData
        End If
    End If
End Sub
Dear anh
Cám ơn anh đã phản hồi. Code cũng ko lọc được ạ, ẩn hết dữ liệu thỏa mãn điều kiện. Em cũng ko rõ lỗi gì ạ
 
Có nhầm lần gì không ta, máy tôi chạy phát ra đúng luôn.
Dạ đúng kết quả mong muốn rồi anh, nãy em sửa không hết ạ. Khi bị lỗi ko tắt mở file lại nên nó ko chạy
Tiện cho em hỏi luôn với ạ, sao trường hợp dùng Worksheet_Change khi code bị lỗi bắt buộc phải tắt hẳn excel đi mở lại mới chạy ạ
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom