勤務表
表形式のシフト表
サンプルファイルのダウンロード

式の説明

解り易くするため、式説明シートに勤務表の一部をコピーして、「勤務表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列目

・値がのセル(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)}