2016-03-22 21 views
0

である場合は、visibleに設定します。ユーザーがピボット・テーブルをワンクリックで特定の基準に変更できるようにするには、少し問題があります。私は誰かが解決策やこれのアイデアを持っていることを願っています。ピボット・ロー・フィルタ:pivotitemが値の異なるリスト

たとえば、コンサルティング費用のみを持つためには、リストのすべての人数をフィルタリングする必要があります。私は、あなたが見たくない基準や値をすべて "選択解除"する必要があることを知っています。問題は、非常に多くの口座番号があり、すべての金額を書き留めるには年齢がかかることです。.PivotItems("90000000").Visible = False。そして、私はそれに優雅な解決策があると確信しています。

if PivotItem<> [several values with OR operator] Then Visible = Falseのような方法がありますか?

さらに、アカウントには値がないため、残高一覧(rawdata/pivotsource)には表示されません。今私がPivotItem("x").Visible = Falseを持っていて、Xが存在しなければ、サブはエラーになります。値が存在しない場合、この状況を無視して無視する方法はありますか?

設定は次のとおりです。ピボットには基本的に、列に期間(月)、行にアカウントとアカウントの説明、ページフィールドにパートナーIDが記載された残高一覧が含まれています。

Sub Pivot_FS10N_consulting() 
Dim pvt As PivotTable 
Dim pf As PivotField 

Application.ScreenUpdating = False 

Sheets("FS10N Pivot").Range("A8").clear 

Set pvt = Sheets("FS10N Pivot").PivotTables("PivotTable2") 
With pvt 
    .ClearTable 
    .AddDataField pvt.PivotFields("Value in local currency"), "Value", xlSum 

     With .PivotFields("Partner-ID") 
      .Orientation = xlPageField 
      .Position = 1 
      .EnableMultiplePageItems = True 
      .PivotItems("246").Visible = False 
      .PivotItems("247").Visible = False 
      .PivotItems("457").Visible = False 
      .PivotItems("631").Visible = False 
      .PivotItems("(blank)").Visible = False 
     End With 

     With .PivotFields("Period") 
      .Orientation = xlColumnField 
      .Position = 1 
     End With 

     With .PivotFields("Account") 
      .Orientation = xlRowField 
      .Position = 1 

      'Filter criteria should be here right now 

     End With 

     With .PivotFields("Account description") 
      .Orientation = xlRowField 
      .Position = 2 
     End With 

    For Each pf In .PivotFields 
    pf.Subtotals(1) = False 
    Next pf 

    .ColumnGrand = True 
    .RowGrand = True 
    .DataBodyRange.NumberFormat = "#,##0.00;-#,##0.00" 
    .RowAxisLayout xlTabularRow 
    .TableStyle2 = "FS10N" 
End With 

With Sheets("FS10N Pivot").Range("A8") 
    .Font.Bold = True 
    .Font.ThemeColor = xlThemeColorDark1 
    .Interior.Color = 1200359 
    .Interior.Pattern = xlSolid 
    .Value = "Consulting" 
End With 

End Sub 

事前のおかげで多くのことを次のように、これまで

コードがあります。どんな助けでも大歓迎です。明確にする

EDIT: 私はそれがERPに新しい作成しまったと私は持っていない場合は見えアカウントを維持するリスクを回避するために、不均等なすべて口座番号のセットまたはリストを選択する必要がありますそれはコード内にあります。そして、私は毎月有効数字を確認しないという錯覚を持っています。 アカウント番号を別のシートまたは同じシートにコピーすると、確認するセルの範囲を参照できますか?次に、その番号がそこにあるかどうかを調べるだけです。そうでない場合は、可視性をfalseに設定する必要があります。

システム情報: OS:Windows 7の Excel 2007の64ビット

答えて

0

ストアあなたは、スクリプト辞書に保存しておきたいすべての口座番号。その後、.PivotItemsをループし、それぞれが辞書に存在するかどうかを確認します。そうでない場合は、アイテムを非表示にします。

Sub test() 

'this Dictionary will store the account numbers we want to NOT hide 
Dim hideAccounts As Object 
Set hideAccounts = CreateObject("Scripting.Dictionary") 

'say, for example, the accounts you want to hide are on sheet one cells 1--20 
'loop through the cells and add the accounts to the collection 
With Sheets(1).Range("A1:A20") 
    For i = 1 To .Count 
     hideAccounts.Add .Cells(i),.Cells(i) 'adding to the dict in the format key, value 
    Next i 
End With 

' 
'...insert some code to create a pivot table 
' 
With myPivot 
    for each itm in .PivotItems 
     if not hideAccounts.Exists(itm) then 'if it does not exist in the dictionary 
      .PivotItems(itm).visible=False'set it to invisible 
     end if 
    next 

End With 


End Sub 
+0

申し訳ありませんが、私は何かを言及するのを忘れていました、十分に具体的ではありませんでした。他の番号が時々変わるか、新しい番号があるので、不平等な番号をチェックするルートに行きたいと思っていました。私はできるだけ手間のかからないように維持したいと思います。毎月チェックすることなく、私は合計には選択されてはならない勘定も含まれているというリスクにさらされます。 – bbear

+0

明確にするために - 私のコードはリストからすべてのチェックを外しています。リストにないすべてのチェックを外すコードが必要ですか?もしそうなら、あなたはどんなOSですか?マイクロソフトかMac? (Macで扱いにくいかもしれません) – Sam

+0

本当にありがとうございます。リストにないものはすべて非表示にする必要があります。 OSはWindowsです。それが助けになるなら...私は口座番号の異なるリストを取って、それを同じシート(および隠す)または別のシートに挿入するのに十分なスペースを持っています。それが助けば。 – bbear

0

私はまた、あなたの反復なしPivotItemsの多数の選択を解除するにははるかに高速な方法を与えるこの種のものの2つの記事を書きました。

http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/

http://dailydoseofexcel.com/archives/2013/12/03/inversely-filter-a-pivot-based-on-an-external-range/

またスライサーを持つフィルタリングピボットは非常に非常に遅くなるおそれがバグがあるように見えることに注意してください。私の投稿を見る: http://dailydoseofexcel.com/archives/2015/11/17/filtering-pivottables-with-vba-deselect-slicers-first/

関連する問題