【发布时间】: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 等...)。