Excel VB代码将过滤器设置为一系列选项

时间:2015-12-18 21:48:22

标签: excel-vba date filtering pivot-table excel-2013

我目前有一个数据透视表,可以从SharePoint网站获取数据。使用此数据透视表我想使用Button将Filter设置为某个日期范围。我使用此网站获取过滤器以将过滤器值更改为特定日期,代码如下:

Sheets("Sheet2").Select
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = Date

这很适合将过滤器重置为当前日期,但我似乎找不到任何方法可以将过滤器设置为过去5天,10天或15天的所有日期,或者甚至将过滤器设置为当月的所有日期。

非常感谢任何协助。

2 个答案:

答案 0 :(得分:0)

鉴于您尝试将日期范围应用于Source(如ReportFilter所示,您需要循环查看日期.CurrentPage = Date中的所有PivotItems并测试你的日期范围。

下面的内容(未经测试):

PivotFields

答案 1 :(得分:0)

Emmerson:您没有说出您拥有的Excel版本。我正在使用Excel 360,这为我提供了几种直接在日期范围内过滤数据透视表的方法。

首先,如果您的日期字段恰好位于“行”或“列”区域(但不是特定情况下的“过滤器/页面”区域),则“过滤器”下拉列表中提供了“日期过滤器”选项:

Date Filter

其次,在Excel 2013或更高版本中有时间表:

Timelines

正如Scott在上面的评论中正确地说的那样,如果要过滤的PivotField不是PageField,那么第一个选项只能直接 ,即它不在数据透视表字段列表的“过滤器”窗格中。因为如果它位于“过滤器”窗格中,则您不会获得上面显示的任何过滤器选项,如以下屏幕截图所示:

enter image description here

但是有一个简单的解决方法:只需将其完全拖出数据透视表,因为您实际上仍然可以过滤不在数据透视表中的字段: enter image description here

当我设置'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

如果您不清楚是否需要更多帮助来实现此目的,请回复。