シフト希望の入力をボタンで速くする|時刻のボタンと出欠の自動入力(Excel VBA 実装例)
まずは動画で、考え方と実際の画面をご覧ください(動画内のデータはサンプルです)。
シフトの希望、1マスずつ時刻を打ち込んでいませんか。
飲食店向けに納品したシフト作成ツール(Excel VBA)で使った工夫を紹介するシリーズの6本目、最終回です。今回は、スタッフの希望を入力する画面で、入力を速く・間違いなくするために入れた工夫を取り上げます。
この記事で紹介する工夫
開始・終了のマスをダブルクリックすると、時刻のボタンが並んだ小さな画面がマスの横に出る
ボタンは、営業時間と最低の勤務時間から、選べる時刻だけを作って並べる
時刻を入れると、出欠のマスに自動で「○」が付く
何も入れていない日は、ボタン1つでまとめて「×」にできる
開始と終了の片方だけが入っている間は赤く表示し、入れ忘れに気づける
課題:半月分の希望は千マスを超える
シフトの希望は、スタッフごと・日ごとに「出欠」「開始」「終了」の3マスで入力します。スタッフ全員の半月分となると、マスの数は千を超えます。

これだけのマスに時刻を1つずつ打ち込んでいくと、打ち間違いや、終了の入れ忘れも起きやすくなります。そこで、入力をキーボードではなくボタン中心にしました。
工夫1:ダブルクリックで時刻のボタンを出す
開始のマスをダブルクリックすると、時刻のボタンが並んだ小さな画面(ユーザーフォーム)が、マスの横に出ます。ダブルクリックの検知には、シートの BeforeDoubleClick イベントを使っています。

ボタンは、あらかじめフォームに固定で置いておくのではなく、時刻の一覧から実行時に作って並べます。並べるのは、営業時間と最低の勤務時間から決まる「選べる時刻」だけです。
開始のボタン:開店の時刻から「閉店の時刻 − 最低の勤務時間」まで、30分ごと
終了のボタン:「開店の時刻 + 最低の勤務時間」から閉店の時刻まで、30分ごと
たとえば開店が 9:00、閉店が 22:00、最低の勤務時間が3時間なら、開始は 9:00〜19:00、終了は 12:00〜22:00 のボタンが並びます。選べない時刻はそもそもボタンにならないので、ありえない時刻を入れてしまうことがありません。
実際のツールでは、開始のマスをダブルクリックすると、次のように「出勤時刻入力」の画面がマスのすぐ横に開きます。

工夫2:時刻を入れたら出欠は自動で「○」
開始や終了の時刻を入れると、同じ日の出欠のマスに自動で「○」が付きます。出欠を別に入力する手間がなくなり、「時刻は入っているのに出欠が空いている」という食い違いも起きません。

この自動入力は、シートの Worksheet_Change イベントで行っています。ここで気をつけたいのは、イベントの中でマスに「○」を書き込むと、その書き込み自体がまた Worksheet_Change を呼び出してしまう点です。そこで、書き込む間だけ Application.EnableEvents を止めて、処理が二重に動かないようにしています。
また、出勤しない日は何も入れずにおき、最後に「空白を×に」ボタンを押すと、出欠が空いている日をまとめて「×」にできます。1日ずつ「×」を入れて回る必要はありません。
実際の画面:入れ忘れは赤ですぐ分かる
実際の画面では、開始だけを選んで終了がまだ空いている間は、そのマスが赤く表示されます。

開始のマスをダブルクリックし、時刻のボタンから選ぶ
終了が空いている間は、終了のマスが赤くなる
終了も選ぶと、色が戻る
下の画面は、開始に 9:00 を入れたあと、終了のマスが赤くなった状態で「退勤時刻入力」の画面を開いたところです。終了のボタンは 12:00 から始まっていて、開始の画面とは並ぶ時刻が変わっていることも分かります。

千マスを超える表の中でも、赤いマスを探せば入れ忘れがどこにあるかすぐに気づけます。
応用のヒント:選べる値だけをボタンで出す
選べる値だけをボタンで出す入力は、シフトの時刻に限らず、決まった選択肢の中から選ぶ入力に広く使えます。打ち間違いが起きにくく、ドロップダウンを開いて探すよりも速く選べるのが利点です。

予約の時間:空いている時間帯だけをボタンにする
作業の工程・品目:前の工程に合わせて、選べるものを絞る
担当者・場所:その日に動ける人や部屋だけを並べる
動画で見る
この記事の内容は、YouTubeの動画でも紹介しています。
この回のショート動画:シフト希望の入力をボタンで速く|Excel VBA 実装例(2026年11月23日公開)
6つの工夫をまとめた本編:シフト表ツールの工夫6選(2026年11月17日公開)
このシリーズの記事
飲食店向けのシフト作成ツールで使った工夫を、6本の記事で紹介してきました。この記事が最終回です。
1本目:時間帯別の自動配置
2本目:ブックをまたぐ年間集計
3本目:条件付き書式の修復ボタン
4本目:足りない日だけ作り直す
5本目:前の期間を名前で読み込む
まとめ
千マスを超える希望の入力は、キーボードで打つよりボタンで選ぶほうが速く、打ち間違いも起きにくい
ボタンは実行時に作り、営業時間と最低の勤務時間から決まる「選べる時刻」だけを並べる
時刻を入れたら出欠は自動で「○」、空白はボタン1つでまとめて「×」にする(Worksheet_Change では EnableEvents を止めて二重に動かさない)
開始と終了の片方だけのときは赤く表示し、入れ忘れに気づけるようにする
入力する人が「迷わず、間違えずに選べる」ようにしておくと、そのあとの自動作成や集計もスムーズに進みます。決まった選択肢を入力する場面があれば、一つの考え方として、選べる値だけをボタンで出す形を試してみてください。



