2011年2月25日金曜日

Excel:2*2表からの値を検索する方法

表の行見出しと列見出しの交差するセルの値を抜き出す方法。
どちらの値も定数でなくても対応できる。

[縦軸が粗点、横軸が年齢で、年齢層に応じた評価点を出す場合。]
A61に粗点、B61に年齢を入れ、評価点がC61に表示される。

・VLOOKUP関数の列番号の部分にHLOOKUP関数を使う。

 =IF(OR(A61=0,B61=0),"",VLOOKUP(A61,A2:U53,HLOOKUP(B61,A1:U2,2)))

最初の部分はエラー処理。
「もし(A61=0かB61=0なら、空白にするよ)」
ここの部分には、サンプル以外の値の場合、エラーメッセージを表示してもよい。

HLOOKUPについて。
 HLOOKUP(B61,A1:U2,2)
「A1からU2を参照して、その一番上の行がB61なところを探すよ。
その行の、上から2番目の値を表示するよ。」
今回の場合は、年齢が「22」なので、22の下にある「4」となる。
この「行番号」は、VLOOKUPで使用するため、A列から1,2,3と続き番号にする。
A列には見出しが入っているので2からスタートしている。


VLOOKUPについて。
 VLOOKUP(A61,A2:U53,4)
「A2からU53を参照して、左端列がA61の列を探すよ。その列の、左から4番目の値を表示するよ。」

今回の場合は、

HLOOKUP(年齢が22歳の列を探すよ。探す場所はA1からU2の間だよ。上から2番目だよ)
を使って、「左から4番目だよ」という答えを出します。
VLOOKUP(粗点37点の行を探すよ。探す場所はA1からU53の間だよ。左から4番目だよ。)
だから、評価点は16点だよ。

という意味になります。

追記:検索する数列が、1からスタートであればINDEX関数のほうがスマート。
   今回の表のように、「粗点0点でも評価点が2点になる」場合があるなら、今回の方法がよい。


1 件のコメント:

  1. よくみたら、INDEX関数ってのがあるのね。
    あるのね、っていうか基本的な関数っぽいね・・・

    返信削除