如何使用列名在Excel筛选表中选择多个非相邻列

如何使用列名在Excel筛选表中选择多个非相邻列,excel,vba,Excel,Vba,我正在尝试将多个非相邻列从筛选表复制到另一个工作表。我被多重选择部分困住了: *数据来自外部来源->我无法控制原始结构 *过滤凭证来自我不需要复制的列->我不能跳过导入我不需要复制的列。 *该表已筛选->我不能简单地选择列,例如C:C,我只需要筛选的行。 是否可以通过使用标题名来执行此操作 我尝试了几行代码,见下文,但没有一行产生预期的结果。如果我录制宏,我只需获得范围选择: 范围C155:C30230,E155:E30230。选择 这是我到目前为止尝试的,按结果分组: 请注意,这些是测试代码,

我正在尝试将多个非相邻列从筛选表复制到另一个工作表。我被多重选择部分困住了: *数据来自外部来源->我无法控制原始结构 *过滤凭证来自我不需要复制的列->我不能跳过导入我不需要复制的列。 *该表已筛选->我不能简单地选择列,例如C:C,我只需要筛选的行。 是否可以通过使用标题名来执行此操作

我尝试了几行代码,见下文,但没有一行产生预期的结果。如果我录制宏,我只需获得范围选择: 范围C155:C30230,E155:E30230。选择

这是我到目前为止尝试的,按结果分组: 请注意,这些是测试代码,因此不一定引用相同的列 ->工作,但不是我想要的: "这只是一栏, RangemyTable[[标题],[电子邮件]]。选择

'这是完整的未筛选列选择 Unionws.range C:C,ws.range:E.Select

'这不是使用头名称 UnionActiveSheet.ListObjectsmyTable.ListColumns3.Range,ActiveSheet.ListObjectsmyTable.ListColumns5.Range.Select

->这些代码段生成对象的运行时错误方法“范围” “\u工作表”失败: UnionRangemyTable[[Headers],[Email]]。选择,RangemyTable[[Headers],[Language]]。选择

变暗rng As范围 设置rng=UnionRangemyTable[[Headers],[Email]],RangemyTable[[Headers],[Language]]

UnionRangemyTable[[Headers],[Email]],RangemyTable[[Headers],[Language]]。选择

UnionRangemyTable[[Headers],[Email]],范围A:A.Select

->此代码段生成错误编译错误:类型不匹配: 变暗rng As范围 设置rng=UnionRangemyTable[[Headers],[Email]]。地址,RangemyTable[[Headers],[Language]]。地址

我在这一阶段的目标是查看所需的所有筛选表列。 谢谢你看这个

这个适合我

Sub x()

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

End Sub

有一个很好的表格指南。

使用您所展示的结构化引用,我认为您需要如下内容:

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

R.Copy 'your_destination
您的一些错误与以下内容有关:

您没有为Union方法的参数提供范围对象 您只为参数提供标题行 使用Select只会让事情变得混乱,很少有必要。
这对我来说是可行的,但是否可以对标题名而不是列号执行相同的操作?是的,只需使用名称而不是索引。执行此操作后,仍然获取对象“\u工作表”的方法“Range”失败的运行时错误。如果我使用列号,例如.ListColumns1.Range,那么它可以工作。如果你能解决这个问题,这将是我的首选答案。感谢you@HarCo它在这里使用一个用该名称和那些标题设置的表。如果没有更多关于真实数据和您正在做什么的信息,我只能猜测您在实施此解决方案时遇到的问题。我的猜测是,标题名或表名不是您所认为的那样。可能是一些非打印字符、空格等。如果不是这样,我需要检查工作簿。