Excel。最高値を検索できても、その行にある他のデータを抽出するには?
<MAX・OFFSET+MATCH関数>
データの中から、最大値や最小値などは、MAX関数やMIN関数を使うことで、簡単に抽出することができますが、では、その該当したデータのレコードはどうやったら、抽出することができるのでしょうか?例えば、次の表。
C列の金額の中で最大値を算出するのはMAX関数を使うので、なんら問題はありませんが、では、その日付はいつなのか?
条件付き書式をつかって行(レコード)を塗りつぶすように設定してもいいのですが、ただ単に日付が知りたい場合どうしたらいいのか?というのが今回のテーマなのです。
まずは、F1にMAX関数を使って、最大値を算出してみます。
F1の数式は、
=MAX(C2:C16)
さて、474は、3月4日に発生しているのですが、どうやったらいいのでしょうか?
検索させるとしたら、最初に、474という最大値は、何行目にあるのか算出させる。
そして、474というセルの1つめの左側に日付のデータがあるということですよね。
なので、まず何行目にあるのか確認するにはどうしたらいいのでしょうか?
そこで登場するのが、MATCH関数です。
G1にMATCH関数の結果を表示してみましょう。
G1をクリックして、MATCH関数ダイアログボックスを表示します。
検索値には、最大値の結果が算出されている、F1
検索範囲は、金額なので、C2:C16
照合の種類ですが、完全一致なので”0(ゼロ)”。
ちなみに、”1”だと、以下。”-1”だと、以上となっています。
G1の数式は、
=MATCH(F1,C2:C16,0)
結果は、4と表示されました。4件目に該当するデータがあることが算出されたわけです。
その該当するセルの1つ左側のセルを見つけるために、今度は、OFFSET関数をつかうことで、算出することができます。
では、F2をクリックして、OFFSET関数ダイアログボックスを表示しましょう。
参照は、C1。見出しじゃないかと思うかもしれませんが、OFFSET関数は、参照である起点を0(ゼロ)としています。
つまり、データの先頭であるC2を参照(起点)として、4つ下方向のセルだと、C6を指してしまいますので、C1の見出し行を参照(起点)とする必要があります。
行数は、G1に先ほどMATCH関数で算出しましたので、G1を設定します。
列数は、1つ左側なので、-1(マイナス1)と設定して、OKボタンをクリックしましょう。
F2の数式は、
=OFFSET(C1,G1,-1)
算出結果が、シリアル値で表示されてきますので、表示形式を日付にするといいでしょう。
結果は、このようになりましたね。
このように、OFFSET関数とMATCH関数を合わせて使うことで、該当するセルの行(レコード)からデータを抽出することが可能になりますよ。
ちなみに、OFFSET関数とMATCH関数をネストにすると、
=OFFSET(C1,MATCH(F1,C2:C16,0),-1)
さらに、OFFSET関数とMATCH関数とMAX関数をネストすると、
=OFFSET(C1,MATCH(MAX(C2:C16),C2:C16,0),-1)
確かに、1つの数式で算出することができますが、理解するのに時間がかかりますので、実務では、ほどほどがいいように思えますね。