Quantcast
Channel: なんでもエクセル(Nandemo Excel)
Viewing all articles
Browse latest Browse all 52

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

$
0
0

クエリのステップの中で、複数キーを指定して抽出したい時、数が多くなれば抽出用のリストを用意することになるでしょう。ただ「~と一致する」なら抽出条件に List.Containsを使えばいいんですが、「~を含む」を条件にしたい場合には、そうはいきません。

例えば「リストの値と等しい行を抽出」する場合は、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


Viewing all articles
Browse latest Browse all 52

Trending Articles