如何使用列名在 Excel 过滤表中选择多个不相邻的列

Posted

技术标签:

【中文标题】如何使用列名在 Excel 过滤表中选择多个不相邻的列【英文标题】:How to select multiple, non-adjacent, columns in Excel filtered table using column names 【发布时间】:2020-02-13 03:00:18 【问题描述】:

我正在尝试将多个不相邻的列从过滤表复制到另一个工作表。我被多项选择部分困扰: * 数据来自外部 -> 我无法控制原始结构 * 过滤条件来自我不需要复制的列 -> 我不能跳过导入我不需要复制的列。 * 表格已过滤 -> 我不能简单地选择列(例如 C:C),我只需要过滤后的行。 是否可以通过使用标题名称来做到这一点?

我尝试了几行代码(见下文),但都没有产生预期的结果。如果我录制一个宏,我只会得到范围选择:Range("C155:C30230,E155:E30230").Select

这是我迄今为止尝试过的,按结果分组: 请注意,这些是测试代码,因此不一定引用相同的列 -> 工作,但不是我想要的:' this is only one column Range("myTable[[#Headers],[Email]]").Select

' this is full (unfiltered) column selection Union(ws.Range("C:C"), ws.Range("E:E")).Select

' this is not using header name Union(ActiveSheet.ListObjects("myTable").ListColumns(3).Range, ActiveSheet.ListObjects("myTable").ListColumns(5).Range).Select

->这些 sn-ps 生成运行时错误“对象的方法'范围' '_Worksheet' 失败”:Union(Range("myTable[[#Headers],[Email]]").Select, Range("myTable[[#Headers],[Language]]").Select)

Dim rng As Range Set rng = Union(Range("myTable[[#Headers],[Email]]"), Range("myTable[[#Headers],[Language]]"))

Union(Range("myTable[[#Headers],[Email]]"), Range("myTable[[#Headers],[Language]]")).Select

Union(Range("myTable[[#Headers],[Email]]"), Range("A:A")).Select

->此 sn-p 生成错误“编译错误:类型不匹配”:Dim rng As Range Set rng = Union(Range("myTable[[#Headers],[Email]]").Address, Range("myTable[[#Headers],[Language]]").Address)

我在此阶段的目标是查看选择的所有必需的已过滤表列。 谢谢你看这个

【问题讨论】:

【参考方案1】:

这对我有用。

Sub x()

With ActiveSheet.ListObjects(1)
    Union(.ListColumns(1).Range, .ListColumns(3).Range).SpecialCells(xlCellTypeVisible).Copy Range("A18")
End With

End Sub

有一个很好的表格指南here。

【讨论】:

这对我有用,但是否可以对标题名称而不是列号做同样的事情? 是的,只需使用名称而不是索引。【参考方案2】:

使用你展示的结构化引用,我认为你想要这样的东西:

Set R = Union(Range("Table1[[#All],[Email]]"), Range("Table1[[#All],[Language]]")).SpecialCells(xlCellTypeVisible)

R.Copy 'your_destination

您的一些错误与:

您没有为Union 方法的参数提供范围对象 您只是为参数提供标题行 使用Select 只会使事情变得混乱,而且很少(如果有的话)是必要的。

【讨论】:

完成了,但仍然得到 "Method 'Range' of object '_Worksheet' failed" 运行时错误。如果我使用列号(例如.ListColumns(1).Range,那么它可以工作。如果你能解决这个问题,那么这将是我的首选答案。谢谢 @HarCo 它在这里与使用该名称和这些标题设置的表一起使用。如果没有关于真实数据以及您正在做什么的更多信息,我只能猜测您在实施此解决方案时遇到的问题。我的猜测是标题名称(或表名称)不是您认为的那样。也许是一些非打印字符、空格等。如果不是这样,我需要检查工作簿。

以上是关于如何使用列名在 Excel 过滤表中选择多个不相邻的列的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 如何从多个可能的列名中进行选择?

excel表格相邻单元格互换位置的教程

如何在vue js中集成类似Excel的表排序和过滤

使用列名和过滤器检查存在的自定义验证规则

如何在火花中连接多个列,同时从另一个表中连接列名(每行不同)

excel表中,怎样筛选出多个条件的数据