【完全ガイド】GASでシフト表を自動作成する方法|超初心者でも簡単にできる!

はじめに

「シフト作成、毎回手間がかかって大変…」
「希望調整、ダブルブッキング防止、手作業じゃミスが出る…」

そんなあなたにこそ試してほしいのが、
Google Apps Script(GAS)を使ったシフト表の自動作成です!

この記事では、初心者でもすぐ始められるように、
GASを使ったシフト表自動化の手順と実践コードを徹底解説します!

手間のかかるシフト作成業務、今日で卒業しましょう!


GASでシフト表を自動作成するメリット

GASでシフト作成を自動化すると、いいことづくめです!

  • 希望シフトの集計が一瞬

  • ルールに沿った公平な自動割り当てが可能

  • 作ったシフトを自動配信できる

  • 毎月の更新もトリガー設定で完全自動化できる

つまり、
「手作業のストレス」も「時間のムダ」もゼロにできるのです!


シフト表自動作成の基本ステップ

まずは全体の流れを押さえましょう。

  1. スプレッドシートに希望シフトを集める

  2. GASで希望を集計・整理

  3. 割り当てルールに沿ってシフト表を自動作成

  4. 結果をスプレッドシートに書き込む

  5. 必要なら通知やPDF出力も追加

この流れを組み立てれば、オリジナルのシフト自動作成ツールができます!


【実践】GASでシフト表自動作成をやってみよう!

ここからは実際に手を動かしていきましょう!


ステップ1:希望シフト入力用シートを準備する

まずはGoogleスプレッドシートを用意しましょう。

イメージ例:

  • A列:名前

  • B列以降:日付(4/1、4/2、4/3……)

  • セルには希望(例:「午前」「午後」「夜」「休み」など)を入力

これをスタッフ各自が入力する形にします。


ステップ2:Apps Scriptエディタを開く

スプレッドシートのメニューから
「拡張機能」→「Apps Script」でエディタを開きます。


ステップ3:GASで希望集計&自動割り当てコードを書く

ここでは、シンプルな「希望優先&ダブルブッキング防止」版を作ります!

function createShift() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シフト希望');
  const outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シフト確定');
  
  const data = sheet.getDataRange().getValues();
  const headers = data[0];
  const shiftData = data.slice(1);

  // 出力先シートをクリア
  outputSheet.clear();
  outputSheet.appendRow(headers);

  const days = headers.slice(1); // 日付部分だけ
  const shifts = {}; // 日付ごとの割り当て用

  // 日ごとに希望を整理
  for (let i = 0; i < days.length; i++) {
    shifts[days[i]] = {
      午前: [],
      午後: [],
      夜: [],
      休み: []
    };
  }

  shiftData.forEach(row => {
    const name = row[0];
    for (let i = 1; i < row.length; i++) {
      const day = headers[i];
      const hope = row[i];
      if (shifts[day][hope]) {
        shifts[day][hope].push(name);
      }
    }
  });

  // 確定シフト作成
  shiftData.forEach(row => {
    const name = row[0];
    const newRow = [name];

    for (let i = 1; i < headers.length; i++) {
      const day = headers[i];
      let assigned = '休み'; // デフォルト休み

      if (shifts[day]['午前'].includes(name)) {
        assigned = '午前';
      } else if (shifts[day]['午後'].includes(name)) {
        assigned = '午後';
      } else if (shifts[day]['夜'].includes(name)) {
        assigned = '夜';
      }

      newRow.push(assigned);
    }

    outputSheet.appendRow(newRow);
  });
}

これを実行すれば、

  • 各人の希望をもとに

  • 午前・午後・夜のどれかに割り振り

  • ダブルブッキング防止で

  • 確定版シフト表が作成される

という流れができます!


トリガー設定で毎月シフトを自動更新!

毎月1日に自動でシフト作成するなら、トリガー設定がおすすめです。

  • スクリプトエディタで「トリガー」→「新しいトリガーを追加」

  • 実行関数:createShift

  • イベントタイプ:時間主導型(毎月1日など)

これで、
手動操作ゼロで毎月シフト表が自動作成されるようになります!


さらにできる応用アイデア

もっと実務に即した使い方もできます!

  • 希望者が多い日は公平にローテーション

  • 最低必要人数を自動チェック

  • 夜勤明けの翌日は強制休みにする

  • 自動作成後、担当者にSlackやLINEで通知

  • 作成したシフト表をPDF化して配信

アイデア次第で、本格的なシフト管理システムも作れます!


よくあるエラーと対処法

初心者がハマりがちなトラブルとその対策も押さえておきましょう。

■ シート名ミス

getSheetByName('シート名')で指定する名前は、
スプレッドシート上の正確なシート名と一致している必要があります。
大文字小文字、スペースに注意!

■ セルの入力ミス

「午前」「午後」「夜」「休み」など、想定外の単語が入っていると正常に動かないことがあります。
リスト選択式(プルダウン)で入力を制御すると安心です!

■ 実行エラー(権限リクエスト)

初回実行時はGASからアクセス権限許可を求められます。
必ず許可してください。


まとめ|GASでシフト表作成を自動化すれば、もう悩まない!

この記事では、
GASを使ったシフト表自動作成方法を初心者向けに解説しました!

✅ 希望シフトを集計
✅ 自動割り当てで公平シフト作成
✅ 毎月自動更新も可能
✅ 応用次第でさらに効率化!

これができれば、
もう「シフト作成に悩む時間」とはサヨナラです!

ぜひ今日から、
あなた専用のシフト自動作成ツールを作り上げてください!

Shop now