在Excel上按值排列值进行筛选
我有一个关于在Excel中筛选行的问题。
我有一张大桌子,有10000多排。 每一行都有一个唯一的ID
。 我复制了我的表格,并对一些行进行了修改并突出显示了它们。
我需要根据唯一ID
值的数组select行。 ( ID
字段是这样的: 1, 2, 3, 4, 5,.., 10500
)形成第一个Excel表的未经修改的副本。
我将用下面的示例数据进行演示。
A1:D16中占主导地位的蓝色表格是名为myTable的ListObject。 F3:I13中主要的绿色表格是名为MyTable_Copy的ListObject。
要根据在myTable_Copy的ID列中find的ID过滤myTable ListObject,我们需要构造一个ID数组作为string。 可以使用一个函数。 请记住,filter将期待一个看起来像整数的string数组,而不是真正的整数。 如果你有像前导零这样的特殊数字格式,这个函数将不得不被改变以适应这个。
点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块( Alt + I , M )。 将以下代码粘贴到名为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