👤
読み込み中...2025/09/24 19:36

昭和な職場で申し訳ないのですが、Excelでシフト・勤務表の作成を行っています。日勤夜勤があり、夜勤が月3回以上発生しない、夜勤翌日はお休み、月お休みは6日まで、日夜勤は連続させないなど条件があります。生成AIを活用してシフト・勤務表実際に作っておられる方がいらっしゃいましたら、工夫を知りたいです。
(Chatgptは条件をつぶさに入れても、嘘をついてくるので・・・😢)

わたしは実務未経験ですが、エクセルのプロとしてまっすぐお答えします!とAIが言うので、参考までに。

ポイントは「AIに丸投げしない」。**Excelを“審判”、AIを“候補出し係”**に分けると安定します。

現実的な進め方(Excel主導 × AI補助)

  1. まずは表の型を固める
    • スタッフ表(Staff)
    氏名 / 夜勤上限(既定3) / 月休上限(既定6) / 個別NG曜日 等
    • カレンダー表(行=スタッフ、列=日付)
    入力は 「D(日勤)/ N(夜勤)/ 休」 の3つだけにデータの入力規則で制限。

  2. 自動チェック式で“嘘を許さない”

各スタッフの行(例: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が即座に赤信号”を出します。

  1. 生成AIの使い方(嘘対策つき)

AIは“配列(CSV)を出す係”に限定します。
• 良い依頼文(コピペ可)
◎下のプロンプトのところに貼り付けてありますので参考まで

•	採点もAIにやらせる(二段構え)

1案貼り付け→「この表の違反件数をルール別に数えて」とAIに依頼。
生成と採点を分離すると、AIの“強気な言い切り”が減ります。

  1. 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. 運用のコツ
    • **例外(希望休/研修/不可曜日)は「人×曜日」の禁止表(1/0)**を作り、COUNTIFSで弾く。
    • 一発決めではなく、AIに3案出させ、Excelの採点で合格案のみ採用。
    • 祝日や月の日数で必要人数を月ごとに変数化(固定数をやめる)。

ひと言(気持ちのところ)

「条件をつぶさに入れても嘘をついてくる」──わかります。
AIは“生成”が得意で“厳密な保証”は苦手。だからこそExcelに審判を任せる設計にすると、途端に使える相棒になります。必要なら、最初のチェック式テンプレから一緒に整えられます。

もし共有できれば(精度が一気に上がる2点)
1. **日ごとの必要人数(D/N)**は固定ですか? 変動しますか?
2. 個別ルール(Aさんは土曜NG、Bさんは月曜N不可など)はありますか?

ここが決まると、式もSolverも一発で矛盾ゼロに寄せられます。

🤖

使用プロンプト

次の月×スタッフのシフト案を出してください。出力はヘッダー付きCSVのみ、 値は {D,N,休} のみ。制約: ・各人の夜勤は月3回以内 ・夜勤の翌日は必ず休 ・日勤→夜勤の連続は禁止 ・各日の必要人数: 日勤=○名, 夜勤=○名 違反が1つでもあれば「不可能」とだけ返し、CSVは出さない。
使用AIサービス:ChatGPT

コメントするにはログインが必要です。

他の回答も見る(1件)
香るさんの回答 | 昭和な職場で申し訳ないのですが、Excelでシフト・勤務表の作成を行っています。日勤夜勤があり、夜勤... | OpenPrompt | OpenPrompt