按Excel上的值数组过滤

时间:2015-04-23 08:23:59

标签: excel sorting

我有一个关于在Excel中过滤行的问题。

我有一张大桌子,有超过10 000行。每行都有一个唯一的ID。 我复制了我的表并对某些行进行了修改并突出显示了它们。

我需要根据唯一ID的值数组选择行。 (ID字段如下所示:1, 2, 3, 4, 5,.., 10500)形成第一个Excel表的未修改副本。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望能够轻松查看/访问修改后的行吗?

您可以添加单独的列,在修改的行中添加值,然后按此列对整个表进行排序。您可以在表格的顶部或底部找到修改后的条目。

只要您不再需要这些信息,请清除此新列并按ID(如有必要)使用该表。变体:保留此列并增加编辑时插入的值,以便按

排序

答案 1 :(得分:0)

我将使用以下示例数据进行演示。

Sample Tables for Filtering

A1中主要为蓝色的表:D16是名为 myTable 的ListObject。 F3:I13中主要为绿色的表是一个名为 MyTable_Copy 的ListObject。

根据 myTable_Copy ID 列中的 ID 过滤 myTable ListObject,我们需要将ID号的数组构造为字符串。可以使用一个函数。请记住,过滤器将期望一个看起来像整数的字符串数组,而不是真正的整数。如果你有特殊的数字格式,如前导零,则必须更改该功能以适应这种情况。

点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 中号)。将以下内容粘贴到名为 Book1 - Module1(Code)的新模块代码表中。

Function gather_IDs(sTBL As String, sCOL As String)
    Dim aIDs() As String, i As Long, id As Range
    For Each id In Range(sTBL & "[" & sCOL & "]")
        ReDim Preserve aIDs(0 To i)
        aIDs(i) = CStr(id.Value2)
        i = i + 1
    Next id
    gather_IDs = aIDs
End Function

现在我们需要一个sub来调用该函数,并根据返回的数组过滤 myTable 。在同一模块表中,粘贴以下内容。

Sub main()
    Dim vIDs As Variant

    vIDs = gather_IDs("myTable_Copy", "ID")

    With ActiveSheet
        .ListObjects("myTable").Range.AutoFilter Field:=1, Criteria1:=(vIDs), _
            Operator:=xlFilterValues
    End With

End Sub

请注意,传递到Criteria1参数的变量数组包含在括号中。 括号很重要。如果没有它们,.AutoFilter命令就无法将变量数组识别为数组,只会使用数组中的第一个值作为过滤条件。

点击 Alt + Q 返回工作表,然后 Alt + F8 打开对话框和运行 宏。您应该收到类似于以下内容的结果。

Tables Filtered by Array