在Excel VBA中使用多个条件从一张工作表提取数据到另一张工作表

时间:2019-09-26 06:42:57

标签: excel vba

我在工作表2中有6列的大数据。我想基于多个条件将数据从工作表2提取到工作表5。
我的工作表2数据...

Example data

所以,我编写了以下代码以将数据从工作表2提取到工作表5。

Sheet2.Range("a1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=Sheet5.Range("a3:d3"), _
CopytoRange:=Sheet5.Range("a10:k10"), Unique:=False
'Columns(6).AutoFit 

问题是当我在上面的代码中运行时,它显示了工作表2中的所有数据,但是我的条件不满足。

例如,如果用户选择以下详细信息... 地点:美国

月份:19年7月

品种:我

备注:PR

输出应该像这样... Example Output

1 个答案:

答案 0 :(得分:0)

CriteriaRange期望使用标头和条件,此外,CopyToRange可以为它分配一个单元格(您不知道预过滤每次过滤应包含的行数) 。因此,在sheet1和sheet5上进行以下设置:

Sheet1:

enter image description here

第5页:

enter image description here

运行以下代码:

Sub AdvancedFiltr()

Sheet2.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheet5.Range("A1:F2"), CopyToRange:=Sheet5.Range("A4")

End Sub

Sheet5中的结果:

enter image description here


一些评论:

  • CriteriaRange:标头需要与数据库中的标头完全匹配。
  • CriteriaRange:您不需要所有标题,只需要将其作为过滤依据。
  • CopyToRange:明智的做法是在应用另一个过滤器之前清除Sheet5上的范围。
  • 我真的认为thisAdvancedFilter上的一篇很棒的文章,旨在阐明其工作原理。