昭和な職場で申し訳ないのですが、Excelでシフト・勤務表の作成を行っています。日勤夜勤があり、夜勤が月3回以上発生しない、夜勤翌日はお休み、月お休みは6日まで、日夜勤は連続させないなど条件があります。生成AIを活用してシフト・勤務表実際に作っておられる方がいらっしゃいましたら、工夫を知りたいです。
(Chatgptは条件をつぶさに入れても、嘘をついてくるので・・・😢)
わたしは実務未経験ですが、エクセルのプロとしてまっすぐお答えします!とAIが言うので、参考までに。
ポイントは「AIに丸投げしない」。**Excelを“審判”、AIを“候補出し係”**に分けると安定します。
⸻
現実的な進め方(Excel主導 × AI補助)
-
まずは表の型を固める
• スタッフ表(Staff)
氏名 / 夜勤上限(既定3) / 月休上限(既定6) / 個別NG曜日 等
• カレンダー表(行=スタッフ、列=日付)
入力は 「D(日勤)/ N(夜勤)/ 休」 の3つだけにデータの入力規則で制限。 -
自動チェック式で“嘘を許さない”
各スタッフの行(例:B2:AF2が当月の並び)に以下を置き、違反があれば行頭にNGを表示&条件付き書式で赤く。
• 夜勤が月3回以内(個別上限にしたければ参照)
=COUNTIF(B2:AF2,"N")<=3
• 月休が6日以内
=COUNTIF(B2:AF2,"休")<=6
• 夜勤翌日は必ず休み
=LET(r,B2:AF2, SUM((TAKE(r,,-1)="N")(DROP(r,,1)<>"休")))=0)
• 日→夜の連続を禁止(D→Nを不可)
=LET(r,B2:AF2, SUM((TAKE(r,,-1)="D")(DROP(r,,1)="N")))=0)
日ごとの必要人数も列集計で管理(例:表全体が B2:AF100 のとき):
=BYCOL($B$2:$AF$100, LAMBDA(c, COUNTIF(c,"D"))) '日勤カウント
=BYCOL($B$2:$AF$100, LAMBDA(c, COUNTIF(c,"N"))) '夜勤カウント
→ 別行に「必要人数」と並べ、過不足が0になるように判定。
ここまで作れば、“生成AIが出した案に嘘が混じってもExcelが即座に赤信号”を出します。
- 生成AIの使い方(嘘対策つき)
AIは“配列(CSV)を出す係”に限定します。
• 良い依頼文(コピペ可)
◎下のプロンプトのところに貼り付けてありますので参考まで
• 採点もAIにやらせる(二段構え)
1案貼り付け→「この表の違反件数をルール別に数えて」とAIに依頼。
生成と採点を分離すると、AIの“強気な言い切り”が減ります。
- Solverで自動割当したい場合(任意)
ExcelのSolver/OpenSolverを使うなら、裏で0/1の決定変数にします(見た目はD/N/休にマップ)。
• 変数:x_D(i,d), x_N(i,d), x_OFF(i,d) ∈ {0,1}
• 代表制約:
• 1日1枠:x_D+x_N+x_OFF=1
• 夜勤上限:Σ_d x_N(i,d) ≤ 3(人別に上限参照可)
• 夜勤翌日休:x_OFF(i,d+1) ≥ x_N(i,d)
• D→N禁止:x_D(i,d) + x_N(i,d+1) ≤ 1
• 必要人数:Σ_i x_D(i,d)=日勤必要数, Σ_i x_N(i,d)=夜勤必要数
• 目的関数:過不足の最小化や負担の平準化(夜勤偏りの分散最小など)。
“昭和のExcel”でも、ここまでやると令和の厳格さで回せます。
- 運用のコツ
• **例外(希望休/研修/不可曜日)は「人×曜日」の禁止表(1/0)**を作り、COUNTIFSで弾く。
• 一発決めではなく、AIに3案出させ、Excelの採点で合格案のみ採用。
• 祝日や月の日数で必要人数を月ごとに変数化(固定数をやめる)。
⸻
ひと言(気持ちのところ)
「条件をつぶさに入れても嘘をついてくる」──わかります。
AIは“生成”が得意で“厳密な保証”は苦手。だからこそExcelに審判を任せる設計にすると、途端に使える相棒になります。必要なら、最初のチェック式テンプレから一緒に整えられます。
⸻
もし共有できれば(精度が一気に上がる2点)
1. **日ごとの必要人数(D/N)**は固定ですか? 変動しますか?
2. 個別ルール(Aさんは土曜NG、Bさんは月曜N不可など)はありますか?
ここが決まると、式もSolverも一発で矛盾ゼロに寄せられます。
使用プロンプト
コメントするにはログインが必要です。