在Excel上按值排列值进行筛选

我有一个关于在Excel中筛选行的问题。

我有一张大桌子,有10000多排。 每一行都有一个唯一的ID 。 我复制了我的表格,并对一些行进行了修改并突出显示了它们。

我需要根据唯一ID值的数组select行。 ( ID字段是这样的: 1, 2, 3, 4, 5,.., 10500 )形成第一个Excel表的未经修改的副本。

我将用下面的示例数据进行演示。

用于过滤的样本表

A1:D16中占主导地位的蓝色表格是名为myTable的ListObject。 F3:I13中主要的绿色表格是名为MyTable_Copy的ListObject。

要根据在myTable_CopyID列中find的ID过滤myTable ListObject,我们需要构造一个ID数组作为string。 可以使用一个函数。 请记住,filter将期待一个看起来像整数的string数组,而不是真正的整数。 如果你有像前导零这样的特殊数字格式,这个函数将不得不被改变以适应这个。

点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块( Alt + IM )。 将以下代码粘贴到名为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命令不会将variables数组识别为数组,只会将数组中的第一个值用作过滤条件。

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

由数组筛选的表格

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

您可以添加一个单独的列,在修改后的行中添加一个值,然后按该列对整个表进行sorting。 您可以在表格顶部或底部find修改的条目。

只要你不再需要这些信息,清除这个新的列,并通过ID(如有必要)。 变体:离开这个列并增加编辑时插入的值,这样你可以sorting