0

大家早上好,我有一个包含 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

我从这段代码中得到的应该是一个包含过滤和排序数据的数组,但我得到的是与表中不连续的行相对应的多个区域。

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

感谢您的支持

4

1 回答 1

0

在 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
于 2016-10-03T11:24:33.430 回答