2016-11-25 6 views
0

ブックは2枚のシートで構成されています。Sheet1はユーザーが見る主要なダッシュボードで、Sheet2はピボットテーブルと通常のテーブルで構成されています。クリックしたセルのテキストに基づくピボットテーブル

いくつかのVBAコードを実装して、ユーザーがSheet1のテキストをクリックし、Sheet2のピボットテーブルがユーザーがクリックしたテキストに従ってフィルタリングするようにしたいと思います。

たとえば、シート1の列Aは米国都市のリストです。私は、ユーザーがSheet1の都市名をダブルクリックして、市の名前がクリックされた場所にSheet2フィルタのピボットテーブルを持つことができるようにしたいと思います。

実際にユーザーをSheet2に連れて来るために、マクロは必要ありません。 私がやっていることは、Sheet1のピボットテーブルを参照するだけです。

私は標準的なテーブルを使って同様のものを設計しましたが、ピボットテーブルで作業するためにはこれが本当に必要です。どうすればよいか分かりません。


UPDATE

[OK]をので、今ここに私のコードです:

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    If Not Intersect(Target, Range("E:P")) Is Nothing Then 
    Application.ScreenUpdating = False 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").ManualUpdate = True 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").PivotFields("Match").ClearAllFilters 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").PivotFields("Match").CurrentPage = ActiveCell.Value 
    Worksheets("Dillon Pivot").PivotTables("PivotTable2").ManualUpdate = False 
    Application.ScreenUpdating = True 
    End If 
End Sub 

は、私は、ユーザーがメインのダッシュボード上のセルをクリックすることができるようにしたいとのピボットテーブルを持っているが「Dillon Pivot」をフィルタリングします。私は次のエラーを取得するセルをダブルクリックしたときに

しかし、:「アプリケーション定義またはオブジェクト定義のエラー」

は誰でも助けることはできますか?

+0

は以下を見てください - それは、フィルタを交換する方法について説明します。http://stackoverflow.com/questions/11071662/filter-excel-pivot-table-using- vba 次にDouble-Clickを処理するためのコードが必要です。ここにはhttp://www.excel-easy.com/vba/examples/beforedoubleclick-event.html があります。私たちは知っている。 –

+0

さて、私はアップデートを加えました! – Darren

+0

[Slicers](https://support.office.com/en-us/article/Use-slicers-to-filter-PivotTable-data-249f966b-a9d5-4b0f-b31a-12651785d29d)を使用しないのはなぜですか? – Parfait

答えて

0

"Sheet1"イベントに以下のコードを追加してください。

Intersect内のコードは、ダブルクリックされたセルが列Aの内側にある場合にのみトリガされます(最後の行は都市の名前が内部にあります)。

変数「Dim PvtTbl As PivotTable」を使用して「Dillon Pivot」シートの「PivotTable2」を設定すると、コードがはるかに短く分かりやすくなります。

コード

Option Explicit 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

Dim LastRow As Long 
Dim PvtTbl As PivotTable 

' find last row in Column A that has a city 
LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

' check if double-click was inside a range in Column A, where there is a city name 
' starting from row 2, assuming the first row is the header row 
If Not Intersect(Target, Range("A2:A" & LastRow)) Is Nothing Then 
    Application.ScreenUpdating = False 

    Set PvtTbl = Worksheets("Dillon Pivot").PivotTables("PivotTable2") 

    With PvtTbl 
     .ManualUpdate = True 
     .PivotFields("Match").ClearAllFilters 
     .PivotFields("Match").CurrentPage = Target.Value 
     .ManualUpdate = False 
    End With 
    Application.ScreenUpdating = True 
End If 

End Sub 
関連する問題