PivotFieldのすべてのアイテムを非表示にすることはできません。常に少なくとも1つは見えるようにしなければなりません。
あなたはこのすなわち作り付け日付フィルタに機能を利用するためにVBAを使用する場合、それははるかに高速かつ容易になります。 https://1drv.ms/x/s!Ah_zTnaUo4DzjhezQ3OTq9tq1APC
注:
ここで私はちょうどそれを行うサンプルファイルがありますこの機能はRowFieldsまたはColumnFieldでのみ使用できます。したがって、私のコードはPageFieldsで動作しません。
ここでは、ピボット・フィールドをフィルタリングするインターバル・タイプとインターバル期間を選択できるようにする汎用ルーチンがあります。また、必要に応じて、前後にカウントする日付を選択することもできます。
Sub Pivots_FilterPeriod(sInterval As String, _
lNumber As Long, _
Optional vRelativeTo As Variant, _
Optional pf As PivotField)
'Programmer: Jeff Weir
'Contact: [email protected]
'Description: Lets you programatically filter a Pivot RowField or ColumnField by specifying
' an interval type (e.g. days, weeks, months, quarters, years)
' as well as an interval count (e.g. 7, -7)
' If the optional vRelativeTo field is left blank, it counts back/foward from
' the youngest/oldest item depending on whether lNumber is positive/negative
' It leverages off the inbuilt DateFilters functionality, and as such does not
' work on RowFields.
Dim dteDateAdd As Date
Dim dteFrom As Date
Dim dteTo As Date
On Error GoTo errhandler
If pf Is Nothing Then
On Error Resume Next
Set pf = ActiveCell.PivotField
On Error GoTo errhandler
If pf Is Nothing Then GoTo errhandler
End If
With pf
If .DataType = xlDate _
And .Orientation <> xlPageField _
And .Orientation <> xlDataField Then
If IsMissing(vRelativeTo) Or vRelativeTo = "" Then
.AutoSort xlAscending, "Date"
If lNumber > 0 Then
vRelativeTo = .PivotItems(1)
Else
vRelativeTo = .PivotItems(.PivotItems.Count)
End If
End If
Select Case UCase(sInterval)
Case "D", "DD", "DDD", "DDDD", "DAY", "DAYS": sInterval = "d"
Case "W", "WW", "WWW", "WWWW", "WEEK", "WEEKS": sInterval = "ww"
Case "M", "MM", "MMM", "MMMM", "MONTH", "MONTHS": sInterval = "m"
Case "Q", "QQ", "QQQ", "QQQQ", "QUARTER", "QUARTERS": sInterval = "q"
Case "Y", "YY", "YYY", "YYYY", "YEAR", "YEARS": sInterval = "yyyy"
End Select
dteDateAdd = DateAdd(sInterval, lNumber, vRelativeTo)
If lNumber > 0 Then
dteDateAdd = dteDateAdd - 1
Else
dteDateAdd = dteDateAdd + 1
End If
If dteDateAdd < vRelativeTo Then
dteFrom = dteDateAdd
dteTo = vRelativeTo
Else
dteFrom = vRelativeTo
dteTo = dteDateAdd
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
.ClearAllFilters
.PivotFilters.Add2 _
Type:=xlDateBetween, _
Value1:=CStr(dteFrom), _
Value2:=CStr(dteTo)
End If
End With
errhandler:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
さまざまなパラメータを使用して実際にどのように見えるかを示すスクリーンショットです。
これは、最新のデータから最後の5日間にフィルタリングする方法を示しています。
と記号を変更することで、それは我々が最も古いデータから最初の5日間たくなければならないことをうまくいきます記録上:
あなたがそのrelativeToでフィールドに実際の日付を指定した場合、それは数値パラメータは正/ negatであるかどうかに応じて、そこから前方/バックカウントされますive。
...と、ここで最後の5日間です:ここで私はこれを書いている今日の日付から次の5日間です
それはあなたが日かどうかを指定できます、週、四半期、月、または年。例えば、ここに戻って最新のレコードから数えて2週間です:
が、私はそれをトリガーするためにここにWorksheet_Changeイベントを使用していますが、あなたが好きなら、あなたはボタンにそれをフックすることができ、必要なパラメータを入力します。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim bContinue As Boolean
If Not Intersect(Target, Range("Interval")) Is Nothing Then bContinue = True
If Not Intersect(Target, Range("Number")) Is Nothing Then bContinue = True
If Not Intersect(Target, Range("RelativeTo")) Is Nothing Then bContinue = True
If bContinue Then Pivots_FilterPeriod [Interval], [Number], [RelativeTo], Sheet1.PivotTables(1).PivotFields("Date")
End Sub
ps:私が入れたvbaは先週のことです...私の意図は、先月のいくつかの変更で同じマクロを行うことです –