Note: The other languages of the website are Google-translated. Back to English

Excelの特定のセル値に基づいてピボットテーブルをフィルタリングするにはどうすればよいですか?

通常、下のスクリーンショットに示すように、ドロップダウンリストで項目を選択することにより、ピボットテーブルのデータをフィルタリングしています。 実際には、特定のセルの値に基づいてピボットテーブルをフィルタリングできます。 この記事のVBAメソッドは、問題の解決に役立ちます。

VBAコードを使用して特定のセル値に基づいてピボットテーブルをフィルタリングする


VBAコードを使用して特定のセル値に基づいてピボットテーブルをフィルタリングする

次のVBAコードは、Excelの特定のセル値に基づいてピボットテーブルをフィルタリングするのに役立ちます。 次のようにしてください。

1.事前に、ピボットテーブルをフィルタリングする値をセルに入力してください(ここではセルH6を選択します)。

2.セル値でフィルタリングするピボットテーブルが含まれているワークシートを開きます。 次に、シートタブを右クリックし、コンテキストメニューから[コードの表示]を選択します。 スクリーンショットを参照してください:

3.オープニングで アプリケーション向け Microsoft Visual Basic ウィンドウで、以下のVBAコードをコードウィンドウにコピーします。

VBAコード:セル値に基づいてピボットテーブルをフィルター処理する

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Category")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

免責事項:コードでは、

1) "Sheet1」はワークシートの名前です。
2) "ピボットテーブル2」はピボットテーブルの名前です。
3)ピボットテーブルのフィルタリングフィールドは「カテゴリー".
4)ピボットテーブルをフィルタリングする値がセルに配置されます H6.
上記の変数値は必要に応じて変更できます。

4。 プレス 他の + Q を閉じるためのキー アプリケーション向け Microsoft Visual Basic 窓。

次に、以下のスクリーンショットに示すように、ピボットテーブルはセルH6の値に基づいてフィルタリングしています。

必要に応じて、セルの値を他のセルの値に変更できます。

注意:セルH6に入力する値は、ピボットテーブルの[カテゴリ]ドロップダウンリストの値と完全に一致する必要があります。


関連記事:


最高のオフィス生産性ツール

Kutools for Excelはほとんどの問題を解決し、生産性を80%向上させます

  • 再利用: すばやく挿入 複雑な数式、チャート および以前に使用したものすべて。 セルを暗号化する パスワード付き。 メーリングリストを作成する そしてメールを送る...
  • スーパーフォーミュラバー (複数行のテキストと数式を簡単に編集できます); 読書レイアウト (多数のセルを簡単に読み取って編集する); フィルター範囲に貼り付け...
  • セル/行/列をマージする データを失うことなく; 分割セルコンテンツ; 重複する行/列を組み合わせる...重複セルを防止します。 範囲を比較する...
  • [複製]または[一意]を選択します 行; 空白行を選択 (すべてのセルは空です); スーパーファインドとファジーファインド 多くのワークブックで; ランダム選択...
  • 正確なコピー 数式参照を変更せずに複数のセル。 参照の自動作成 複数のシートに; 箇条書きを挿入、チェックボックスなど...
  • テキストを抽出、テキストの追加、位置による削除、 スペースを削除する; ページング小計の作成と印刷。 セルの内容とコメントを変換する...
  • スーパーフィルター (フィルタースキームを保存して他のシートに適用します); 高度な並べ替え 月/週/日、頻度など。 特殊フィルター 太字、斜体...
  • ワークブックとワークシートを組み合わせる; キー列に基づいてテーブルをマージします。 データを複数のシートに分割; xls、xlsx、PDFをバッチ変換...
  • 300 以上の強力な機能. Office / Excel 2007-2021 および 365 をサポートします。すべての言語をサポートします。 企業や組織に簡単に導入できます。 フル機能の 30 日間無料トライアル。 60日間の返金保証。
kteタブ201905

