自動作成したシフトを「足りない日だけ」作り直す|Excel VBAで判断は人、作業は機械に任せる
まずは動画で、考え方と実際の画面をご覧ください(動画内のデータはサンプルです)。
自動で作ったシフト、足りない日だけ直せますか。
この記事では、飲食店向けに納品したシフト作成ツール(Excel VBA)で使った工夫のひとつ、「人数が足りない日だけを作り直す」仕組みを紹介します。シフト表ツールの工夫を紹介するシリーズの4本目です。
ポイントは、全部を自動にしないことです。誰に出てもらうかは管理者が決め、時間の配置だけをVBAがやり直す。この分担にした理由と、操作の流れを順に説明します。
足りない日は、誰かに出てもらうしかない
シフトを自動で作っても、どうしても人数が足りない日が出てきます。そういう日は、休みの予定だった誰かに出てもらうしかありません。

ところが、誰に頼むかは、お店の事情を知っている人にしか決められません。表のデータだけでは分からない事情があるからです。
決めるのは人、やり直すのは機械
そこで、誰を出勤にするかは管理者が決め、時間の配置だけを機械がやり直す形にしました。

役割の分け方は次のとおりです。
管理者: 誰に出てもらうかを決め、その人の休みを出勤に変える
VBA: その日の時間の配置、休憩の入れ方、条件のチェックをやり直す
人が決めるのは「誰を出すか」の一点だけです。そのあとの、何時から何時までどこに入れるか、休憩をどこに入れるかといった面倒な作業は、VBAが引き受けます。時間帯ごとの配置の考え方は「時間帯ごとの必要人数に合わせてシフトを自動配置する」で紹介しています。この記事の仕組みは、その配置を、足りない日の分だけやり直すためのものです。
ダブルクリックで飛んで、直して、その日だけ作り直す
操作の流れは3つの手順です。

時間別の表で人の行をダブルクリックすると、日別の表の、その人のその日のマスに飛ぶ
休みを出勤に変えて時間別の表に戻り、「表示日のみシフト作成」ボタンを押す
その日だけを作り直す。ほかの日の結果はそのまま残る
ダブルクリックで、日別の表の「その人・その日」へ
このツールには、1日分を時間ごとに見る「時間別の表」と、期間全体を日ごとに見る「日別の表」があります。出勤か休みかを決めているのは日別の表なので、休みを出勤に変えるには、日別の表で該当のマスを探す必要があります。
人数が多いと、目で探すのは手間です。そこで、時間別の表で人の行をダブルクリックすると、日別の表の「その人・その日」のマスに移動するようにしました。シートの BeforeDoubleClick イベントで、ダブルクリックされた行(どの人か)と、表示している日付(どの日か)から移動先のセルを計算しています。
下の画面は、ダブルクリックで移った先の日別の表です。カーソルの位置が、その人のその日のマスです。

その日だけを作り直し、ほかの日は残す
休みを出勤に変えたら時間別の表に戻り、「表示日のみシフト作成」ボタンを押します。すると、表示している日だけを作り直し、その日の分だけを入れ替えます。
ほかの日の結果には手を付けません。全体を作り直すと、すでに確認を終えた日まで配置が変わってしまうからです。直したい日だけを直せることが、手で微調整する場面では大切だと考えています。
実際の画面
実際の画面では、ダブルクリックで2つの表を行き来しながら、数回の操作で調整できます。

時間別の表の人の行には「ダブルクリックで日別割振における設定シフトへジャンプします」というコメントを付けて、操作を覚えていなくても気づけるようにしています。動きの流れは、冒頭の動画でご覧いただけます。
応用のヒント
判断は人に残し、面倒な作業だけを機械に任せる。この分け方は、シフト以外にも使えます。

配送の計画: どの車を増やすかは人が決め、ルートは作り直す
工程表・生産計画: 急ぎの案件を人が決め、その日の段取りを組み直す
予約・席の割り当て: 優先する予約を人が決め、残りを割り当て直す
どれも、全部を自動にしようとすると「現場の事情」を取り込むのが難しくなる業務です。人が決めたあとの作業を、すぐやり直せるようにしておく。私の経験上、この形のほうが現場で使い続けてもらいやすいと感じています。
同じシリーズでは、「ブックをまたいで年間の労働時間を集計する」や「崩れた条件付き書式をボタンひとつで直す」も紹介しています。
動画で見る
この回のショート動画: 足りない日だけシフトを作り直す|Excel VBA 実装例(2026年11月21日公開)
6つの工夫をまとめた本編: 【Excel VBA】シフト表ツールの工夫6選(2026年11月17日公開)
まとめ
人数が足りない日は、誰に出てもらうかを管理者が決める
時間別の表で人の行をダブルクリックすると、日別の表の「その人・その日」のマスに飛ぶ(BeforeDoubleClick で移動先を計算)
休みを出勤に変えて「表示日のみシフト作成」を押すと、その日だけを作り直し、ほかの日の結果は残す
全部を自動にせず、判断は人、作業は機械と分けることで、現場の判断を残せる
自動化というと「全部を機械に任せる」ことを考えがちですが、人が決めるところをあえて残すのも、ひとつの設計です。



