• ベストアンサー

エクセル 連続勤務数のチェック

 バイトAのシフトが以下の場合                                 チェック   日 月 火 水 木 金 土 日 月 火 水 木 金 土 ・・・  週 日 日 夜 非 夜 日 日 週 日 夜 日 夜 非 ・・・ ○  週=週休、非=非番  日=日勤、夜=夜勤  日 月 火 水 木 金 土 日 月 火 水 木 金 土 ・・・  週 夜 日 非 夜 日 日 日 夜 夜 週 非 日 夜 ・・・ ×  チェックの判定は連続勤務が5日を超えていなければ○、  超えていれば×です。  ○×を表示する関数はどうなりますか?

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

今後のメンテナンスを考えると、無理をせずに作業行を使って連続勤務日数を出すのがお勧め。 添付の図ではB5セルに↓の式を入れてコピーしてあります。 =IF(OR(B2="日",B2="夜"),A5+1,0) これで連続勤務をしていると、その日まで連続勤務日数がでます。 あとはN2セルに↓を入れて、作業行の連続勤務日数が5を超えた物が無いかをチェックします。 =IF(MAX(5:5)>5,"×","○")

wonopp
質問者

お礼

分かりやすい回答ありがとうございます。 早速業務で使用させていただきます。

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.1です。 >今後のメンテナンスを考えると との御意見が御座いましたので、若干メンテナンスしやすい形にしてみました。 =IF(COUNTIF($C4:$AG4,"*?"),IF(SUMPRODUCT(ISNUMBER(MATCH(OFFSET($C4:$AB4,,),{"日","夜"},0))*ISNUMBER(MATCH(OFFSET($C4:$AB4,,1),{"日","夜"},0))*ISNUMBER(MATCH(OFFSET($C4:$AB4,,2),{"日","夜"},0))*ISNUMBER(MATCH(OFFSET($C4:$AB4,,3),{"日","夜"},0))*ISNUMBER(MATCH(OFFSET($C4:$AB4,,4),{"日","夜"},0))*ISNUMBER(MATCH(OFFSET($C4:$AB4,,5),{"日","夜"},0))),"×","○"),"")  もし、列範囲をC4~AG4ではなく、例えばC4~Z4に変更する場合には、Excelの置換機能を使用して「$AB」を「$U」に[すべて置換]して下さい。

wonopp
質問者

お礼

参考にさせていただきます。 ありがとうございました。

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.3

一式でやる意味があるのですか? =IF(MAX(FREQUENCY(COLUMN(A2:O2),(A2:O2<>"日")*(A2:O2<>"夜")*COLUMN(A2:O2))-1)<5,"○","×") 特にお勧めはしません。

wonopp
質問者

お礼

参考にさせていただきます。 ありがとうございました。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>チェックの判定は連続勤務が5日を超えていなければ○、超えていれば×です。 >○×を表示する関数はどうなりますか? 貼付画像はExcel 2013で検証した結果です。 AG2=IF(SUMPRODUCT(MAX((B2:AB2="日")+(B2:AB2="夜")+(C2:AC2="日")+(C2:AC2="夜")+(D2:AD2="日")+(D2:AD2="夜")+(E2:AE2="日")+(E2:AE2="夜")+(F2:AF2="日")+(F2:AF2="夜")))=5,"×","○") 勤務の配列値を1日ずつずらした配列を5行分について"日"と"夜"が一致する配列を加算すると連続5日勤務がある組み合わせが見つかります。 従って、最大値が4以下のとき連続5日の勤務が無いことになります。 このチェック方法では6以上の値が返りませんので、最大値が5であれば5日以上の連続勤務が存在することになります。

wonopp
質問者

お礼

参考にさせていただきます。 ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 今仮に、「週」、「非」、「日」、「夜」等がC4~AG4の範囲に入力されているものとします。  その場合、連続勤務が最大でも6日未満の場合には「×」、6日以上となる事もある場合には「○」を表示する関数は次の様なものとなります。 =IF(COUNTIF($C4:$AG4,"*?"),IF(SUMPRODUCT((($C4:$AB4="日")+($C4:$AB4="夜")>0)*(($D4:$AC4="日")+($D4:$AC4="夜")>0)*(($E4:$AD4="日")+($E4:$AD4="夜")>0)*(($F4:$AE4="日")+($F4:$AE4="夜")>0)*(($G4:$AF4="日")+($G4:$AF4="夜")>0)*(($H4:$AG4="日")+($H4:$AG4="夜")>0)),"×","○"),"")  尚、上記の関数では、$C4:$AB4や$H4:$AG4等といった参照先のセル範囲は、「週」、「非」、「日」、「夜」等が入力されているC4:AG4のセル範囲よりも5列だけ短い範囲で、その「5列だけ短いセル範囲」の位置が ((セル範囲="日")+(セル範囲="夜")>0) という組み合わせの1組ごとに、右に1列ずつずれて行っていて、その組み合わせが全部で6組(←連続6日以上で「○」とするため)だけ組み合わさっている形となっています。

wonopp
質問者

お礼

参考にさせていただきます。 ありがとうございました。

関連するQ&A

専門家に質問してみよう