MS-Excelで、二つの条件から数字を拾ってくる必要があったとします(ここでは10種×2種)。このとき、if文で「もし条件1が[Andy]のときは、もし条件2が[I]ならば17・そうでなければ37、[Andy]でなく[Bob]だったら、もし条件2が[I]ならば32・違ったら73、[Bob]でもなく[Casey]だったとき…」と書き連ねていけばクリアできるようにも見えるけど、実際には「関数の長さは1024文字まで」というのと、「関数の中の関数は8段階までしか深くできない」という制限があります。9種以上だと無理。もし仮に今度のMS-Excel2007で16階層まで倍増していたとしても、互換性のためにそんな無茶なことはしないほうがいいと思います。
こんなときは、条件1や条件2に使われる[Sam][Dave]みたいな文字列を通し番号[1][2][3]…に変換するテーブルをもう一つ作って、index関数を使うと解決します。
=index(表の範囲<B2:C11>,条件1<行数>,条件2<列数>)
画面が汚れるのを嫌って別のテーブルを作るかわりにlookupで拾ってrowとかcolumnとかから定数を引き算して…とかでもできるのかもしれませんが、でもそんな奇怪なことをしたかったんじゃない。
演算子「 」(空白)を使いたかったのです。条件1が<A13>に、条件2が<B13>に入っているとして、<C13>に表から拾った結果を出したいとしたら、行列に統一した名前をつけて(Andy行には<_andy>、Bob行には<_bob>みたいに「項目名の前にアンダーバー'_'をつける」とかして名前をつけていく作業を10行+2列分)、その形に合わせて<C13>に
=INDIRECT("_"&A13) INDIRECT("_"&B13)
この式を。要するに「=範囲名 範囲名」と書いてある、二つの範囲名を「 」で区切っているこれは、二つの範囲名の交点を返す演算子。この間、生涯で初めて使ってみたので記念に。
※コメント投稿者のブログIDはブログ作成者のみに通知されます