Excel 高级过滤器未返回任何数据
Excel advanced filter not returning any data
正在尝试获取用于快速生成报告的有效过滤器 - 正如所见 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
而且它只有 returns 列 headers 而没有结果,无论我使用什么作为标准。
我的条件过滤器如下所示:
=IF(Filter!C4="Any","",Filter!C4)
其中 C4 包含从另一个 sheet 中提取的 DV 列表。
我让它暂时工作了(它会根据某些条件进行过滤,而不是其他条件)但我不知道我做了什么让它工作,也不知道为什么它不再工作了!
如果代码仅返回 headers,则表示您遇到了其中一个问题。
- 根据
Sheets("RawData").Range("W1:AA2")
范围内设置的条件,您没有任何匹配数据。手动检查数据集中的这些条件,看看是否找到任何匹配的行。
- 如果您找到一些匹配的行,那么您在 Sheet
RawData
的 W1:AA1
范围内输入的 headers 一定有问题。 条件范围中的headers必须与数据集中的headers完全相同。还要检查任何前导或尾随空格。
编辑代码:
这是编辑后的代码。请试一试...
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
正在尝试获取用于快速生成报告的有效过滤器 - 正如所见 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
而且它只有 returns 列 headers 而没有结果,无论我使用什么作为标准。
我的条件过滤器如下所示:
=IF(Filter!C4="Any","",Filter!C4)
其中 C4 包含从另一个 sheet 中提取的 DV 列表。
我让它暂时工作了(它会根据某些条件进行过滤,而不是其他条件)但我不知道我做了什么让它工作,也不知道为什么它不再工作了!
如果代码仅返回 headers,则表示您遇到了其中一个问题。
- 根据
Sheets("RawData").Range("W1:AA2")
范围内设置的条件,您没有任何匹配数据。手动检查数据集中的这些条件,看看是否找到任何匹配的行。 - 如果您找到一些匹配的行,那么您在 Sheet
RawData
的W1:AA1
范围内输入的 headers 一定有问题。 条件范围中的headers必须与数据集中的headers完全相同。还要检查任何前导或尾随空格。
编辑代码:
这是编辑后的代码。请试一试...
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