Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Excel VBA过滤年_Excel_Vba - Fatal编程技术网

Excel VBA过滤年

Excel VBA过滤年,excel,vba,Excel,Vba,我的代码如下所示。我第一次过滤时,效果很好。然而,第二次,情况并非如此。过滤列包含年份 For i = 1 To LastRow If wSheet.Range("A1").Offset(i, 0) <> wSheet.Range("A1").Offset(i + 1, 0) Then WellName = wSheet.Range("A1").Offset(i, 0) Set rng = wSheet.Range("A1", Cells(La

我的代码如下所示。我第一次过滤时,效果很好。然而,第二次,情况并非如此。过滤列包含年份

For i = 1 To LastRow
    If wSheet.Range("A1").Offset(i, 0) <> wSheet.Range("A1").Offset(i + 1, 0) Then
        WellName = wSheet.Range("A1").Offset(i, 0)
        Set rng = wSheet.Range("A1", Cells(LastRow, LastColumn))
        rng.AutoFilter Field:=1, Criteria1:=Name
        L_top = wSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Row
        L_bot = wSheet.Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible).Count
        LastRowFilter = wSheet.Range("A1").End(xlDown).Row
        LastColumnFilter = wSheet.UsedRange.Columns.Count

        For j = 1 To LastRowFilter
            If Year(wSheet.Range("B1").Offset(j, 0)) <> Year(wSheet.Range("B1").Offset(j + 1, 0)) Then
                ReportYear = Year(wSheet.Range("B1").Offset(j, 0))
                Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter))
                rng2.AutoFilter Field:=2, Criteria2:=ReportYear
                L_top = wSheet.Range("B2:B" & LastRowFilter).SpecialCells(xlCellTypeVisible).Row
                L_bot = wSheet.Range("B2:B" & LastRowFilter).SpecialCells(xlCellTypeVisible).Count

            End If
        Next

    End If
 Next
i=1至最后一行的

如果wSheet.Range(“A1”).Offset(i,0)wSheet.Range(“A1”).Offset(i+1,0),则
井名=wSheet.Range(“A1”).偏移量(i,0)
设置rng=wSheet.Range(“A1”,单元格(LastRow,LastColumn))
rng.AutoFilter字段:=1,准则1:=Name
L_top=wSheet.Range(“A2:A”和LastRow)。特殊单元格(xlCellTypeVisible)。行
L_bot=wSheet.Range(“A2:A”和LastRow)。特殊单元格(xlCellTypeVisible)。计数
LastRowFilter=wSheet.Range(“A1”).End(xlDown).Row
LastColumnFilter=wSheet.UsedRange.Columns.Count
对于j=1到LastRowFilter
如果年份(wSheet.Range(“B1”).Offset(j,0))年份(wSheet.Range(“B1”).Offset(j+1,0)),则
报告年度=年度(W表范围(“B1”)。偏移量(j,0))
设置rng2=wSheet.Range(“B1”,单元格(LastRowFilter,LastColumnFilter))
rng2.AutoFilter字段:=2,准则2:=ReportYear
L_top=wSheet.Range(“B2:B”和LastRowFilter)。特殊单元格(xlCellTypeVisible)。行
L_bot=wSheet.Range(“B2:B”和LastRowFilter)。特殊单元格(xlCellTypeVisible)。计数
如果结束
下一个
如果结束
下一个

您的问题似乎是您的第二个筛选器(似乎初始筛选器应该会导致错误,但如果没有损坏,请不要修复它:)。以下线路存在问题:

ReportYear = Year(wSheet.Range("B1").Offset(j, 0))
Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter))
rng2.AutoFilter Field:=2, Criteria2:=ReportYear
您正在将
ReportYear
设置为要筛选的年份(有意义),但随后您尝试筛选与该年份相等的值。这在逻辑上似乎有道理,但请记住,该列包含日期,而不是年份。由于不知道您的代码的任何其他信息(因此,对于任何其他错误,我深表歉意),这似乎适用于我的简单测试:

ReportYear = Year(wSheet.Range("B1").Offset(j, 0))
Set rng2 = wSheet.Range("B1", Cells(LastRowFilter, LastColumnFilter))
rng2.AutoFilter Field:=2, Criteria1:= ">=" & DateSerial(ReportYear, 1, 1), _
               Operator:=xlAnd, Criteria2:="<=" & DateSerial(ReportYear, 12, 31)
ReportYear=Year(wSheet.Range(“B1”).偏移量(j,0))
设置rng2=wSheet.Range(“B1”,单元格(LastRowFilter,LastColumnFilter))
rng2.AutoFilter字段:=2,标准1:=“>=”&日期序列(报告年,1,1)_

运算符:=xlAnd,准则2:=“您得到的错误是什么?实际上不是错误。但它似乎隐藏了什么。第一次过滤成功,但当我进行第二次过滤时,它会隐藏任何内容。有什么办法吗?我已经尝试录制宏,但仍然无法录制。工作簿的名称是否等于要筛选的列中的某一年?另外,第二次要过滤什么?第一次过滤(A列)是关于名称的,它可以工作。其次(b栏),我想按年份过滤。B列上的数据格式是日期(dd/mm/yyyy),然后我想根据年份对其进行过滤,因此我选择year()。@mr.lumpy听起来不错-如果不起作用,很乐意帮助解决问题。