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

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

Power Query:LOOKUP的な検索(近似一致検索)

先週、絶対一致検索にアイテムアクセスが使えることを書いたけど、それなら近似値検索(近似一致検索)がしたい時はどうするのかという話に当然なるかと思う。

数式でやるなら簡単で、画像のような採点表がある場合、同じテーブルに「評価」列を作って、


    =LOOKUP([@点数],採点基準[点数(から)],採点基準[評価])     もしくは     =XLOOKUP([@点数],採点基準[点数(まで)],採点基準[評価],"",1)

こんな感じで計算できる。

これをクエリで計算しようと思ったら一工夫が必要になる。「採点基準」「点数表」テーブルから、それぞれクエリを作成しているものとして、

    評価列の追加 = Table.AddColumn(点数表, "評価", each [
        点数 = [点数],
        行の抽出 = Table.FirstN(採点基準, each [#"点数(から)"]<=点数),
        評価 = List.Reverse(行の抽出[評価]){0}
    ][評価], type text),
    列の選択 = Table.SelectColumns(評価列の追加,{"氏名", "評価"})
in
    列の選択

こんな形で計算できる。採点基準テーブルの並びによっては「List.Reverse(リスト反転)」は必要ない。「Table.SelectRows」だとデータをいちいち読み込んで重くなるので、「Table.FirstN」を使うのがお勧め。

個人的にレコードを使うのが好きなだけで、「let~in」を使ってもカスタム関数を使っても特に問題はない。