取り消したシフトも自動で消える|Excelのシフト表をGoogleカレンダーへ自動反映した開発事例
- yuji fukami
- 2 日前
- 読了時間: 7分

シフト表はExcelで完成しているのに、その画面を見ながら、スタッフ一人ひとりのカレンダーへ予定を1件ずつ手入力していく。訪問先、時間帯、担当者を目で追いながら、間違えないように写していく。1か月分で数百件になれば、それだけで数時間の作業です。
今回は、ある訪問介護事業者さまからのご相談で、Excelのシフト表をスタッフごとのGoogleカレンダーへ自動反映する仕組みを構築しました。実データや個人情報は伏せ、仕組みの部分だけを匿名化してご紹介します。
この記事でお伝えしたいことは、ひとつだけです。
人がやることは「Excelでシフトを組んで、CSVを書き出す」だけ。それ以降のカレンダー登録も、取り消しも、全部自動。
課題:シフト表とカレンダーの「二重管理」
同じシフト情報を、Excelとカレンダーの2か所で管理している状態には、いくつも問題があります。
単純に時間がかかる。件数が多いほど、転記だけで半日が消える
目視で写すため、時間帯や担当者の入力ミスが起きる
シフトが変更されるたびに、この作業がまるごと発生する
そして、さらに厄介なのが「シフトが取り消されたとき」です。
カレンダーに一度登録した予定は、取り消しになっても勝手には消えません。人が探して、見つけて、削除する必要があります。消し忘れれば、スタッフは存在しない予定に向かって出発してしまう。登録の手間より、この「消す作業」のほうが見落としが起きやすく、影響も大きいのです。
つまり、自動化すべきなのは「登録」だけではありません。「取り消しの追従」まで含めて初めて、二重管理から解放されます。ここが今回の仕組みの中心にある考え方です。
仕組みの全体像
構築した仕組みの流れは、左から右へ次のようになっています。
Excelのシフト表 → CSVファイル → Googleドライブ → Googleスプレッドシート → Googleカレンダー

