将Excel过滤器结果导入VBA数组

时间:2016-03-09 07:32:28

标签: excel vba filter

我有一个VBA子程序,用于过滤第4列中包含文本“SV-PCS7”的记录。如何将这些结果转换为数组?

Sub FilterTo1Criteria()
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim ro As Integer
Set xlbook = GetObject("C:\07509\04-LB-06 MX-sv.xlsx")
Set xlsheet = xlbook.Sheets("04-LB-06 MX")
   With xlsheet

       .AutoFilterMode = False
       .Range("blockn").AutoFilter Field:=1, Criteria1:="SV-PCS7"

   End With

End Sub

3 个答案:

答案 0 :(得分:3)

应用Range.AutoFilter Method并确定有可见的单元格后,您需要使用xlCellTypeVisible来处理Range.Areas propertyRange.SpecialCells method。每个区域都有一行或多行要处理。

$locationProvider.html5Mode({
  enabled: true,
  requireBase: false
});

保留选项可以与ReDim statement一起使用,但只有最后一个范围可以重新设置。我以错误的方向构建了数组,然后使用TRANSPOSE function来翻转方向。注意:可以成功翻转的数组元素数量有限制。

答案 1 :(得分:1)

看起来最好的方法是循环遍历每一行,检查行是否被隐藏(cell.EntireRow.Hidden = False),并将该行的数据添加到数组中(如果它没有被隐藏)。类似的例子:Easiest way to loop through a filtered list with VBA?

答案 2 :(得分:1)

如果您想避免Jeeped(优秀)解决方案的复杂循环,您可以使用临时表首先复制可见行。

Sub test()
    Dim src As Range, m As Variant, sh As Worksheet

    Set src = Sheet1.Range("c3").CurrentRegion.SpecialCells(xlCellTypeVisible)
    Set sh = Worksheets.Add

    src.Copy sh.Range("a1")
    m = sh.Range("a1").CurrentRegion
    Application.DisplayAlerts = False
    sh.Delete
    Application.DisplayAlerts = True
    Debug.Print UBound(m)
End Sub