Excel VB 将过滤器设置为一系列选项的代码
Excel VB Code to Set Filter to a range of Options
我目前有一个 Pivot Table,它从 SharePoint 站点提取数据。有了这个 Pivot table,我想使用一个 Button 将 Filter 设置为特定的日期范围。我使用这个网站获取过滤器以将过滤器值更改为特定日期,代码如下:
Sheets("Sheet2").Select
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = Date
这很适合将过滤器重置为当前日期,但我似乎找不到任何方法可以将过滤器设置为过去 5、10 或 15 天的所有日期,或者甚至将过滤器设置为当前月份的所有日期。
如有任何帮助,我们将不胜感激。
鉴于您正在尝试将日期范围应用到 ReportFilter
(如 .CurrentPage = Date
所证明的那样,您将需要遍历日期 [=] 中的所有 PivotItems
14=] 并根据您的日期范围进行测试。
如下所示(未经测试):
Dim ws as Worksheet, pt as PivotTable, pf as PivotField, pi as PivotItem
Dim dStart as Date, dEnd as Date
dStart = #1/1/2015#
dEnd = #1/31/2015#
Set ws = Sheets("Sheet2")
Set pt = ws.PivotTables("PivotTable1")
Set pf = pt.PivotFields("Date")
With pf
.ClearAllFilters
For each pi in pf.PivotItems
If pi.Value > = dStart And pi.Value <= dEnd Then
pi.Visible = True 'or maybe pi.Selected = True
Else
pi.Visible = False 'or maybe pi.Selected = False
End If
Next
End With
Emmerson:你没有说你有什么版本的Excel。我使用的是 Excel 360,它为我提供了几种直接在日期范围内过滤数据透视表的方法。
首先,如果您的日期字段恰好位于“行”或“列”区域(但不是您的特定情况下的 Filters/Page 区域),则过滤器下拉列表中提供了“日期过滤器”选项:
其次,在 Excel 2013 年或之后有时间表:
正如 Scott 在上面的评论中所说的那样,如果您要过滤的 PivotField 不是 PageField,即它不在数据透视表字段列表。因为如果它在“过滤器”窗格中,那么您不会获得上面显示的任何过滤器选项,如下面的屏幕截图所示:
但有一个简单的解决方法:只需将其完全拖出数据透视表,因为实际上您仍然可以筛选不在数据透视表中的字段:
在我设置 'Between' 过滤器时启动宏记录器导致以下代码:
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add2 _
Type:=xlDateBetween, Value1:="23/12/2015", Value2:="31/12/2015"
这是它的通用版本,它会将任何日期数据透视字段过滤到您想要的最后一个 X:
Sub LastXDays(lDays As Long, Optional pf As PivotField)
Dim StartDate As Date
Dim EndDate As Date
EndDate = Date
StartDate = EndDate - lDays + 1
If pf Is Nothing Then
On Error Resume Next
Set pf = ActiveCell.PivotField
If Err.Number <> 0 Then GoTo errhandler
On Error GoTo errhandler
End If
If Not IsDate(pf.PivotItems(1)) Then GoTo errhandler
pf.ClearAllFilters
pf.PivotFilters.Add2 _
Type:=xlDateBetween, _
Value1:=CStr(StartDate), _
Value2:=CStr(EndDate)
errhandler:
End Sub
您可以使用如下方式调用该例程:
Sub Last5Days()
LastXDays 5, ActiveSheet.PivotTables("PivotTable1").PivotFields("Date")
End Sub
Post 如果不清楚您是否需要更多帮助来实现此功能,请返回。
我目前有一个 Pivot Table,它从 SharePoint 站点提取数据。有了这个 Pivot table,我想使用一个 Button 将 Filter 设置为特定的日期范围。我使用这个网站获取过滤器以将过滤器值更改为特定日期,代码如下:
Sheets("Sheet2").Select
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = Date
这很适合将过滤器重置为当前日期,但我似乎找不到任何方法可以将过滤器设置为过去 5、10 或 15 天的所有日期,或者甚至将过滤器设置为当前月份的所有日期。
如有任何帮助,我们将不胜感激。
鉴于您正在尝试将日期范围应用到 ReportFilter
(如 .CurrentPage = Date
所证明的那样,您将需要遍历日期 [=] 中的所有 PivotItems
14=] 并根据您的日期范围进行测试。
如下所示(未经测试):
Dim ws as Worksheet, pt as PivotTable, pf as PivotField, pi as PivotItem
Dim dStart as Date, dEnd as Date
dStart = #1/1/2015#
dEnd = #1/31/2015#
Set ws = Sheets("Sheet2")
Set pt = ws.PivotTables("PivotTable1")
Set pf = pt.PivotFields("Date")
With pf
.ClearAllFilters
For each pi in pf.PivotItems
If pi.Value > = dStart And pi.Value <= dEnd Then
pi.Visible = True 'or maybe pi.Selected = True
Else
pi.Visible = False 'or maybe pi.Selected = False
End If
Next
End With
Emmerson:你没有说你有什么版本的Excel。我使用的是 Excel 360,它为我提供了几种直接在日期范围内过滤数据透视表的方法。
首先,如果您的日期字段恰好位于“行”或“列”区域(但不是您的特定情况下的 Filters/Page 区域),则过滤器下拉列表中提供了“日期过滤器”选项:
其次,在 Excel 2013 年或之后有时间表:
正如 Scott 在上面的评论中所说的那样,如果您要过滤的 PivotField 不是 PageField,即它不在数据透视表字段列表。因为如果它在“过滤器”窗格中,那么您不会获得上面显示的任何过滤器选项,如下面的屏幕截图所示:
但有一个简单的解决方法:只需将其完全拖出数据透视表,因为实际上您仍然可以筛选不在数据透视表中的字段:
在我设置 'Between' 过滤器时启动宏记录器导致以下代码:
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add2 _
Type:=xlDateBetween, Value1:="23/12/2015", Value2:="31/12/2015"
这是它的通用版本,它会将任何日期数据透视字段过滤到您想要的最后一个 X:
Sub LastXDays(lDays As Long, Optional pf As PivotField)
Dim StartDate As Date
Dim EndDate As Date
EndDate = Date
StartDate = EndDate - lDays + 1
If pf Is Nothing Then
On Error Resume Next
Set pf = ActiveCell.PivotField
If Err.Number <> 0 Then GoTo errhandler
On Error GoTo errhandler
End If
If Not IsDate(pf.PivotItems(1)) Then GoTo errhandler
pf.ClearAllFilters
pf.PivotFilters.Add2 _
Type:=xlDateBetween, _
Value1:=CStr(StartDate), _
Value2:=CStr(EndDate)
errhandler:
End Sub
您可以使用如下方式调用该例程:
Sub Last5Days()
LastXDays 5, ActiveSheet.PivotTables("PivotTable1").PivotFields("Date")
End Sub
Post 如果不清楚您是否需要更多帮助来实现此功能,请返回。