勤務表のチェッカー

夜勤のある職場(病院や介護施設など)の勤務表は、毎月、一人ひとりの休み希望を聞いたうえで、 「毎日、各ユニットに早番・遅番・リーダー・夜勤が1人ずつ」「夜勤の翌日は明け、その翌日は休み」といった決まりを全部満たすように組みます。 休みを1日動かすと、夜勤の並びが玉突きでずれて、ほかの人の並びまで崩れるので、手で組むのはかなり大変です。

ここでは、Excel の勤務表をコピーして貼り付けると、決まりに合っていないマスと、人数の足りない日に色が付く道具を作りました。 さらに、決まりに合うように直した案や、0から組んだ案も出せます。 まずは「架空の表を入れてみる」を押してから、「修正案を出す」を押してみてください。

🔒 貼り付けた表は、このページの中だけで処理します。どこにも送らず、保存もしません(ページを閉じると消えます)。

Excel で、見出しの行(番号・ユニット・職種・1〜31)ごと範囲を選んでコピーし、貼り付けます。ほかの列は読みません。

1行に1人「番号: 日, 日」。必ず休みにする日は「15!」

「番号: ユニット」でふだん数えるユニット、「番号: 日, 日 ユニット」でその日だけの応援

決まりの重み・記号の表・毎日必要な人数を変える
決まりの重み

必須を破らないことを最優先し、そのうえで高・中・低の順に守ります。人数の重みは「毎日必要な人数」の行の終わりに書きます

「記号 種類 札…」。札は人数を数えるときの役割(早・リーダーなど)

「各ユニット 札 人数 重み」か「全体 種類 人数 職種に含む文字 重み」

調べること

  • 夜勤の並び: 夜勤の翌日が明けか。明けの前日が夜勤か。明けの翌日が休みか。「夜勤の前日によい札」を決めたときは、夜勤の前日がその札(長日勤など)か休みか
  • 連続勤務: 決めた日数を超えて続けて勤務していないか。明けも勤務に数える
  • 夜勤の間隔: 夜勤の入りから次の入りまでが、決めた日数より短くないか
  • 毎日の人数: 「各ユニット 早 1」のように書いた最低人数を、日ごとに数える。「全体 夜勤 1 看護」なら、職種に「看護」を含む人の夜勤を施設全体で数える
  • ユニット外の人: 主任のようにどのユニットにも属さない人は、「ユニット外の人の数え先」に、ふだん数えるユニット(「S1: B」)と、その日だけ入ったユニット(「S1: 23 A」)を書く。 書いていなくても、足りない枠にユニット外の人が入っていて、ほかが困らないなら、重みを1段軽くする(「応援なら足りる」)
  • 休み希望: 希望した日が、公休か休暇(有休など)になっているか。「15!」のように書いた日は必ず休みにする
  • 月の回数: 公休の日数が基準から ±1 日に収まっているか。夜勤の回数が平均から ±1 回に収まっているか

記号は職場ごとに違うので、「記号の表」で、記号ごとに種類(日勤・夜勤・明け・公休・休暇)と札(早・遅・リーダーなど)を決めます。 判定は記号ではなく種類と札で行うので、記号の表を差し替えれば、ほかの職場の勤務表にもそのまま使えます。

決まりの重み

休み希望が同じ日に集まると、全部の決まりと希望を満たす表は作れないことがあります。 そこで、決まりごとに必須・高・中・低の重みを付けています(「決まりの重み」で変えられます)。

  • 必須(違反): 夜勤の翌日は明け、毎日の夜勤の人数など。まず、これを破る数を最小にします
  • 高・中・低(注意・参考): 破ると、高は100点、中は10点、低は1点の罰点。必須が同じなら、罰点の合計が小さい表のほうが良い表です
  • 叶わない休み希望は、1人の中で2件目、3件目ほど重くします(1人に寄せず、薄く広く削る案が選ばれるように)

直す・組む

  • 修正案を出す: いまの表を、なるべく少しだけ書き換えて、罰点を下げます。1マス変えるごとに2点の罰点を足すので、たくさん書き換えないと直らない「低」の決まりは、そのまま残ります
  • 0から組む: 貼った表を手本に(職員・ユニット・その人が使っている記号を読み取って)、「年月」の月の表を組みます。休み希望はその月のものを書きます
  • 計算は焼きなまし法(局所探索)です。1マス変える・同じ日に2人の勤務を入れ替える・夜勤と明けの塊を置く、といった手を1秒に10万回ほど試し、罰点が下がる手を採っていきます (温度が高いうちは、少し悪くなる手もときどき採って、行き詰まりから抜けます)
  • 1手ごとに表全体を調べ直さず、変えた人の並びと変えた日の人数だけを数え直すので、ブラウザでも速く回ります。計算は画面とは別のスレッド(Web Worker)で回すので、画面は固まりません
  • 局所探索なので、「どうやっても決まりを満たす表は無い」ことは示せません。残った違反は、そのまま案に付けて見せます

データの扱い

勤務表は、名前・勤務の日・休みの日が並んだ、人に見せたくない情報です。そこで、

  • 貼り付けた表は、このページの中(ブラウザ)だけで調べます。直す・組む計算も同じです。サーバーには何も送りません
  • 保存もしません。ページを閉じるか読み込み直すと消えます
  • このページは、ブラウザに通信そのものを止めさせています(Content Security Policy の connect-src 'none')。 たとえページのコードに通信する処理が紛れ込んでも、ブラウザが送らせません
  • 名前の代わりに番号の列で貼り付ければ、ここに名前が載ることもありません
既定の決まりは、夜勤のある職場でよくある組み方にしています。職場の決まりと違うところは、設定と「決まりの重み・記号の表・毎日必要な人数を変える」で直せます。