図で注目していただきたいのは、オレンジとブルーの境界線です。
オレンジは「作業者が手を動かす範囲」、ブルーは「自動処理の範囲」を表しています。作業者が触れるのはオレンジの範囲だけ。ブルーの範囲は、誰も触らなくても勝手に動き続けます。この境界線がどこに引かれているかが、この仕組みの価値そのものです。
作業者がやることは、たった2ステップ
Excelでシフトを組む(従来どおり)
ボタンを押してCSVを書き出す
これだけです。
ポイントは、CSVの書き出し先を「デスクトップ版Googleドライブの同期フォルダ」にしてあることです。このフォルダに保存されたファイルは、保存した瞬間に自動でクラウドへアップロードされます。
つまり、作業者にとって「アップロードする」という工程自体が存在しません。いつもどおりExcelでボタンを押して保存する。それだけで、データはもうクラウド側に届いています。地味な工夫ですが、ここで手順が1つ増えるかどうかは、日々の運用の続けやすさに直結します。
作業の頻度は1日2〜4回程度。シフトを変更したタイミングで書き出すだけです。
自動処理の中身:システムは10分おきに何をしているか
ここから先は、作業者が何もしなくても動き続ける部分です。
Googleスプレッドシート上のプログラム(GAS=Googleのサービス上で動く小さなプログラムのことです)が、10分おきに自動で起動します。起動して最初にやるのは、CSVが前回から更新されているかの確認です。
更新されていなければ、何もせずに終了する
更新されていれば、内容を読み込んで処理に進む
この「何もせずに終了する」という設計は、地味なようで重要です。CSVが書き出されるのは1日に数回。10分おきに起動しても、大半の回は処理すべきことがありません。そこで無理に全件をチェックしに行くのではなく、更新の有無だけを見て静かに終わる。必要なときだけ働く設計にしています。
更新があった場合は、CSVをスプレッドシートへ丸ごと読み込みます。そのうえで、スプレッドシートの数式が、CSVの内容と「登録済み台帳」(カレンダーに登録した予定を記録しておくシート)を突き合わせ、
これから登録すべきシフトの一覧
これから取り消すべきシフトの一覧
を自動的にリストアップします。プログラムは、このリストに載っているものだけを処理します。判断はスプレッドシート側で終わっていて、プログラムは「作業が必要な数件」を受け取って実行するだけ、という役割分担です。
「取り消されたシフト」も自動で消える、という価値
冒頭で挙げた課題への回答が、この章です。
システムは「登録済み台帳」を持っていて、カレンダーに入れた予定をすべて記録しています。新しいCSVを読み込んだとき、台帳にはあるのにCSVから消えているシフトが見つかったら、それは「取り消されたシフト」だと判断し、カレンダーから自動的に削除します。
このとき、どのシフトとどのシフトが同じものなのかを間違えないことが肝心です。判定に使っているのは、カレンダーID・利用者名・開始時刻・終了時刻をつなげた「そのシフト固有の鍵」です。この鍵でCSV側と台帳側を照合するため、似た時間帯のシフトが並んでいても、同一のシフトを確実に特定できます。
判定は次の4パターンに整理されています(図の「G. 判定ルール」の部分です)。
CSVにあるが、台帳にない → 新しいシフト → カレンダーに登録する
台帳にあるが、CSVから消えた → 取り消された → カレンダーからキャンセルする
CSVにも台帳にもある → 変更なし → 何もしない
過ぎた日付のシフト → 対象外 → 何もしない
シンプルなルールですが、これだけで「登録」と「取り消し」の両方がカバーされます。作業者はExcelからシフトの行を消すだけ。カレンダー側を探しに行く必要はもうありません。
技術的に工夫したポイント(※技術的な話に興味がある方へ)
この章は読み飛ばしていただいて構いません。本筋は前の章までで完結しています。
処理の高速化。当初はCSVの全行(600件以上)を1行ずつチェックする作りで、処理が制限時間内に終わらないことがありました。そこで、どれを登録・取り消しすべきかの判定をスプレッドシートの数式側に任せ、プログラムは「作業が必要な数件」だけを受け取る設計に変更しました。これにより、通常時の処理は数秒で完了するようになっています。
処理の中断と再開。Googleのプログラムには、1回あたりの実行時間に上限があります。大量のシフトを一度に処理する場合に備え、時間切れの手前で安全に中断し、残りを次回の起動時に引き継ぐ仕組みを入れました。途中で止まっても、続きから再開されます。
二重登録の防止。手動での実行と、10分おきの自動実行が重なることがあります。同じ予定が2回登録されないよう、排他制御(同時に2つの処理が走らないようにする仕組み)を入れています。
いずれも派手な機能ではありませんが、こうした部分が「毎日、放っておいても動き続ける」ことを支えています。
同じ仕組みが応用できる業務
今回は訪問介護のシフトでしたが、「Excelで管理している予定を、別のシステムへ反映する」という構造は、業種を問わずどこにでもあります。
会議室・設備の予約表 → 共有カレンダー
営業の訪問予定 → 各担当者のカレンダー
工事・作業の日程表 → 現場スタッフのカレンダー
シフト表 → 勤怠システムや通知メール
簡易的な連携ツールでも「登録」まではできることが多いのですが、今回の仕組みの違いは、取り消しにも自動で追従する点にあります。予定は入るだけでなく、変わるし、なくなる。実務で使い続けられるかどうかは、この「なくなったとき」をどう扱うかで決まると、私の経験上は感じています。
同じ考え方で、既存のExcelマクロを業務に合わせて作り直した事例として「Excel VBAで在庫CSV更新を自動化した開発事例」もあわせてご覧いただけます。
まとめ
今回の事例では、Excelのシフト表をスタッフごとのGoogleカレンダーへ自動反映する仕組みを構築しました。
作業者がやることは、Excelでシフトを組み、ボタンを押してCSVを書き出すところまで。その先の、クラウドへのアップロード、更新の検知、登録すべきシフトと取り消すべきシフトの判定、カレンダーへの登録と削除は、すべて自動で進みます。手作業でのカレンダー入力は、ゼロになりました。
すでにExcelで業務が回っている現場では、運用そのものを大きく変えずに、転記だけを切り離して自動化できる場面が少なくありません。「毎月この転記だけが重い」という作業があるなら、その1工程が自動化の入口になり得ます。

