我有一个关于在Excel中过滤行的问题。
我有一张大桌子,有超过10 000行。每行都有一个唯一的ID
。
我复制了我的表并对某些行进行了修改并突出显示了它们。
我需要根据唯一ID
的值数组选择行。
(ID
字段如下所示:1, 2, 3, 4, 5,.., 10500
)形成第一个Excel表的未修改副本。
答案 0 :(得分:0)
如果我理解正确,您希望能够轻松查看/访问修改后的行吗?
您可以添加单独的列,在修改的行中添加值,然后按此列对整个表进行排序。您可以在表格的顶部或底部找到修改后的条目。
只要您不再需要这些信息,请清除此新列并按ID(如有必要)使用该表。变体:保留此列并增加编辑时插入的值,以便按
排序答案 1 :(得分:0)
我将使用以下示例数据进行演示。
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 打开宏对话框和运行 主宏。您应该收到类似于以下内容的结果。