GASでシフト表を自動作成する方法|条件に基づく最適配置
シフト表を毎月手作業で作っているなら、その時間は確実に削れます。スタッフの希望収集からシフト配置まで、GASで自動化すると月に数時間かかっていた作業が数分で完結します。この記事では、GASを使ったシフト表自動作成の仕組みと実際のコード例を、飲食・小売・医療・サービス業の担当者でも理解できるよう丁寧に解説します。
目次
GASでシフト表を自動作成する仕組みの全体像
GASによるシフト表自動作成は、大きく4つのステップで構成されます。まず、スタッフがGoogleフォームまたはスプレッドシートに希望シフトを入力します。次に、GASが収集したデータを読み込み、設定した条件(最低人数・時間帯・スキル要件など)に従って自動でシフトを割り当てます。その後、完成したシフト表をスプレッドシートに書き出し、スタッフへ自動でメール通知を送ります。
手動でシフトを組む場合、希望の収集・調整・表の作成・周知まで含めると、月に3〜5時間かかることは珍しくありません。GASで自動化すると、担当者がやることは「ボタンを1回押すだけ」か「トリガーで全自動」の2択になります。
| ステップ | 手動の場合 | GAS自動化後 |
|---|---|---|
| 希望収集 | メール・紙で収集(数日かかる) | Googleフォームで即時収集 |
| シフト作成 | 担当者が手動で調整(2〜3時間) | GASが数秒で自動配置 |
| 確認・修正 | 個別に連絡・調整(30分〜1時間) | スプレッドシートで確認・微調整 |
| 周知 | メール・LINEで個別送信 | GASが全員に自動メール送信 |
業務自動化でできること100選
経理・人事・営業・CS・総務・ITの6部門100事例を収録。各事例に月間削減時間と導入難易度を明記。今日から始められるチェックリスト付き。
事前準備——スプレッドシートの設計
GASでシフトを自動作成するには、まず「希望入力シート」と「シフト出力シート」の2枚をスプレッドシートに用意します。
希望入力シートの構成
希望入力シートには、スタッフ名・日付・希望区分(出勤可・不可・午前のみ・午後のみ等)を記録する列を作ります。Googleフォームと連携させると、スタッフがスマートフォンから希望を入力した内容がリアルタイムでスプレッドシートに書き込まれます。
列の構成例は以下のとおりです。A列にスタッフ名、B列以降に日付(例: 2026/5/1, 2026/5/2…)を並べ、各セルに「○(出勤可)」「×(不可)」「午前」「午後」のいずれかを入力するシンプルな形式が管理しやすいです。
シフト出力シートの構成
シフト出力シートは、縦軸に日付・横軸に時間帯(早番・中番・遅番など)を並べ、GASが配置したスタッフ名を書き込む形式を取ります。視認しやすいよう、担当者ごとに背景色を変えると現場での確認が楽になります。
GASコードの実装——希望収集から配置まで
以下は、希望入力シートのデータを読み込んでシフト出力シートに割り当てを書き込む基本的なコードの例です。実際の業務に使う際は、スタッフ数・シフト区分・必要人数に合わせてカスタマイズしてください。
基本コード例
function createShift() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const inputSheet = ss.getSheetByName('希望入力');
const outputSheet = ss.getSheetByName('シフト出力');
// 希望データを取得(2行目以降)
const data = inputSheet.getDataRange().getValues();
const headers = data[0]; // 1行目はヘッダー(日付)
const staffList = data.slice(1); // 2行目以降はスタッフデータ
outputSheet.clearContents();
outputSheet.appendRow(['日付', '早番', '中番', '遅番']);
// 日付ごとにシフトを配置
for (let col = 1; col < headers.length; col++) {
const date = headers[col];
const assignedStaff = { '早番': [], '中番': [], '遅番': [] };
staffList.forEach(row => {
const name = row[0];
const wish = row[col];
if (wish === '○') {
// 簡易配置: 早番→中番→遅番の順で均等に割り当て
if (assignedStaff['早番'].length <= assignedStaff['中番'].length &&
assignedStaff['早番'].length <= assignedStaff['遅番'].length) {
assignedStaff['早番'].push(name);
} else if (assignedStaff['中番'].length <= assignedStaff['遅番'].length) {
assignedStaff['中番'].push(name);
} else {
assignedStaff['遅番'].push(name);
}
}
});
outputSheet.appendRow([
date,
assignedStaff['早番'].join(', '),
assignedStaff['中番'].join(', '),
assignedStaff['遅番'].join(', ')
]);
}
SpreadsheetApp.getUi().alert('シフト表を作成しました。');
}
コードの動作説明
このコードは「希望入力シート」からスタッフと日付ごとの希望区分(○/×)を読み込み、「○(出勤可)」のスタッフを早番・中番・遅番に均等に振り分けて「シフト出力シート」に書き込みます。実際の業務では、「1シフトに最低2名必要」「特定スタッフは早番のみ」といった条件を追加することになります。
条件に基づく自動配置のロジック
最低人数チェックの実装
実際のシフト管理では「各時間帯に最低2名は必要」「土日は3名以上」といった条件があります。GASでこれを実現するには、配置後に条件チェックを実行し、不足している場合はアラートを出す処理を追加します。
function checkMinimumStaff(assigned, minRequired) {
const alerts = [];
Object.keys(assigned).forEach(shift => {
if (assigned[shift].length < minRequired) {
alerts.push(`${shift}が${minRequired}名を下回っています(現在${assigned[shift].length}名)`);
}
});
if (alerts.length > 0) {
SpreadsheetApp.getUi().alert('警告:\n' + alerts.join('\n'));
}
}
スキル・資格条件の考慮
医療・介護施設のように「夜勤には看護師資格保有者が必ず1名必要」といった資格条件がある場合は、スタッフデータにスキルフラグを持つ列を追加します。GASでそのフラグを参照しながら配置することで、資格条件を満たしたシフト表を自動で生成できます。
実装のポイント
最初から複雑な条件を詰め込もうとするのは禁物です。「希望通りに出勤可能なスタッフを配置する」という最低限の機能から始め、運用しながら「最低人数チェック」「スキル条件」「連続勤務制限」を一つずつ追加していくのが、実際の現場での定着率を高めるコツです。
完成後の運用——自動通知と定期実行の設定
スタッフへの自動メール通知
シフト表が完成したら、スタッフ全員に自動でメール送信する処理を追加できます。スプレッドシートにスタッフのメールアドレス列を用意しておき、GmailAppを使って個別に送信します。
function notifyStaff(staffName, email, shiftDetails) {
const subject = '来月のシフト表をお送りします';
const body = `${staffName} 様\n\n来月のシフト表が確定しました。\n\n${shiftDetails}\n\n変更が必要な場合はご連絡ください。\n\n株式会社〇〇 シフト管理担当`;
GmailApp.sendEmail(email, subject, body);
}
毎月自動実行のトリガー設定
毎月25日に翌月のシフト希望収集フォームを自動送付し、月末にシフト表を自動生成するといった定期実行も可能です。GASのトリガー機能(時間ベースのトリガー)を使えば、PCが起動していなくても設定した日時にスクリプトが自動で動きます。
設定方法は、GASエディタの「トリガー」メニューから「時間主導型」を選択し、実行する関数と頻度(月次・週次・日次・時間ごと等)を指定するだけです。コードは変更せずに、ブラウザ上の設定画面だけで操作できます。
QGASでシフト表を作るのに、プログラミング経験は必要ですか?
A基本的なコードの読み書きができれば実装可能ですが、まったくの未経験では難しい部分があります。この記事のコードをコピーして自社の列構成に合わせて修正する程度であれば、多少の試行錯誤で対応できます。複雑な条件ロジックが必要な場合は、外注を検討することも有効です。
Qスタッフが50人以上いても対応できますか?
Aスタッフ数が多い場合でも基本的な仕組みは変わりません。ただし、条件が複雑になるほどコードのロジックも複雑になります。50人以上の場合は、処理時間がGASの6分制限に引っかかる可能性があるため、処理を分割する設計が必要になることがあります。
Q既存のExcelシフト表からGASに移行できますか?
AExcelファイルをGoogleスプレッドシートに変換してから、GASのコードを設定する形で移行できます。書式が一部変わる場合があるため、移行後に確認が必要です。過去のシフトデータを引き継ぐ場合は、スプレッドシートにインポートすれば参照できます。
まとめ
この記事のポイント
- GASでシフト表を自動化すると、月に数時間かかる作業が数分で完結する
- 「希望入力シート」と「シフト出力シート」の2枚を用意して、GASで自動配置する
- 最低人数チェック・スキル条件・連続勤務制限など、条件を段階的に追加するのがコツ
- トリガー設定で毎月自動実行・自動メール通知まで完全自動化できる
- まずシンプルな機能から始め、現場の運用に合わせて改善していくのが定着の近道
関連記事
※本記事の情報は2026年4月時点のものです。