【问题标题】:Filter Results by date, or by beetwen two dates按日期或两个日期之间过滤结果
【发布时间】:2011-04-07 18:51:37
【问题描述】:

我有这段代码,我想按两个日期过滤自动填充结果(例如:从 01-01-2009 到 02-10-2010)。我怎样才能做到这一点?有人有线索吗?下面的代码被简化(当前只有更多的范围)。我试图在 If 函数中添加条件,但我只得到错误...感谢您的帮助。顺便说一句,我对这段代码有很大帮助,所以我是 excel 宏 vba 中的一个小菜鸟:)。

dimResult1、clean1 等代表日期值。如果 oCellResult1.Offset(iCellCount, 0).Value = oCell.Offset(0, 4).Value 不在两个日期之间,我不能做的是跳到 nextcell。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim oCell As Excel.Range
Dim oCellResult1 As Excel.Range
Dim oCellResult2 As Excel.Range
Dim oCellClean1 As Excel.Range
Dim oCellClean2 As Excel.Range
Dim oRangeID As Excel.Range
Dim iCellCount As Integer


If Target.Address = "$T$4" Then

    'Set source data
    Set oRangeID = Sheets("Registo_EPI").Range("A3:A5000")

    'Define initial target for the results obtained
    'data
    Set oCellResult1 = Sheets("Distribuição_EPI").Range("U12") 
    'luvas
    Set oCellResult2 = Sheets("Distribuição_EPI").Range("E12") 

    'Clear up any previous data
    Set oCellClean1 = oCellResult1
    Set oCellClean2 = oCellResult2
    While Len(oCellClean1.Value) > 0

        oCellClean1.ClearContents
        Set oCellClean1 = oCellClean1.Offset(1, 0)

        oCellClean2.ClearContents
        Set oCellClean2 = oCellClean2.Offset(1, 0)

    Wend

    'Scans source range for match data
    For Each oCell In oRangeID

        If oCell.Value = "" Then Exit For

        If oCell.Value = Target.Value Then

           'data
           oCellResult1.Offset(iCellCount, 0).Value = oCell.Offset(0, 4).Value 
           'luvas
           oCellResult2.Offset(iCellCount, 0).Value = oCell.Offset(0, 9).Value 
           iCellCount = iCellCount + 1

           If iCellCount = 14 Then iCellCount = iCellCount + 20


        End If

    Next oCell

End If

End Sub

【问题讨论】:

  • 我已经添加了这个,但由于某种原因无法正常工作“如果 oCell.Value = Target.Value And oCell.Offset(0, 4).Value >= Range("S5") And oCell.Offset(0, 4).Value
  • 嗨@RMAMDF,我相信在填充范围之后过滤数据会更好,而不是在填充数据时过滤。您能否举例说明您现在拥有的数据以及您希望拥有的数据?
  • @Tiago Cardoso,我尝试过滤数据,但宏总是获取所有值,过滤或未过滤。也许一个命令告诉宏只确认未过滤的值?如果我只过滤 2009 年的日期,则会出现 2007 年到 2010 年的所有日期。如果您看到宏,我要过滤的数据是“oCellResult1.Offset(iCellCount, 0).Value = oCell.Offset(0, 4).Value”。此结果对应于该单元偏移列中的所有日期(例如:01-04-2007、16-09-2010 等...)。

标签: vba date filter excel


【解决方案1】:

如果我正确理解您想要实现的目标,我们可以在 IF 语句中添加一个新条件。

应该是这样的:

    'Ensure the value in oCell is a date; otherwise the comparison won't work
    If oCell.Value = Target.Value and IsDate(oCell.Value) Then

        'Date Comparison
        if cDate(oCell.Value) > cdate("01-01-2009") and _
            cDate(oCell.Value) < ("02-10-2010") then

            'data
            oCellResult1.Offset(iCellCount, 0).Value = oCell.Offset(0, 4).Value 
            'luvas
            oCellResult2.Offset(iCellCount, 0).Value = oCell.Offset(0, 9).Value 
            iCellCount = iCellCount + 1

            If iCellCount = 14 Then iCellCount = iCellCount + 20

        end if

    End If

【讨论】:

  • 我已经尝试过类似的方法(更“基本”:)),我得到了同样的错误:Next without For 突出显示“Next oCell”行
  • 我明白了!我做了这个:If oCell.Value = Target.Value And CDate(oCell.Offset(0, 4).Value) &gt; CDate("01-01-2009") And CDate(oCell.Offset(0, 4).Value) &lt; ("02-10-20101") Then。我只选择了 offset(0,4) 值,因为它们是唯一带有日期的值。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多