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



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

基本上我有一个文件列出所有可用的武器在某个游戏。每种武器都是在游戏的某个点上获得的,例如武器1可以在第一幕的任务1中获得。我需要过滤这些数据,以允许搜索所需的所有武器,直至并包括此特定任务或特定行为。因此,如果我选择例如任务3,我需要显示任务1、2和3的所有武器。同样的机制也适用于行为。我能够为涉及if语句的行为创造可怕的解决方案,但我们在游戏中有大约30个任务,所以为任务做同样的事情会非常重复。

为了更好地解释我的问题,我用示例数据创建了一个小的Excel文档,它反映了我实现的1对1的真实文档"机制"。

拆开来看,打开后会看到三张表格:

Filter—这是显示过滤结果的字段。

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

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语句的情况下自动执行任务。

我已经使用您的示例工作簿创建了一个解决方案。请测试一下,看看它是否达到了您的目的: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

最新更新