[英]Calculate the difference between two non-adjacent columns, based on a “match column” using Excel VBA
[英]How to select multiple, non-adjacent, columns in Excel filtered table using column names
我正在尝试将多个不相邻的列从过滤表复制到另一张表。 我坚持多项选择部分:
* 数据来自外部 -> 我无法控制原始结构
* 过滤条件来自我不需要复制的列 -> 我不能跳过导入我不需要复制的列。
* 表格已过滤 -> 我不能简单地使用 select 列(例如 C:C),我只需要过滤后的行。
是否可以通过使用 header 名称来做到这一点?
我尝试了几行代码(见下文),但都没有产生预期的结果。 如果我录制一个宏,我只会得到范围选择:
范围("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
->这些片段生成运行时错误“object 的方法'范围'
'_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
->此代码段生成错误“编译错误:类型不匹配”:
Dim rng As Range Set rng = Union(Range("myTable[[#Headers],[Email]]").Address, Range("myTable[[#Headers],[Language]]").Address)
我在此阶段的目标是查看选择的所有必需的已过滤表列。
谢谢你看这个
这对我有用。
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
只会使事情变得混乱,而且很少,如果有的话,是必要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.