相当込み入った回答になるので、印刷して、じっくり考えて
●VLOOKUP関数のTRUE型に持ち込む
●ポイントは、職種により、VLOOKUP関数の引くテーブル(セル範囲)を割り出す仕方にある。
●職種は列方向に(横方向に)下記の例のように組み替えて
表を作る。
●VLOOKUP関数のTRUE型の利用に都合の良いように給与帯を昇順に並べ変えておく(組み変える)
ーーー
例データ
質問のデータを(ここではSheet2とする)
営業職4 営業職3
営業職 4 330,000 339,900 I 営業職 3 270,000 286,600 I
営業職 4 340,000 349,900 II 営業職 3 286,700 303,300 II
営業職 4 350,000 360,000 III 営業職 3 303,400 320,000 III
第1行の「営業職4」などは検索に便利なように(2つに分かれていると面倒)、結合した情報セルを作る。
ーー
Sheet3のA1:E1に
A列 B列 C列 D列 E列
営業職 3 営業職3 290000 II
A列、B列は指定のため入力。
C列は関数=A1&B1で作る。
D列は給与額を入れる。
問題はE列の関数式。
=VLOOKUP(D1,OFFSET(Sheet2!$A$1,0,MATCH(C1,Sheet2!$A$1:$X$1,0)+1,100,3),3,TRUE)
意味は
=VLOOKUP(D1,職種+グレードで決まる3列のセル範囲,3列目を採る,TRUE型)
VLOOUP関数TRUE型は範囲帯から該当コードをみつける仕組みの関数。
さて職種+グレードから検索に使う表範囲を求める方法
OFFSET(Sheet2!$A$1,0,MATCH(C1,Sheet2!$A$1:$X$1,0)+1,100,3)
について
MATCH(C1,Sheet2!$A$1:$X$1,0)の部分は、
職種+グレードで決まる最初列を見つけている。2列右から開始なのでずれは+1しておく(OFFSET関数はずれ列数指定するもの)
100はここでは最高100列の意味、3は3列
270,000 286,600 I
286,700 303,300 II
303,400 320,000 III
第2列は要らないと思うが時間がなくて確認不備。
第1列も数を変えるべきかもしれないが時間がなくて確認不備。
ーー
実際のデータの場合チェックケースの件数を十分にしてください。
ーー
これよりむつかしい関数の型が2,3あるが、まあそれに次ぐ難しい
タイプでしょう。
お礼
出来ました!素晴らしいです! 式を読み込んで、自分なりに理解してみます。 大変ありがとうございました。