包含来自 excel 2007 vba 中经过过滤和排序的列表对象的数据的数组

Array with data from filtered and ordered listobject in excel 2007 vba

大家早上好, 我有一个包含 17 个字段和一些行(10-20 行)的列表对象,我需要过滤列表对象以获得我在列中找到的任何不同值。 这个过滤后的列表对象必须按另一个整数列按升序排序,然后我必须找到不按顺序的数据并获取连续数字的最小值和最大值。

为了获得唯一值,我编写了这个运行良好的函数:

    Public Function GetUnique(Inputrange As Range)

    Dim d As Object, c As Range, k, tmp As String

    Set d = CreateObject("scripting.dictionary")
    For Each c In Inputrange
        tmp = Trim(c.Value)
        If Len(tmp) > 0 Then d(tmp) = d(tmp) + 1
    Next c
    GetUnique = d.Keys
End Function

要过滤数据并对过滤后的数据进行排序,我正在尝试使用此代码

Dim tblaux as listobject
Dim RdS as variant
Dim r as variant

With tblaux
        Z = GetUnique(.ListColumns(7).DataBodyRange)
        For Each RdS In Z
            .Range.AutoFilter Field:=7, Criteria1:="=" & RdS
            .Sort.SortFields.Clear
            .Sort.SortFields.Add Key:=.Range.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With .Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                 Set r = .rng.Offset(1, 0).Resize(.rng.Rows.Count - 1, .rng.Columns.Count).SpecialCells(xlCellTypeVisible)
            End With
    Next RdS
End with

我从这段代码中得到的应该是一个包含过滤和排序数据的数组,但我得到的是与 table.

中的非连续行相对应的许多区域

我有点生气,但我无法解决这个问题。

感谢支持

已编辑 在 OP 澄清后他想要一个 连续 范围过滤

Option Explicit

Sub main()
    Dim tblaux As ListObject
    Dim RdS As Variant, Z As Variant
    Dim r As Variant

    With Worksheets("tblaux").ListObjects("tblaux")
        Z = GetUnique(.ListColumns(7).DataBodyRange)
        With .Range
            For Each RdS In Z
                .Sort key1:=.Range("G1"), order1:=xlAscending, key2:=.Range("A1"), order2:=xlAscending, Header:=xlYes, Orientation:=xlTopToBottom, MatchCase:=False
                .AutoFilter Field:=7, Criteria1:="=" & RdS
                MsgBox .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible).Address
                r = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible).Value
            Next RdS
        End With
    End With
End Sub