我有如下所示的代码。我第一次过滤,它工作正常。然而第二次,它没有。已过滤的列包含多年。
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
答案 0 :(得分:1)
看来您的问题是您的第二个过滤器(似乎初始过滤器应该导致和错误,但如果它没有破坏,请不要修复它:))。问题在于以下几行:
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
值,但会将过滤器变为“显示ReportYear
的1月1日到12月31日之间的所有日期”。我同意这看起来有点不优雅(我相信这里的一位大师有一个更短的解决方案),但它可能适用于你的情况。