2011-04-07 146 views
0

我有這段代碼,我想通過兩個日期(例如: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 <= Range(「V5」)Then「。 – 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

回答

0

如果我正確理解了你想達到的目標,我們可以在我們的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)<(「02-10-20101」)然後'。我只選擇了偏移量(0,4),因爲它們是唯一有日期的值。非常感謝你的幫助! – RMAMDF 2011-04-08 20:23:13

+0

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