OpenOfficeで成績表の中の特定のデータにささっとアクセスする INDEX関数とMATCH関数

前にVLOOKUP関数とHLOOKUP関数を使って、表の中の特定のデータにアクセスする方法を紹介しました。
とても便利なのですが、ただひとつ、問題があります。
それは、
VLOOKUP関数の場合でいえば、データを探す列を固定しなければいけないこと
=VLOOKUP(検査値;検査範囲;列番号;検査の型)
HLOOKUP関数の場合でいえば、データを探す行を固定しなければいけないことです。
=HLOOKUP関数の場合=HLOOKUP(検査値;検査範囲;行番号;検査の型)

これのどこが問題かというと、例えば、野球選手の成績表で項目として試合数、打数、安打数、打率、本塁打数があったとして、常に打率だけ見たいわけではない、安打数にアクセスしたいときもあるでしょう。
そのときに、いちいち上の太字の列番号をその列にあわせて、あるいは行にあわせて変えなければいけません。
これは、ちょっと不便です。
そこで、動的にアクセスする列、行を変更できるように二つの関数を組み合わせるととても便利になります。

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

このように、INDEX関数では、縦横の行と列の番号を指定することで、十字に重なり合ったセルにあるデータを返す関数です。

そして、その重なり合うところを確定するために次の関数を使います。

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

と、こんなふうになります。
=INDEX(A1:F6;MATCH(H5;A1:A6;0);MATCH(I4;A1:F1;0))
MATCH(H5;A1:A6;0)で、選手の名前を複数のデータの中から登場する行番号を確定し、
MATCH(I4;A1:F1;0)で、列の中から、I4に入力されている検査値(ここでは項目見出し)をA1からF1のなかから探し、列番号を確定します。
I4の内容を変えると、自動的に検査対象にする列番号が変わります。

もちろん、INDEX関数を使わなくても、VLOOKUP関数とMATCH関数を組み合わせることもできます。
=VLOOKUP(H5;A1:F6;MATCH(I4;A1:F1;0);0)


OpenOfficeでINDEX関数とMATCH関数を使ってデータにアクセスするサンプルファイルは、calc036.odsをダウンロードしてください。


送信者 OpenOffice