使用高级过滤器vba过滤多页数据文档

时间:2015-10-20 11:20:19

标签: excel excel-vba vba

在工作中,我被要求创建用于过滤数据的Excel文档。我遇到了某些过滤器的一些困难,如下所述。

基本上我有一份文件列出了某个游戏中所有可用的武器。每种武器都可以在游戏中的某个时刻获得,例如武器1可以在行动1的任务1中获得。我需​​要过滤这些数据以便搜索所需的所有武器,包括这个特定的任务或某些法案。所以如果我选择例如任务3 我需要为任务1 2和3 显示所有武器。行为的机制相同。我能够为涉及if语句的行为创建可怕的解决方法,但我们在游戏中有大约30个任务,所以对任务执行相同操作会非常重复。

为了更好地解释我的问题,我创建了一个small Excel document with example data,它反映了我实施1比1的真实文档“机制”。

要打破它,打开它后你会看到三张纸:

过滤器 - 这是显示过滤结果的那个。

完整列表 - 这是我们想要过滤的整个武器列表。

AM - 这是游戏的行为和使命列表。

我正在使用此宏来过滤行为(它在您点击过滤器行为按钮后启动):

 Sub FilterActs()
    Sheets("Filter").Select
    Range("B10").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Clear

    Sheets("Full list").Range("A1:H175").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Sheets("Full list").Range("P1:P4"), CopyToRange:=Sheets("Filter").Range("B10"), Unique:=True
    Columns.AutoFit
    Range("B10").Select    
End Sub

由于您可以在完整列表表中找到IF语句,P1:P4 ,因此它适用于行为。但是,我不知道如何在不使用gazilion IF语句的情况下自动执行此操作。

1 个答案:

答案 0 :(得分:2)

我使用您的示例工作簿创建了一个解决方案。请测试一下,看看它是否能达到您的目的:http://excelhero.com/samples/roff_excelhero.xlsm

请注意,此解决方案使用不同的标准范围。

解决方案的相关代码在这里:

Public Sub Filter()
    Dim rData As Range, rCrit As Range, rOut As Range
    With Sheets("Full list")
        Set rData = .[a1].CurrentRegion
        Set rCrit = .[s1:t2]
    End With
    Set rOut = [b10:d10]
    rOut(1).Select
    rData.AdvancedFilter xlFilterCopy, rCrit, rOut
End Sub