なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:除外リストを使って絞り込む(クエリのマージ)

除外リストを元にして、不一致のものだけクエリで抽出してみよう。これができれば、この逆パターンももちろんできるようになる。

この手の処理は、単純には「クエリのマージ」を実行するだけでできる。

サンプル画像の場合は「商品テーブル」から「除外テーブル」にないものだけを残してデータを読み込む。なので、まずは2つのテーブルからクエリを「接続のみ」で作成する。


書式を設定したテーブルを選択した状態で [データ]→データの取得と変換の[テーブルまたは範囲から] [ホーム]→[閉じて読み込む]→[閉じて次に読み込む] →[接続の作成のみ] これを「商品テーブル」と「除外テーブル」の2回行う。

続いて、クエリのマージをブック上から行う。


[データ]→データの取得と変換の[データの取得] [クエリの結合]→[マージ]

上段のコンボボックスから「商品テーブル」を選択 下段のコンボボックスから「除外テーブル」を選択 結合の種類を「左反(最初の行のみ)」にして[OK] 作成された「除外テーブル」列を選択して削除

後は読み込むだけ。

因みに、結合の種類のデフォルトは「左外部」になっている。この状態でも、結合したテーブルを展開して「null」の行を選択すれば同じ結果になる。


[ファイル]→[閉じて読み込む]→[閉じて次に読み込む]

データを返す先を[既存のワークシート]にして読み込み先のセルを指定→[OK]

以上。マウスの操作だけでできるので非常に簡単。

下はおまけ。「該当列をリストにして除外リストを作成」→「元のテーブルにマージして他の列を展開」した場合。

    リストA = List.Buffer(商品テーブル[商品名]),
    リストB = List.Buffer(除外テーブル[商品名]),
    除外リスト = List.RemoveItems(リストA, リストB),
    テーブル変換 = Table.FromColumns({除外リスト}, type table [商品名=text]),
    クエリのマージ = Table.NestedJoin(
        テーブル変換, {"商品名"}, 商品テーブル, {"商品名"}, "マージ"
    ),
    見出し = List.Difference(Table.ColumnNames(商品テーブル), {"商品名"}),
    マージ列の展開 = Table.ExpandTableColumn(クエリのマージ, "マージ", 見出し)

必要があるかは分からないけど、せっかくやってみたので一応。