• ベストアンサー

エクセル2003で勤務シフト表を作成 退勤時刻を表示させる関数を探しています。

エクセル2003にて、職場の勤務シフト表を以下のように作成中です。   A   B   C   D   E   F   G   H   I   J   1     出   退   14   15  16   17  18  19  20 2山田  14  18   A   A   B   B 3佐藤  15  19       B   A   A   A 4鈴木  5福田  16  20           C   C   C   C 6             14   15  16   17  18  19  20 この様な形式です。 1.D2:J5セルには、ポジションの略称が入ります。  (例:2行の山田さんは14時~16時までAポジション、16時~18時までBポジション。4行の鈴木さんはこの日はお休み)  2.各時間帯の適正人数を考えながら、D2:J5セルにポジション略称でシフトを入力していきます。 3.上記2.の作業後、出勤時刻をB列に、退勤時刻をC列に自動的に表示されるようにしたいのです。   4.出勤時刻に関しては、なんとか自身で調べてB2セルの場合、   =IF(COUNTBLANK(D2:J2)=7,"",HLOOKUP("*",$D2:$J$6,7-ROW(),FALSE)) とすることで解決できました。 【ここから困っています。】 5.退勤時刻も同じように自動表示させたいのですが、ここで行き詰ってしまいました。   解決策をお教えいただけると助かります。   宜しくお願いいたします。        

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ポジション指定の途中に空きがないなら、出勤時刻+ポジションのカ ウントでいいような気がします。もちろん、出勤時刻が空白なら空 白ですね。

nahctamok
質問者

お礼

ありがとうございます! 確かにそうですね。 解決しました!

その他の回答 (3)

noname#204879
noname#204879
回答No.4

B2: {=IF(COUNTA(D2:J2),SMALL((D2:J2<>"")*(D$1:J$1),COLUMNS(D2:J2)-COUNTA(D2:J2)+1),"")} C2: {=IF(COUNTA(D2:J2),MAX((D2:J2<>"")*(D$1:J$1))+1,"")}

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問は>勤務シフト表を作成 退勤時刻を表示させる関数を探しています。 だが標題としては勤務シフト表と関係あるものでなく、もっと一般的な表現が可能なものではないかな。 読者が一読だけした場合誤解するように思うが。 私が質問の真意を誤解してたらすみません。 下記は配列数式を使ってますが、どなたか、空白で無い初出列を捉える関数を使った回答を出してくれるかも知れない(期待)。 例データ A1:K6 A B C D E F G H I J K 1 出 退 13 14 15 16 17 18 19 20 2山田 14 18 A A B B 3佐藤 14 19 B A A A A 4鈴木 5福田 13 18 C C C C C B3の式 =IF(COUNTA(D3:K3)=0,"",INDEX($A$2:$K$2,1,MIN(IF(D3:K3<>"",COLUMN(D2:K3),"")))) と入れてSHIFT+CTRL+ENTERを3つ同時に押す。 下方向に式を複写 C3の式は =IF(COUNTA(D3:K3)=0,"",INDEX($A$2:$K$2,1,MAX(IF(D3:K3<>"",COLUMN(D3:K3),""))+1)) と入れてSHIFT+CTRL+ENTERを3つ同時に押す。 下方向に式を複写 結果 上表の B、C列

  • fufu01
  • ベストアンサー率31% (498/1603)
回答No.2

あまりスマートではないのですが、C2 に下記の式ではいかがでしょうか。 =IF(COUNTBLANK(D4:J4)=7,"",IF(LEN(J4)>0,20,IF(LEN(I4)>0,19,IF(LEN(H4)>0,18,IF(LEN(G4)>0,17,IF(LEN(F4)>0,16,IF(LEN(E4)>0,15,14)))))))