解り易くするため、式説明シートに勤務表の一部をコピーして、「
勤務表C」と
名前を付けている。
式
勤務表は、IDと日付による
複合キーとなっているので、探したい
IDと
日付が一致する行の勤務(略称)を取り出すことになる。
配列数式を使用して式を作成( { } は配列数式を示す)
配列数式とは?
{=INDEX(勤務表C,MATCH(1,($B$6=OFFSET(勤務表C,0,0,,1))*(D$3=OFFSET(勤務表C,0,2,,1)),0),5)}
式の意味
作業工程を分解して式を作成し、最後に式を1つにまとめる。
・IDが一致する行配列を作成
{=$B6=OFFSET(勤務表C,0,0,,1)}
IDと勤務表の1列目が一致するかの配列が勤務表の行数分作成される。 上図H列目
一致していれば、True、不一致であれば、False
・日付が一致する行配列を作成
{=D$3=OFFSET(勤務表C,0,2,,1)}
同じように日付が一致するかの配列を作成。 上図I列目
・ID、日付が共に一致するかの行配列を作成
{=H6*I6}
2つの積をとる。
True*True → 1
False*True → 0 (Falseが含まれると0になる)
0と1の配列が作成される→1のセルは必ず1個。 上図J列目
・値が1のセル(ID、日付が共に一致)を検索。
=MATCH(1,J6:J21,0) 上図K列目
・勤務表から勤務略称を取り出す
=INDEX(勤務表C,K6,5)
検索結果(相対行番号)を利用。 上図L列目
・式を全てまとめると下記になる。上図M列目
{=INDEX(勤務表C,MATCH(1,($B6=OFFSET(勤務表C,0,0,,1))*(D$3=OFFSET(勤務表C,0,2,,1)),0),5)}