Officeタブは、タブ付きのインターフェイスをOfficeにもたらし、作​​業をはるかに簡単にします

  • Word、Excel、PowerPointでタブ付きの編集と読み取りを有効にする、パブリッシャー、アクセス、Visioおよびプロジェクト。
  • 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いて作成します。
  • 生産性を 50% 向上させ、毎日何百回もマウス クリックを減らすことができます!
officetab下部
コメントを並べ替える
コメント (23)
まだ評価はありません。 最初に評価してください!
このコメントは、サイトのモデレーターによって最小化されました
このコード(もちろん私の変数用に更新された)を使用すると、フィールドを変更すると、フィルターは一時的に正しいものに変更され、その後すぐにクリアされます。 なぜこれを行っているのかを理解しようとしています(サブの最後にあるClearAllFiltersと関係があるかどうか疑問に思っていますか?)
このコメントは、サイトのモデレーターによって最小化されました
階層を持つレポートフィルターでこれをどのように行いますか?
このコメントは、サイトのモデレーターによって最小化されました
おい! マクロをありがとう。

同じページの複数のピボットテーブルに使用しようとしましたが、機能しません。 私はそれをこのように書いた:

プライベートサブワークシート_Change(ByValターゲットを範囲として)
Dim xPTable1 をピボットテーブルとして
xPFile1 をピボットフィールドとして暗くする
Dim xStr1 を文字列として
エラーで次の再開
Intersect(Target、Range( "D7"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable1 = Worksheets( "BUSCADOR")。PivotTables( "PV_ETAPA1")を設定します
xPFile1 = xPTable1.PivotFields( "ETAPA1")を設定します
xStr1 = Target.Text
xPFile1.ClearAllFilters
xPFile1.CurrentPage = xStr1
Application.ScreenUpdating = True

Dim xPTable2 をピボットテーブルとして
xPFile2 をピボットフィールドとして暗くする
Dim xStr2 を文字列として
エラーで次の再開
Intersect(Target、Range( "G7"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable2 = Worksheets( "BUSCADOR")。PivotTables( "PV_ETAPA2")を設定します
xPFile2 = xPTable2.PivotFields( "ETAPA2")を設定します
xStr2 = Target.Text
xPFile2.ClearAllFilters
xPFile2.CurrentPage = xStr2
Application.ScreenUpdating = True

End Subの

多分あなたは私を助けることができます!

前もって感謝します!
このコメントは、サイトのモデレーターによって最小化されました
Hi


マクロをありがとう


同じことを試していますが、2つのテーブルで動作させることができません。 彼らは両方とも同じセルを見ているだけで2つの異なるピボットテーブル


感謝
このコメントは、サイトのモデレーターによって最小化されました
ピボットテーブル名を変更する必要があります。 各ピボットテーブルには異なる名前が付いています。 これを取得するには、ピボットを右クリックしてピボットテーブル設定を選択すると、名前が上部に表示されます
このコメントは、サイトのモデレーターによって最小化されました
ボンジュール、

Je ne comprends pas comment ajouter le nom du second TCD dans la macro pour que cela fonctionne sur les deux.
Pourriez-vous m'aider?

ありがとう
このコメントは、サイトのモデレーターによって最小化されました
どういうわけか、こんにちは。VisualBasicページに入った後、このマクロはまったく表示されません。 このマクロを有効/実行できません。すべてのトラストセンターの設定を確認しましたが、何も起こりません。助けてください。
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、私はこれを機能させることができないようです。 参照したいセルは数式から取得されます-これが、数式が返す値ではなく、数式を見ているときにフィルターがセルを見つけられない理由です。よろしくお願いします。HeatherMcDonagh
このコメントは、サイトのモデレーターによって最小化されました
こんにちはヘザー、あなたは解決策を見つけましたか? 私も同じ問題を抱えています。
このコメントは、サイトのモデレーターによって最小化されました
同じタブにある3つの異なるピボットを変更/フィルタリングすることができました。 また、データセットに「データが見つかりません」という行を追加しました。そうしないと、フィルターが「すべて」のままになり、不要になりました。 上記は私に経営陣からの称賛を得るのに大いに役立ちましたので、私は共有したいと思いました。 (すべて)大文字と小文字が区別されることに注意してください。それを理解するのに少し時間がかかりました。
プライベートサブワークシート_Change(ByValターゲットを範囲として)
'テスト
xPTableをピボットテーブルとして薄暗くする
xPFileをPivotFieldとして薄暗くする
文字列としての薄暗いxStr

ピボットテーブルとしての薄暗いx2PTable
Dim x2PFile をピボットフィールドとして
文字列としての薄暗いx2Str

ピボットテーブルとしての薄暗いx3PTable
Dim x3PFile をピボットフィールドとして
文字列としての薄暗いx3Str

エラーで次の再開
Intersect(Target、Range( "a2:e2"))が何もない場合は、Subを終了します

Application.ScreenUpdating = False

'tbl-1
xPTable = Worksheets( "Graphical")。PivotTables( "PivotTable1")を設定します
xPFile = xPTable.PivotFields( "MR Department-Department")を設定します
xStr = ターゲット.テキスト
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
xPFile.CurrentPage = "(All)"の場合xPFile.CurrentPage="データが見つかりません"

'tbl-2
x2PTable = Worksheets( "Graphical")。PivotTables( "PivotTable2")を設定します
x2PFile = x2PTable.PivotFields( "MR Department-Department")を設定します
x2Str = ターゲット.テキスト
x2PFile.ClearAllFilters
x2PFile.CurrentPage = x2Str
x2PFile.CurrentPage = "(All)"の場合x2PFile.CurrentPage="データが見つかりません"

'tbl-3
x3PTable = Worksheets( "Graphical")。PivotTables( "PivotTable3")を設定します
x3PFile = x3PTable.PivotFields( "MR Department-Department")を設定します
x3Str = ターゲット.テキスト
x3PFile.ClearAllFilters
x3PFile.CurrentPage = x3Str
x3PFile.CurrentPage = "(All)"の場合x3PFile.CurrentPage="データが見つかりません"

Application.ScreenUpdating = True

End Subの
このコメントは、サイトのモデレーターによって最小化されました
これはGoogleスプレッドシートで可能ですか? もしそうなら、どのように?
このコメントは、サイトのモデレーターによって最小化されました
Googleスプレッドシートには、ピボットテーブルは必要ありません。 フィルタ機能を介して直接実行できます
このコメントは、サイトのモデレーターによって最小化されました
同じワークシートで複数のワークシート変更コードを使用したい。 どうやってするか? 私のコードは以下の通りです:
プライベートサブワークシート_Change(ByValターゲットを範囲として)
'セル値に基づくピボットテーブルフィルター
xPTableをピボットテーブルとして薄暗くする
xPFileをPivotFieldとして薄暗くする
文字列としての薄暗いxStr
エラーで次の再開
Intersect(Target、Range( "D20:D21"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable = Worksheets( "Sheet1")。PivotTables( "PivotTable2")を設定します
xPFile = xPTable.PivotFields( "Designation")を設定します
xStr = ターゲット.テキスト
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating = True
End Subの

Private Sub Worksheet_Change2(ByVal Target As Range)
'セル値2に基づくピボットテーブルフィルター
xPTableをピボットテーブルとして薄暗くする
xPFileをPivotFieldとして薄暗くする
文字列としての薄暗いxStr
エラーで次の再開
Intersect(Target、Range( "H20:H21"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable = Worksheets( "Sheet1")。PivotTables( "PivotTable2")を設定します
xPFile = xPTable.PivotFields( "Offering")を設定します
xStr = ターゲット.テキスト
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating = True
End Subの
このコメントは、サイトのモデレーターによって最小化されました
オラ、gostaria de sabre se quisesse filtrar mais de uma categoria como poderia ser?
このコメントは、サイトのモデレーターによって最小化されました
選択セルを別のタブにリンクしたい場合はどうなりますか? これはこれまでの私のコードです
プライベートサブワークシート_Change(ByValターゲットを範囲として)
Dim xPTable1 をピボットテーブルとして
xPFile1 をピボットフィールドとして暗くする
Dim xStr1 を文字列として
エラーで次の再開
Intersect(Target、Range( "B1"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable1 = Worksheets( "SM_SKU PIVOTS")。PivotTables( "PivotTable1")を設定します
xPFile1 = xPTable1.PivotFields( "Geography")を設定します
xStr1 = Target.Text
xPFile1.ClearAllFilters
xPFile1.CurrentPage = xStr1
Application.ScreenUpdating = True

Dim xPTable2 をピボットテーブルとして
xPFile2 をピボットフィールドとして暗くする
Dim xStr2 を文字列として
エラーで次の再開
Intersect(Target、Range( "B1"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable2 = Worksheets( "SM_SKU PIVOTS")。PivotTables( "PivotTable4")を設定します
xPFile2 = xPTable2.PivotFields( "Geography")を設定します
xStr2 = Target.Text
xPFile2.ClearAllFilters
xPFile2.CurrentPage = xStr2
Application.ScreenUpdating = True

Dim xPTable3 をピボットテーブルとして
xPFile3 をピボットフィールドとして暗くする
Dim xStr3 を文字列として
エラーで次の再開
Intersect(Target、Range( "B1"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
xPTable3 = Worksheets( "SM_SKU PIVOTS")。PivotTables( "PivotTable8")を設定します
xPFile3 = xPTable3.PivotFields( "Geography")を設定します
xStr3 = Target.Text
xPFile3.ClearAllFilters
xPFile3.CurrentPage = xStr3
Application.ScreenUpdating = True

End Subの
このコメントは、サイトのモデレーターによって最小化されました
こんにちは!

VBAを初めて使用するので、セル範囲に基づいてピボットフィルターを選択するコードが必要です。
「CurrentPage」を範囲値に変更するにはどうすればよいですか?
ありがとう!!
-------------------------------------------------- -----------------------------------------
サブPrintTour()

ActiveSheet.PivotTables( "PivotTable1")。PivotFields(_
"[Bereich 1]。[Tour]。[Tour]")。 _
ClearAllFilters
ActiveSheet.PivotTables( "PivotTable1")。PivotFields(_
"[Bereich 1]。[Tour]。[Tour]")。 _
CurrentPage = "[Bereich1]。[Tourlt。Anlieferungstag]。&[4001-01]"
End Subの
このコメントは、サイトのモデレーターによって最小化されました
このコードをどうもありがとう! フィールドに合わせて調整した後、機能しましたが、シートにいくつかの変更をフォーマットした後、機能しなくなりました。 A1からB1に移動し、セルの書式を変更して目立たせるなどにしました。クレイジーなことは何もありませんが、B1のテキストを変更しても更新されません。 誰かアイデアはありますか?

プライベートサブワークシート_Change(ByValターゲットを範囲として)
'テスト
xPTableをピボットテーブルとして薄暗くする
xPFileをPivotFieldとして薄暗くする
文字列としての薄暗いxStr

ピボットテーブルとしての薄暗いx2PTable
Dim x2PFile をピボットフィールドとして
文字列としての薄暗いx2Str

ピボットテーブルとしての薄暗いx3PTable
Dim x3PFile をピボットフィールドとして
文字列としての薄暗いx3Str

エラーで次の再開
Intersect(Target、Range( "b1"))が何もない場合は、Subを終了します

Application.ScreenUpdating = False

'tbl-1
xPTable = Worksheets( "Line Report")。PivotTables( "PivotTable7")を設定します
xPFile = xPTable.PivotFields( "Utopia Source")を設定します
xStr = ターゲット.テキスト
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr

'tbl-2
x2PTable = Worksheets( "Line Report")。PivotTables( "PivotTable2")を設定します
x2PFile = x2PTable.PivotFields( "Utopia Source")を設定します
x2Str = ターゲット.テキスト
x2PFile.ClearAllFilters
x2PFile.CurrentPage = x2Str

'tbl-3
x3PTable = Worksheets( "Line Report")。PivotTables( "PivotTable3")を設定します
x3PFile = x3PTable.PivotFields( "Utopia Source")を設定します
x3Str = ターゲット.テキスト
x3PFile.ClearAllFilters
x3PFile.CurrentPage = x3Str

Application.ScreenUpdating = True

End Subの
このコメントは、サイトのモデレーターによって最小化されました
こんにちはランス、
私はあなたのコードをテストしました、そしてそれは私の場合うまくいきます。 セル形式を変更しても、コードの動作には影響しません。
このコメントは、サイトのモデレーターによって最小化されました
複数のテーブルを使用する場合、Power Pivot ではどのように機能しますか? フィルターの値を変更するマクロを記録しました。 上記のコードが機能するようにいくつかの変更を加えました。 しかし、それは型の不一致エラーをスローします。 私が何をしようと。
このコメントは、サイトのモデレーターによって最小化されました
こんにちはDK、
この方法は、Power Pivot では機能しません。 ご不便おかけしてすみません。
このコメントは、サイトのモデレーターによって最小化されました
ボンジュール、
これらの説明をありがとうございました。

J'aimerai utiliser un filtre (1 cellule) en F4 par example qui filtrerait deux TCD qui sont sur la même feuille.

Cela fonctionne très bien avec un TCD mais dès que j'essaye de Combiner le second, ça ne marche pas.
助けてもらえますか。

どうもありがとうございました
アンブローズ
このコメントは、サイトのモデレーターによって最小化されました
ボンジュール、

Merci beaucoup pour cette expplication qui marche parfaitement.
En revanche, j'aimerais pouvoir utiliser ce code pour pouvoir filtrer deux tableaux croisés dynamiques en meme temps qui sont sur la meme feuille. La seule petite différence entre les deux, c'est qu'ils n'utilisent pas les mêmes source. En revanche, le filtre sur lequel se base ces TDC est le même.

pourriez-vous m'aider à faire évoluer ce code afin que cela fonctionne ?

Voici le code utilisé quand il marche avec un TCD :

プライベートサブワークシート_Change(ByValターゲットを範囲として)
'更新者 Extendoffice 20180702
xPTableをピボットテーブルとして薄暗くする
xPFileをPivotFieldとして薄暗くする
文字列としての薄暗いxStr
エラーで次の再開
Intersect(Target、Range( "G4"))が何もない場合は、Subを終了します
Application.ScreenUpdating = False
Set xPTable = Worksheets("Cadrage").PivotTables("Tableau croisé dynamique7")
xPFile = xPTable.PivotFields("N°PROJET") を設定します。
xStr = ターゲット.テキスト
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating = True
End Subの

どうもありがとうございました
このコメントは、サイトのモデレーターによって最小化されました
アンブロワーズさん、こんにちは。

申し訳ありませんが、ニーズに合わせてこのコードを修正することは困難です。 XNUMX つのフィルターで複数のピボット テーブルをフィルター処理する場合は、以下のこの記事の方法が役立つ場合があります。
Excelで単一のスライサーを複数のピボットテーブルに接続する方法は?
ここにはまだコメントが投稿されていません
あなたのコメントを残す
ゲストとして投稿
×
この投稿を評価:
0   文字
推奨される場所

フォローする

著作権©の2009 - WWW。extendoffice.com。 | | 全著作権所有。 搭載 ExtendOffice。 | サイトマップ
MicrosoftおよびOfficeのロゴは、米国MicrosoftCorporationの米国およびその他の国における商標または登録商標です。
SectigoSSLで保護