过滤vba后如何只取一些列?

Posted

技术标签:

【中文标题】过滤vba后如何只取一些列?【英文标题】:How to take only some columns after filtering vba? 【发布时间】:2011-05-07 15:46:44 【问题描述】:

我的 Excel 中有 2 张工作表,我想从我有客户信息的 1 张工作表中取出我想过滤数据的 2 张工作表。

所以我做了这个宏来过滤工作表 2 上的数据。

`Sub choice()
'
' choice Macro
'
Dim parameter As Range, data As Range, result As Range
Set parameter = Range("param").CurrentRegion
Set data = Range("table").CurrentRegion
Set result = Range("result").CurrentRegion.Offset(1, 0)
result.ClearContents
Set result = Range("result").CurrentRegion
    data.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=parameter _
        , CopyToRange:=result, Unique:=False
 
End Sub`

data = "table" - 一张纸上的客户表

但是它复制粘贴了客户信息中的所有数据。

是否有可能以某种方式在此宏中添加代码以仅从那里获取名字和姓氏?

【问题讨论】:

我在 Excel 2010 中做了一些测试。对我来说,它只复制目标“结果”表中指定的列。您能否更新以指示您正在使用的 Excel 版本,以及每个范围中包含的列名 【参考方案1】:

这可能与您为数据、条件和目标定义范围的方式有关。下面的代码应该有助于显示明确的范围。

假设您在 Sheet1 列 A:F 中有要过滤的数据,要过滤的条件在 I1:N2 范围内,并且过滤后的数据要复制到 P:U 列中

代码的第一行只会根据I1:N2 中的条件将列E:F 放入列T:U 第二行将根据相同的条件将来自A:F 的所有过滤数据放入P:U

此外,请确保字段/列标题与数据/条件/目标完全匹配

Sub test()

     'Returns E:F in destination range T:U based on filter criteria
     Sheet1.Columns("A:F").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
         Sheet1.Range("I1:N2"), _
         CopyToRange:=Sheet1.Range("T1:U1"), Unique:=True

     'Returns full range A:F in destination range P:U based on filter criteria
     Sheet1.Columns("A:F").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
         Sheet1.Range("I1:N2"), _
         CopyToRange:=Sheet1.Range("P1:U1"), Unique:=True
 End Sub

【讨论】:

以上是关于过滤vba后如何只取一些列?的主要内容,如果未能解决你的问题,请参考以下文章

VBA:如何从过滤后的数据中获取当前区域?

VBA 列循环

VBA-如何选择具有值的列单元格

VBA数据透视表:添加过滤器

vba 用autofilter筛选不符合条件的值

找到组合后在 VBA 中过滤