条件を満たす行が1件でもあればグループ全体を残す

条件に合う行からグループの一覧を作り、元の明細に結合します。たとえば30以上の値が1件でもあるグループなら、30未満の明細もまとめて残せます。

説明図:グループA・B・Cの値を含む元のDetails表5行
架空のデータを使った説明図です。実際の画面キャプチャではありません。

30以上の値が1件でもあるグループについて、ほかの明細もすべて確認したいとします。値が35・5のAは残し、20・20のBは除く、という条件です。まず条件に合う行からグループの一覧を作り、絞り込む前の明細に結合します。

35と5は残し、20と20は除く

架空のDetailsでは、各行のValueが30以上かを調べます。Aには35のR1があるため、同じグループのR2も対象です。Bは合計40でも、30以上の行はありません。Cの30は条件を満たします。この後、条件に合うグループを1行ずつにまとめたEligibleという一覧を作ります。

Details

Group Record Value
A R1 35
A R2 5
B R3 20
B R4 20
C R5 30

対象グループの一覧を先に作る

  1. Detailsだけを読み込みます。Valueの元データ条件で30「以上」を設定し「適用」を押します。この最初の作業ではR1・R5の2行だけが残ります。
  2. 「結果を整理」で「集計」を追加し、「まとめる項目」にGroupを選びます。「集計方法」は「件数」のまま、「結果の項目名」にQualifyingRowsと入力します。複数の構成行が条件に合っても、グループごとに1行にします。
  3. 「適用」を押し、Group・QualifyingRowsの2列、A=1・C=1の2行を確認します。AとCの全明細を元表から取り出すための一覧として、EligibleというExcelファイルに保存します。QualifyingRowsはグループ全体の行数ではなく、条件を満たした行の件数です。
  4. 新しい作業で未絞り込みの元のDetailsと保存したEligibleを読み込み、Group同士を「一致する行のみ」で結びます。この作業のDetailsにはValue ≥ 30を指定しません。
  5. Eligible側のGroupだけを非表示にし、QualifyingRowsを残します。「結果のプレビュー」でR1・R2・R5の3行を確認して保存します。値5のR2も必ず含めます。

対象グループの一覧を先に作る 説明図

基準未満のR2が残る理由

R2は30未満でも、同じグループAのR1が基準を満たすため残ります。Bの2行は合計40でも、どちらも30未満なので除かれます。QualifyingRowsは、そのグループで条件を満たした行数です。Aの明細には、どちらにも同じ1が付きます。

Group Record Value QualifyingRows
A R1 35 1
A R2 5 1
C R5 30 1

基準未満のR2が残る理由 説明図

最初の条件を最終結合に持ち越さない

最後の結合で元の表にもValue ≥ 30を指定すると、残したかったR2が消えてしまいます。また、集計せずに条件に合う明細を直接結ぶと、該当行が複数あるグループで結果の行数が増える場合があります。Groupは空欄にせず、表記をそろえてください。元データを更新したときは、Eligibleの作成からやり直します。

自分のファイルで始めましょう

JOIN SHEETを使ってみる ↗

Excel・CSVの作業はPCでご利用ください。
新しいタブで開くため、作業中のデータは置き換わりません。

サンプルの検証日:

出典

I have a pivot table with different groups, i want to filter on whole groups if it meets a condition. (Reddit r/excel)

原文はグループの合計ではなく、構成行の1つが30以上なら残りの行もすべて保持する方法を尋ねています。 上の表と手順は、この質問を参考に別途作成した架空の例です。質問者の実データや製品の利用体験ではありません。