【问题标题】:Excel advanced filter not returning any dataExcel 高级过滤器不返回任何数据
【发布时间】:2018-10-19 20:22:55
【问题描述】:

试图获得一个用于快速构建报告的有效过滤器 - 如 here 所示。

我现在的代码是这样的:

Option Explicit
Sub GetData()

'Clear data field

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

'Advanced Filter code

    Sheets("RawData").Range("JobRegister[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        Sheets("RawData").Range("W1:AA2"), CopyToRange:=Sheets("Filter").Range("B10:T10"), Unique:=True



    Range("B10").Select

End Sub

无论我使用什么作为标准,它只返回列标题而不返回结果。

我的条件过滤器如下所示:

=IF(Filter!C4="Any","",Filter!C4)

其中 C4 包含从另一张纸中提取的 DV 列表。

我让它暂时工作(它会过滤某些标准,而不是其他标准),但我不知道我做了什么让它工作,也不知道为什么它不再工作了!

【问题讨论】:

    标签: vba excel report advanced-filter


    【解决方案1】:

    如果代码仅返回标头,则意味着您遇到了这些问题之一。

    1. 您没有任何符合Sheets("RawData").Range("W1:AA2") 范围内设置的条件的匹配数据。手动检查数据集中的这些条件,看看是否找到任何匹配的行。
    2. 如果您发现一些匹配的行,那么您在工作表RawData 上的W1:AA1 范围内放置的标题一定有问题。 条件范围内的标头必须与数据集中的标头完全相同。还要检查任何前导或尾随空格。

    编辑代码:

    这是编辑后的代码。请试一试...

    Sub GetData()
    Dim sws As Worksheet, dws As Worksheet
    
    Application.ScreenUpdating = False
    
    Set sws = Sheets("RawData")
    Set dws = Sheets("Filter")
    
    'Clearing the Criteria Range
    sws.Range("W2:AA2").ClearContents
    
    If dws.Range("C3") = "" Or dws.Range("C3").Value = "Any" Then
        sws.Range("X2").Value = ""
    Else
        sws.Range("X2").Value = dws.Range("C3").Value
    End If
    
    If dws.Range("C4") = "" Or dws.Range("C4").Value = "Any" Then
        sws.Range("Z2").Value = ""
    Else
        sws.Range("Z2").Value = dws.Range("C4").Value
    End If
    
    If dws.Range("C5") = "" Or dws.Range("C5").Value = "Any" Then
        sws.Range("Y2").Value = ""
    Else
        sws.Range("Y2").Value = dws.Range("C5").Value
    End If
    
    If dws.Range("C6") = "" Or dws.Range("C6").Value = "Any" Then
        sws.Range("AA2").Value = ""
    Else
        sws.Range("AA2").Value = dws.Range("C6").Value
    End If
    
    If dws.Range("C7") = "" Or dws.Range("C7").Value = "Any" Then
        sws.Range("W2").Value = ""
    Else
        sws.Range("W2").Value = dws.Range("C7").Value
    End If
    
    
    'Clear data field
    
    dws.Range("B10").CurrentRegion.Clear
    
    'Advanced Filter code
    sws.Range("JobRegister[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
        sws.Range("W1:AA2"), CopyToRange:=dws.Range("B10:T10"), Unique:=True
    
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

    • 我已将数据集中的标题复制到标准范围内,仍然是同样的问题。我还手动检查了至少一行符合我当前标准的行。有什么方法可以上传屏幕截图或整个文件以供审核?
    • 您可以将文件上传到一个驱动器或谷歌驱动器或保管箱,然后在此处分享链接。
    • 谢谢,如果你不介意找我:dropbox.com/s/kj5e80dafgkbxzm/…
    • 我已经为你添加了一个编辑过的代码。请试一试。有几个问题,例如日期标准不是日期而是文本字符串等。我还从标准范围中删除了公式,并在您点击“获取数据”按钮后通过代码本身放置标准。该文件正在运行,这是您的文件链接。 dropbox.com/s/l3cqpd813ykwxc6/…
    • 哇!太感谢了!进入下一个挑战 - 看看 Excel 是否允许我根据该数据创建动态图表。我认为这将是一个比我想象的更长的项目,但希望我以后能学到很多有用的 Excel 技能。
    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多