基于范围VBA的过滤列

Jac*_*ern 1 excel vba excel-vba

我目前正在处理来自大型机的数据,与此处提供的数据不同.在这种情况下,对于我的标准和目标数据集,我所有的字符串都类似于100-AAA.我已经搜索了类似的解决方案,但我没有找到针对VBA上的范围问题的直接过滤器.

我试图根据一系列标准过滤大型数据集.最初,我开始在单独的类/子例程中使用集合,但后来我压缩到在单个子例程中使用范围,如下所示:

Sub FilterTest1()

Dim RngOne As Range
Dim LastCell As Long

Sheets("Criteria").Activate
Sheets("Criteria").Select
Range("A1").Select

LastCell = Application.WorksheetFunction.CountA(ActiveSheet.Range("A:A"))

Set RngOne = ActiveSheet.Range("A2:A" & LastCell)

Sheets("Sheet 1").Activate
Sheets("Sheet 1").Select

With ActiveSheet
    If .FilterMode Then
    .ShowAllData
    End If
End With

Columns("A:A").Select
Selection.AutoFilter
ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:=RngOne, Operator:=xlOr

End Sub
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的单元格范围不会过滤数据,即使使用的标准如下Operator:=xlOr- 它只显示用于标准的最后一个单元格值.VBA代码不会失败 - 它只是根据范围不能正确过滤.

我确信存在一个简单的解决方案,但我无法看到它.

Sco*_*man 8

您当前的行:

ActiveSheet.Range("A:A").AutoFilter Field:=1, Criteria1:=RngOne, Operator:=xlOr
Run Code Online (Sandbox Code Playgroud)

试图按Range对象过滤第一个字段,而不是按范围中的每个值过滤.

我已经提供了一种方法来执行此操作,方法是将值加载到数组中,然后将数组传递给过滤条件.

值得注意的几点可以帮助您(以及将来的任何其他人):

  • 我学会了使用宏录制器过滤选择对象的正确语法.
  • 这个网站帮助我了解了数组技巧:将数组传递给过滤条件
  • 我还清理了你的代码,通过删除无用的select语句等来提高它的效率和速度.(对于这一小段代码来说,这并不是什么大不了的事,但退出这种做法将有助于您完成更大的项目!)

代码如下:

Sub FilterTest1()

Dim RngOne As Range, cell As Range
Dim LastCell As Long
Dim arrList() As String, lngCnt As Long

With Sheets("Criteria")
    LastCell = .Range("A" & Sheets("Criteria").Rows.Count).End(xlUp).Row
    Set RngOne = .Range("A2:A" & LastCell)
End With

'load values into an array
lngCnt = 0
For Each cell In RngOne
    ReDim Preserve arrList(lngCnt)
    arrList(lngCnt) = cell.Text
    lngCnt = lngCnt + 1
Next


With Sheets("Sheet 1")

    If .FilterMode Then .ShowAllData

    .Range("A:A").AutoFilter Field:=1, Criteria1:=arrList, Operator:=xlFilterValues

End With

End Sub
Run Code Online (Sandbox Code Playgroud)