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听起来不错-如果不起作用,很乐意帮助解决问题。