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

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

Power Query:重複している行を抽出する

簡単かと思ってやってみたら、意外と苦戦するかもしれない。「重複を省いて抽出」ではなく「重複している行を抽出」したい場合、どうすればいいか。

こういう時、エクセル感覚だと「それぞれの行に、一つ上までの行を参照する COUNTIF関数を仕込んで……」みたいな発想になりがちだが、これを Power Queryに持ち込むと碌なことにならない。間違っても、List.Generateや List.Accumulateを使ってはいけない。こういう時は「最初にグループ化」がマストなのである。

例によって左側のテーブルは「テーブル1」としてクエリを作成済みとする。

let
    ソース = テーブル1,
    行のグループ化 = Table.Group(
        ソース, {"列1"}, {"テーブル", each _, type table}
    ),
    リスト抽出 = List.Select(
        行のグループ化[テーブル], each Table.RowCount(_)>1
    ),
    テーブル変換 = Table.Combine(リスト抽出)
in
    テーブル変換

グループ化については「行のカウント」でやると抽出はしやすいものの、後で基準となる列以外はどうするんだという話になる。今回は「すべての行」をグループ化するのがいいかと思う。

この方法なら数十万件でも数秒で抽出できる。COUNTIFの作業列を並べるような方法は今後使わなくていい。