Emmerson:你没有说你有什么版本的 Excel。我正在使用 Excel 360,它为我提供了几种直接在日期范围内过滤数据透视表的方法。
首先,如果您的日期字段恰好位于“行”或“列”区域(但不是在您的特定情况下的“过滤器/页面”区域),则“过滤器”下拉列表中可以使用“日期过滤器”选项:
其次,在 Excel 2013 或更高版本中有时间线:
正如 Scott 在上面的 cmets 中所说的那样,如果您要过滤的 PivotField 不是 PageField,即它不在 PivotTable Fields 列表的 Filters 窗格中,第一个选项仅直接有效。因为如果它在“过滤器”窗格中,那么您将看不到上面显示的任何过滤器选项,如下面的屏幕截图所示:
但有一个简单的解决方法:只需将其完全拖出数据透视表,因为您实际上仍然可以过滤不在数据透视表中的字段:
在我设置“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
如果不清楚您是否需要更多帮助来实施此操作,请回复。