【问题标题】:Array with data from filtered and ordered listobject in excel 2007 vba包含来自 excel 2007 vba 中过滤和有序列表对象的数据的数组
【发布时间】:2017-02-11 05:50:52
【问题描述】:

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

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

我有点发疯了,但我无法解决这个问题。

感谢支持

【问题讨论】:

    标签: excel vba excel-2007 listobject


    【解决方案1】:

    编辑在 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
    

    【讨论】:

    • 感谢您的回答,但我继续将变量 r 由与数据库中非连续区域相对应的更多区域组成,与原始代码完全相同。
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 2019-07-30
    • 2023-04-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多