【Excel VBA】複数店舗のシフトをシートでつなぐ|掛け持ちスタッフの二重登録を防ぐ作り方
まずは動画で、考え方をご覧ください(動画の図はイメージです)。
同じ動画は、YouTubeでも2026年12月1日 12:00に公開します。
複数の店舗を掛け持ちするスタッフがいると、シフトは店ごとに組むだけでは済まなくなります。
この記事では、飲食店向けに納品したシフト作成ツール(Excel VBA)で使った、店舗ごとのシートをつないで二重登録を防ぐ作り方を紹介します。手で入力したときと、自動で割り当てるときの、両方に対応する形です。
コードは、考え方が伝わるように短く書き直したものです。納品したコードそのものではありません。
ほかの店の出勤が見えないと、二重に入れてしまう
店舗ごとに別のシートでシフトを組むと、ほかの店の出勤は、そのシートからは見えません。同じ人を同じ日に、2つの店へ入れてしまうことが起きます。
シフトを組む人が店ごとに違うと、確認のやり取りだけでも手間がかかります。

出勤を入れたら、ほかの店のシートへ店番号を書き込む
対策の1つ目は、シートどうしをつなぐことです。店舗ごとのシートは同じ形にして、人の行と日付の列の位置をそろえています。
ある店のシートでマスを変更すると、シートの変更イベント(Worksheet_Change)で、ほかの店のシートの同じ位置に書き込みます。出勤にしたときは「①」のような店番号、休みにしたときは「休」です。

ポイントは、書き込む間だけイベントを止めていることです。止めないと、ほかの店のシートへの書き込みでまたイベントが動いて、処理が連鎖してしまいます。
もう1つのポイントは、シートの形をそろえていることです。位置が同じなので、「開始位置から何行何列目か」だけで、ほかの店の同じマスを指定できます。
店番号が入ったマスは「確定」として扱う
手で入力する場合はこれで防げますが、自動の割り当てにも同じことを教える必要があります。
そこで、自動割り当てを始める前に、ほかの店の出勤を確定シフトへ合体させています。店番号が入ったマスは、「その人はほかの店で勤務している」という確定済みのシフトとして扱います。
コードの中では、店番号に10を足した値を入れて、通常のシフトの種類と番号がぶつからないようにしています。
割り当ての処理は、確定しているマスには何も入れません。そのため、割り当ての本体には手を加えずに、「先に決めた店を避けて次の店を組む」動きになります。

候補を持って割り当てる本体の仕組みは、「シフト作成の「考える部分」を自動化する工夫4選」で解説しています。
全店の出勤は、色分けした1枚の表で確かめる
店ごとのシートだけを見ていると、全体の状況はつかみにくくなります。そこで、全店の出勤を1枚の表に出力し、店舗ごとに色分けするようにしました。
誰がどの日にどの店へ出ているかが、1枚でひと目で分かります。

応用:拠点をまたいで同じものを使う業務
シートをつないで二重登録を防ぐ考え方は、拠点をまたいで同じものを割り当てる業務にも使えると考えています。
複数拠点の車両:同じ車を2つの拠点で予約しないようにする
会議室や設備:別のシートの予約を確定として扱う
応援の人員:別の現場の予定を見ながら組む

動画で見る
掛け持ちの二重勤務を防ぐ複数店舗の同期(ショート)(2026年12月2日公開)
この記事の本編動画(2026年12月1日公開)
まとめ
店舗ごとのシートは同じ形にしておくと、同じ位置を指定するだけでつなげられる
Worksheet_Changeでほかの店へ店番号を書き込む。書き込む間はイベントを止めて連鎖を防ぐ
自動割り当てでは、店番号のマスを確定シフトとして扱う。割り当ての本体は変えなくて済む
全店の状況は、店舗ごとに色分けした1枚の表で確かめる
別々に見えるシートでも、形をそろえて「ほかのシートの予定は確定」と扱うだけで、まとめて管理できる場合があります。私の経験上、複数拠点の業務をExcelで扱うときに役立つ考え方の一つです。



