按日期筛选结果,或者通过beetwen两个日期筛选结果

问题描述:

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

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 
+0

从来就加入这一点,但由于某种原因isn't工作“如果oCell.Value = Target.Value而oCell.Offset(0,4).value的> = Range(“S5”)和oCell.Offset(0,4).Value RMAMDF 2011-04-08 10:05:33

+0

嗨@RMAMDF,我相信会更好的过滤数据*之后*填充范围,而不是过滤时填充数据。你能否给我们一个你现在拥有的数据和你想要的数据的例子? – 2011-04-08 11:31:56

+0

@Tiago Cardoso,我试图过滤数据,但宏总是获取所有值,过滤或不过滤。也许是一个命令,告诉宏只会检查未被过滤的值? 如果我只过滤2009年的日期,则会显示2007年至2010年的所有日期。如果你看到宏,我想过滤的数据是这个“oCellResult1.Offset(iCellCount,0).Value = oCell.Offset(0,4).Value”。该结果对应于该单元偏移列中的所有日期(例如:01-04-2007,16-09-2010等)。 – RMAMDF 2011-04-08 14:42:30

如果我正确理解了你想达到的目标,我们可以在我们的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 
+0

我试过类似的东西(更“基本”:)),我得到了同样的错误:下一个没有对于与“Next oCell”行突出显示 – RMAMDF 2011-04-08 20:12:46

+0

我明白了!我做了这个:'如果oCell.Value = Target.Value和CDate(oCell.Offset(0,4).Value)> CDate(“01-01-2009”)和CDate(oCell.Offset(0,4) .Value) RMAMDF 2011-04-08 20:23:13

+0

是的,正好@RMAMDF! – 2011-04-08 21:07:37