GAS業務自動化 |

GASでシフト表を自動作成する方法|条件に基づく最適配置

GASでシフト表を自動作成する方法

シフト表を毎月手作業で作っているなら、その時間は確実に削れます。スタッフの希望収集からシフト配置まで、GASで自動化すると月に数時間かかっていた作業が数分で完結します。この記事では、GASを使ったシフト表自動作成の仕組みと実際のコード例を、飲食・小売・医療・サービス業の担当者でも理解できるよう丁寧に解説します。

GASでシフト表を自動作成する仕組みの全体像

GASによるシフト表自動作成は、大きく4つのステップで構成されます。まず、スタッフがGoogleフォームまたはスプレッドシートに希望シフトを入力します。次に、GASが収集したデータを読み込み、設定した条件(最低人数・時間帯・スキル要件など)に従って自動でシフトを割り当てます。その後、完成したシフト表をスプレッドシートに書き出し、スタッフへ自動でメール通知を送ります。

手動でシフトを組む場合、希望の収集・調整・表の作成・周知まで含めると、月に3〜5時間かかることは珍しくありません。GASで自動化すると、担当者がやることは「ボタンを1回押すだけ」か「トリガーで全自動」の2択になります。

ステップ 手動の場合 GAS自動化後
希望収集 メール・紙で収集(数日かかる) Googleフォームで即時収集
シフト作成 担当者が手動で調整(2〜3時間) GASが数秒で自動配置
確認・修正 個別に連絡・調整(30分〜1時間) スプレッドシートで確認・微調整
周知 メール・LINEで個別送信 GASが全員に自動メール送信

事前準備——スプレッドシートの設計

GASでシフトを自動作成するには、まず「希望入力シート」と「シフト出力シート」の2枚をスプレッドシートに用意します。

この領域でつまずきやすいのは、ツール選定よりも「業務の中のどこに組み込むか」の設計です。BoostXの業務自動化サービスは、業務ヒアリングから設計・定着支援までをサービス対応範囲としてカバーできる領域です。

希望入力シートの構成

希望入力シートには、スタッフ名・日付・希望区分(出勤可・不可・午前のみ・午後のみ等)を記録する列を作ります。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でそのフラグを参照しながら配置することで、資格条件を満たしたシフト表を自動で生成できます。

For Executives · 毎月限定5社

「AI、何から始めるか」を、
御社の事業に当てはめた戦略提案書

業界事例・ROI試算・3ヶ月導入ロードマップを含む全15章から、御社が今いちばん知りたい5章を選んで編集。代表 吉元が監修して3〜5営業日でPDFお届け。完全無料。

経営者・役員・部門長・AI推進ご担当者の方限定。御社の事業に当てはめた個別作成のため、立場が判断できない方への配信はお断りしております。

完成後の運用——自動通知と定期実行の設定

スタッフへの自動メール通知

シフト表が完成したら、スタッフ全員に自動でメール送信する処理を追加できます。スプレッドシートにスタッフのメールアドレス列を用意しておき、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やAPI連携で業務を楽にしたい、でも「どの業務から自動化すべきか」の判断が難しい——ここで手が止まってしまうケースがあります。先にツールを触るより、自動化する順番を整理しておくほうが、結果的に早く楽になります。BoostXの業務自動化サービスは、この順番づくりから、設計、運用の定着まで並走する内容です。どこから始めるべきか、まずは無料相談でご相談ください。

まとめ

  • GASでシフト表を自動化すると、月に数時間かかる作業が数分で完結する
  • 「希望入力シート」と「シフト出力シート」の2枚を用意して、GASで自動配置する
  • 最低人数チェック・スキル条件・連続勤務制限など、条件を段階的に追加するのがコツ
  • トリガー設定で毎月自動実行・自動メール通知まで完全自動化できる
  • まずシンプルな機能から始め、現場の運用に合わせて改善していくのが定着の近道

吉元大輝(よしもとひろき)

株式会社BoostX 代表取締役社長

中小企業の生成AI導入を支援する「生成AI伴走顧問」サービスを提供。業務可視化から定着支援まで、一気通貫で企業のAI活用を推進している。

※本記事の情報は2026年4月時点のものです。

SNSで共有する
無料個別相談 ・ 30分 ・ オンライン

「何から始めればいいか分からない」を、 30分で「次の一手」に変える。

どの業務にAIが効くのか。内製と外注、どちらが自社に得か。判断に迷うポイントを、専門家が貴社の状況に合わせて一緒に整理します。売り込みではなく、明日から動ける現実的なプランをお持ち帰りいただけます。

  • 貴社の業務で「AIが効く当たり所」が見つかる
  • 内製・外注・費用感の「判断軸」がはっきりする
  • 今日から動ける「具体的な次の一歩」を持ち帰れる

\ 専門家がマンツーマンで対応 /

無料で相談を予約する
  • 相談は何度でも無料
  • 全国どこでもオンライン対応
  • 無理な勧誘は一切なし
A