OpenOfficeで上位三位と下位三位を表示する


上の表は、太陽系の主な星の半径を基準にした大きさのランキングです。
このなかで

送信者 OpenOffice
、大きさの上位三位、下位三位を抜き出して、該当する星の名前を表示させるにはどうしたらいいかを紹介します。

上位三位、下位三位のデータを抜き出す該当する星の名前を表示させる ● サンプルファイル

上位三位、下位三位を抜き出す 

指定された範囲のなかで、指定された順位のデータを返す関数は2つあります。
関数名:LARGE関数
書式:=LARGE(範囲;順位)
何ができる:指定された範囲の中から、一番大きな値を1位として、適合する順位の値を返す
平たく書くと:=LARGE($B$2:$B$12;E2)でB2:B12セルの間でE2に入力されている1、つまり一番大きな値である696000を返します。

関数名:SMALL関数
書式:=SAMLL(範囲;順位)
何ができる:指定された範囲の中から、一番小さな値を1位として、適合する順位の値を返す
平たく書くと:=LARGE($B$2:$B$12;E2)でB2:B12セルの間でE10に入力されている1、つまり一番小さな値である384を返します。

これでお分かりのように、LARGE関数とSMALL関数で順位にあったデータを返します。
使い方はまったく同じで、LARGEは大きいほうから数え、SMALLは小さいほうから数えるのは英単語そのままの関数名どおりです。

注意すべきことは、参照範囲を指定するとき、絶対参照で範囲を指定することです。一番上の数式をそのまま下にコピーして貼り付けるとき、絶対参照で指定していなければ、範囲がずれてしまい、正しいランク付けと抜き出しが出来ません。

該当する星の名前を表示させる

こっちはちょっと面倒です。

面倒な理由は、元になる表で、星の名前がA列にあり、半径のデータがB列にあるためです。
逆であれば、VLOOKUP関数ただ1つで=VLOOKUP(検索値;検索範囲;列番号;検索タイプ)で処理して列番号に合致するデータを返すことができるのですが。
いかんせん、検索値が含まれている列よりより若い列番号を指定することが出来ません。

しかし、これも運命とあきらめて、関数を使って数式を作成することにします。

ここでは2つの関数を使います。
関数名:INDEX関数
書式:=INDEX(範囲;行番号;列番号;範囲番号)
何ができる:テーブルの縦横の位置をそれぞれ指定し、その位置の値を返す
平たく書くと:=INDEX(A1:F6;6;4;1)
これで、A1:F6の範囲にある表の6行目、4列目のデータを返すことになります(例)。
最後の、範囲番号の1は、省略することもできます

関数名:MATCH関数
書式:=MATCH(検査値;検査範囲;照合の型)
何ができる:指定した範囲から、検索値にあうデータの位置を表す数値(番号)を返す
平たく書くと:=MATCH(H5;A1:A6;0)
これで、H5に入力されている検索したいデータが、A1:A6の何番目にあるかを返します(例)。
照合の型で0を設定すると、検査範囲内で検査値と完全に一致するデータが入っている位置を返します。
照合の型で1を設定すると、検査範囲内で検査値以下の最大の値が入っている位置を返します。
照合の型で-1を設定すると、検査範囲内で検査値以上の最小の値が入っている位置を返します。

この2つの関数を組み合わせることで、表の中の、行番号と列番号が交わる位置にあるセルのデータを表示させることが可能になります。

では、G2セルを例にとって具体的に説明します。
INDEX関数にいれる値
範囲:$A$1:$C$12
行番号:MATCH関数で指定(後述)
列番号:星の名前が一列めにあるので1
ここまでを数式に当てはめると=INDEX($A$1:$C$12;MATCH関数で指定;1)

MATCH関数に入れる値
検査値F2
検査範囲:$B$1:$B$12
照合の型:0
ここまでを数式に当てはめると=MATCH(F2;$B$1:$B$12;0)

このMATCH関数の数式をそのままINDEX関数の、MATCH関数で指定のところに当てはめると、
=INDEX($A$1:$C$12;MATCH(F2;$B$1:$B$12;0);1)
これで太陽が返されます。

今回の例では、列は1列目と決まっていましたので、列の特定のためにMATCH関数を使いませんでしたが、星の名前が何列目にあるか分からない場合は、
=MATCH("星の名前";A1:C1;0)で星の名前という見出しが入力されているセルの列を特定することが出来ます。
これを同様にINDEX関数に当てはめると、
=INDEX($A$1:$C$12;MATCH(F2;$B$1:$B$12;0);MATCH("星の名前";A1:C1;0))
で、やはり太陽が返されます。

上位三位、下位三位サンプルファイルは、calc067.odsをダウンロードしてください。

参考:
OpenOfficeで成績表の中の特定のデータにささっとアクセスする INDEX関数とMATCH関数
OpenOfficeでランクを付けて並べ替える

なお、太陽系のデータはNEWTONの1999年10月号を参照しました。古いですが、間違っていないと思っています。