当输出为空时,excel中的自动筛选失败(当输出为空时,它会带来所有)
我使用以下代码自动过滤。它工作得很好。问题是,如果输出值为空,过滤器将给出所有值。我正在寻找是否为空,它将显示空行当输出为空时,excel中的自动筛选失败(当输出为空时,它会带来所有),excel,filter,vba,Excel,Filter,Vba,我使用以下代码自动过滤。它工作得很好。问题是,如果输出值为空,过滤器将给出所有值。我正在寻找是否为空,它将显示空行 Sub filter() Application.ScreenUpdating = False Dim Location As String Dim due As String Sheets("sheet2").Activate due = Range("b14").Value Location =
Sub filter()
Application.ScreenUpdating = False
Dim Location As String
Dim due As String
Sheets("sheet2").Activate
due = Range("b14").Value
Location = Range("a14").Value
Range("a16:j1000").ClearContents
Sheets("Sheet1").Select
Range("a1:j1000").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$j$1000").AutoFilter Field:=1, Criteria1:=due
ActiveSheet.Range("$A$1:$j$1000").AutoFilter Field:=2, Criteria1:=Location
Range("c2:i1000").Select
Selection.Copy
Sheets("sheet2").Activate
Range("b16").Select
Selection.PasteSpecial
Sheets("sheet1").Select
Selection.AutoFilter
Sheets("sheet2").Select
Range("b16").Activate
Application.ScreenUpdating = True
End Sub
当筛选器未显示任何结果时,复制筛选列表中的所有数据是一个已知错误。通常,在对过滤列表执行任何操作之前,我使用
Application.Subtotal(103,…)
()检查可见记录
Sub filter()
Application.ScreenUpdating = False
Dim Location As String, due As String
With Sheets("sheet2")
due = .Range("b14").Value
Location = .Range("a14").Value
.Range("a16:j1000").ClearContents
End With
With Sheets("sheet1").Range("a1:j1000")
.AutoFilter
.AutoFilter Field:=1, Criteria1:=due
.AutoFilter Field:=2, Criteria1:=Location
With .Offset(1, 2).resize(.rows.count - 1, 7)
If CBool(Application.Subtotal(103, .Cells)) Then _
.Copy Destination:=Sheets("sheet2").Range("b16")
End With
.AutoFilter
End With
With Sheets("sheet2")
.Activate
Range("b16").Activate
End With
Application.ScreenUpdating = True
End Sub
我已经在样本数据上成功地进行了测试。在比较日期时,请小心使用字符串(例如到期日)
当使用VBA筛选列表并随后删除可见记录时,这一点尤为重要,因为没有可见记录将导致删除整个数据矩阵。此外,当从宏运行时,此操作没有
撤消
。@ser3766722-顺便说一句,您可以在小计中使用3或103作为函数编号;两者都只计算可见值。我通常使用103,因为它提醒我,我特别关注只计算可见值。我在哪里设置过滤器范围?。范围(“c2:i1000”)。Select@user3766722-当您将与。。。以
子句结尾,任何以句点为前缀的内容都指指定的范围或工作表。在上面的例子中,我将用于图纸(“sheet1”).Range(“a1:j1000”)
然后在其中使用.AutoFilter
,因此您可能希望将用于图纸(“sheet1”).Range(“ac1:i1000”)
。是的,过滤器范围是a1:j1000,但我不想从a。我只想搜索值应该是a1:j1000,输出应该只显示c2:j1000。您可以参考我的代码范围(“c2:i1000”)。选择选择。Copy@user3766722-谢谢你澄清这一点。我已经调整了.Offset
命令,并使用Resize
来缩小引用的列。我仍然不确定你指的是C2:J1000还是C2:I1000,但如果我犯了错误,你知道在哪里更正它。