1/26/2021

Excel。XLOOKUP関数をつかうと、楽に、上位3位の点数に該当する氏名を抽出できます。【XLOOKUP】

Excel。XLOOKUP関数をつかうと、楽に、上位3位の点数に該当する氏名を抽出できます。

<SMALL+ROW関数&XLOOKUP関数>

最高値を算出するには、MAX関数を使いますし、2位や3位など指定の順位を算出するには、LARGE関数をつかいます。

ただ、困ったことに、数値そのものしか算出することができません。


どういうことかというと、次の表があります。

 

AB列の表は、ある競技の時間の表です。

上位3位までのタイムのいい人を抽出したいわけです。


作業としては、最初にD列を算出します。

数値が小さい上位3名までなので、SMALL関数を使えばOKです。


D2の数式を確認してみましょう。

=SMALL($B$2:$B$11,ROW(A1))

引数のROW(A1)は何を意味似ているのかというと、ROW(A1)としないで、1位を算出したいので、「1」と設定したら、オートフィルで数式をコピーしても、「1」のままなので、「2」「3」と修正しないといけません。

ROW関数をつかって、数式を修正する手間を省いています。


SMALL関数を使うことで、上位1~3位までのデータを算出することはできるのですが、そのデータの他のフィールドを抽出することは、SMALL関数ではできません。


垂直の表になっているので、VLOOKUP関数を使えば、抽出することができるのではと考えるかもしれませんが、残念ながら、今回のような表からでは、VLOOKUP関数で、別のフィールドのデータを抽出することはできません。


なぜならば、VLOOKUP関数は、抽出する範囲の一番左側が、検索値でなければなりません。


つまり、今回は、参加者・時間という並びになっていますので、VLOOKUP関数が使えないわけです。

時間・参加者ならばVLOOKUP関数が使えます。


このような表に対応するには、INDEX+MATCH関数をつかうことで、抽出することはできるのですが、なかなか面倒な関数の組み合わせです。


ところが、近年追加された「XLOOKUP関数」を使うと、とても簡単に問題を解決してデータを抽出することができます。


E2をクリックして、XLOOKUP関数をつかった数式を作っていきます。


なお、XLOOKUP関数ですが、XLOOKUP関数ダイアログボックスで数式をつくると、どのように引数を設定したらわかりにくいので、出来ることならば、手入力で数式をつくるほうがいいように思えます。


なので、今回は、手入力で、XLOOKUP関数を作っていきます。


最初は、検索値ですが、これは、D2の時間が該当しますので、「D2」と入力したいところですが、Office365のExcelやXLOOKUP関数が使えるようになったExcel2019には、「スピル機能」があるので、「D2:D4」と入力します。


検索範囲ですが、検索値が所属しているフィールド(列)ですから、B2:B11。

オートフィルで数式をコピーするのではなく、「スピル機能」によって数式がコピー(スピル)されますので、絶対参照は不要です。


戻り範囲ですが、これは、抽出したいものですから、参加者の列ですね。

A2:A11と入力します。

ここも、絶対参照は不要です。


見つからない場合は、空白にしたいので「””(ダブルコーテーション×2)」

一致モードは、完全一致なので「0」

検索モードは、データの上部から下部へと検索しますので「1」


Enterキーで数式を確定すると、スピル機能によって、数式が設定されます。


E2の数式は、

=XLOOKUP(D2:D4,B2:B11,A2:A11,"",0,1)

です。


このように、XLOOKUP関数は、VLOOKUP関数よりも、融通がききやすいので、使ってみると便利です。


なお、「スピル機能」がよくわからない場合は、旧来通り、絶対参照をつかった数式をつくり、オートフィルで数式をコピーしてもOKですよ。


その場合の数式は、

=XLOOKUP(D2,$B$2:$B$11,$A$2:$A$11,"",0,1)

です。


新しく加わった機能や関数を、取り入れてみると、改善できるものとかあるかもしれませんね。