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

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

Power Query:リストを使って抽出する

クエリの中で複数のキーを指定して抽出したい時、抽出用リストがある場合はそれを利用するにこしたことはない。

例えば「リストの値と等しい行を抽出したい」場合は、Table.SelectRowsの条件を下記のように記述すればいい。

each List.Contains(
    {"中央区", "西淀川区", "東淀川区", "住吉区", "東住吉区"}, [行政区名]
)

ただこれを「中央」「淀川」「住吉」を指定して、「リストの値を含む行を抽出したい」場合は、List.Containsでは上手くいかない。

この場合、ひとつには抽出条件に List.Accumulateを使う方法が考えられる。

(x)=> List.Accumulate(
    List.Transform(
        {"中央", "淀川", "住吉"},
        each x[支店名]="東京" and Text.Contains(x[行政区名], _)
    ),
    false,
    (x,y)=>x or y
)

これでいいんだけど、なんとなくしっくりこない。

ちょっと考え方を変えて、Splitter.SplitTextByAnyDelimiterで「リストの文字列で区切れるかどうか」をチェックしてみたらどうだろうか。

each [支店名]="東京"
    and List.Count(
        Splitter.SplitTextByAnyDelimiter(
            {"中央", "淀川", "住吉"}
        )([行政区名])
    )>1

こっちのほうが分かりやすい気がする。

learn.microsoft.com