Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 按日期或两个日期筛选结果_Vba_Date_Filter_Excel - Fatal编程技术网

Vba 按日期或两个日期筛选结果

Vba 按日期或两个日期筛选结果,vba,date,filter,excel,Vba,Date,Filter,Excel,我有这个代码,我想按两个日期过滤自动填充结果,例如:从2009年1月1日到2010年10月2日。我该怎么做?有人有线索吗?下面的代码被简化,当前的代码只有更多的范围。我试图在If函数中添加条件,但我只得到了错误。。。谢谢你的帮助。顺便说一句,我对这段代码有很大的帮助,所以我对excel宏vba有点不在行 dimResult1、clean1等代表日期值。如果oCellResult1.OffsetCellCount,0.Value=oCell.Offset0,4.Value不在两个日期之间,我不能跳

我有这个代码,我想按两个日期过滤自动填充结果,例如:从2009年1月1日到2010年10月2日。我该怎么做?有人有线索吗?下面的代码被简化,当前的代码只有更多的范围。我试图在If函数中添加条件,但我只得到了错误。。。谢谢你的帮助。顺便说一句,我对这段代码有很大的帮助,所以我对excel宏vba有点不在行

dimResult1、clean1等代表日期值。如果oCellResult1.OffsetCellCount,0.Value=oCell.Offset0,4.Value不在两个日期之间,我不能跳到下一个单元格

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

如果我正确理解了您试图实现的目标,我们可以在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

我添加了这一点,但由于某些原因,如果oCell.Value=Target.Value和oCell.Offset0,4.Value>=RangeS5和oCell.Offset0,4.Value Hi@RMAMDF,我认为最好在填充范围后过滤数据,而不是在填充数据时过滤。你能给我们举一个你现在拥有的数据和你想要的数据的例子吗?@Tiago Cardoso,我尝试过过滤数据,但宏总是得到所有的值,过滤或不过滤。也许是一个命令,告诉宏只确认未过滤的值?如果我只过滤2009年的日期,则会显示从2007年到2010年的所有日期。如果您看到宏,我要筛选的数据是oCellResult1.offsetCellCount,0.Value=oCell.Offset0,4.Value。此结果对应于该单元格偏移列中的所有日期,例如:01-04-2007、16-09-2010等等……我尝试了类似于更基本的方法:,但我得到了相同的错误:Next with For与Next oCell highlightedi行!我只是这样做的:如果oCell.Value=Target.Value和CDateoCell.Offset0,4.Value>CDate01-01-2009和CDateoCell.Offset0,4.Value<02-10-20101那么。我只选择了offset0,4值,因为它们是唯一有日期的值。非常感谢你的帮助!