【時短】シフト勤務必見!30秒でシフト表をGoogleカレンダーに簡単登録する方法【コードあり】

スポンサーリンク

我が家は予定共有のためにGoogleカレンダーを使っています。

しかし、勤務表の記録には「シフトナ」というシフト勤務者向けアプリを使っていて、いまいちGoogleカレンダーに統一しきれていませんでした。

家族に共有しないにしても、シフト勤務の記録みたいな単純作業は楽にしたいですよね。

看護師 ナースのシフト管理カレンダー:シフトナ – Google Play のアプリ

このアプリの内容はGoogleカレンダーにそのまま共有できない
手入力で1日ずつ入力するのは面倒すぎる!

シフトナの代わりになるようなアプリはないか探すも、そんなものは見つからず・・・。
じゃあ、無いなら作るしかない!!

結論:シフトナのようにGoogleカレンダーに簡単登録はできる!

今現在もそれほど方法は多くありありませんが、Googleカレンダーに簡単登録はできます
ただし、パソコンかタブレットが必要なのでお気をつけください。

完成形は以下のようになります。
項目数や項目の名前、項目の色は自由に変更可能です。

Googleカレンダーに登録した結果は以下の通り↓↓

Googleカレンダーへの入力方法は以下の通り↓↓

①シフト入力のための自作サイトにアクセスする。
②登録する「年」と「月」をプルダウンで選択する。

「休み」の日や「日勤」の日など該当日をそれぞれ選びます。
項目名や項目数、カレンダー上の色は自由に変更可能です。

ちなみに、記事の後半で載せた私のコードはシフトナに近い色を選択してあります。

作るにあたって参考にしたサイト

そこで見つけたのが、以下の記事。
「まだ中学生のブログ」様のブログです。

作成方法は「まだ中学生のブログ」様のブログに書いてあるので、私のブログでは留意点や補足をします。

【作業その1】入力フォームの作成

【作業その2】その1の内容をGoogleカレンダーに登録するプログラムの作成

作業その2はプログラムを書く作業があり嫌気がさすかもしれません。
しかし、下記に載せた私のプログラムを書き換えれば簡単にできると思います!
私もプログラム苦手ですが、できました(笑)

【参考】Googleカレンダーの項目の色分けで使用可能な色

おすすめの作成環境

  • スマホでも作成はできますが(PC版サイトで開く)、PCで作成する方が作業しやすいです。
  • PCの場合Edgeで作成していると【作業その2】の途中で引っ掛かります(スクリプトエディタ(Apps Script)が開きません)。そのため、Chromeで作業しましょう

私が【作業その2】で作成したプログラム ※コピーOK

プログラム中の var CALENDAR_ID = ‘*****@gmail.com’; には、登録したいGoogleメールアドレスを記載してください。

家族で共有するつもりなら、共有用のGoogleアカウントを作った方が良いかもしれません。

個人の予定と分けたり、アカウントに紐づくその他の情報を共有しなくて済みます。
家族とはいえ、何でもオープンにはできないでしょう。

function executeInPosting() {
  //==========================================================
  // 設定箇所
  //==========================================================
  var CALENDAR_ID = '*****@gmail.com';
  var SHIFT1 = '休み';
  var SHIFT2 = '日勤';
  var SHIFT3 = 'L日勤';
  var SHIFT4 = '準夜';
  var SHIFT5 = 'L準夜';
  var SHIFT6 = '深夜';
  var SHIFT7 = 'L深夜';
  var SHIFT8 = '遅番';
    
  var YEAR_COLUMN = 'B';
  var MONTH_COLUMN = 'C';
  var SHIFT1_COLUMN = 'D';
  var SHIFT2_COLUMN = 'E';
  var SHIFT3_COLUMN = 'F';
  var SHIFT4_COLUMN = 'G';
  var SHIFT5_COLUMN = 'H';
  var SHIFT6_COLUMN = 'I';
  var SHIFT7_COLUMN = 'J';
  var SHIFT8_COLUMN = 'K';
  //----------------------------------------------------------
  
  var sheet = SpreadsheetApp.getActiveSheet();
  bottom = sheet.getLastRow();
  
  var year = sheet.getRange(YEAR_COLUMN + bottom).getValue();
  var month = sheet.getRange(MONTH_COLUMN + bottom).getValue();
  var shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue();
  var shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue();
  var shift3 = sheet.getRange(SHIFT3_COLUMN + bottom).getValue();
  var shift4 = sheet.getRange(SHIFT4_COLUMN + bottom).getValue();
  var shift5 = sheet.getRange(SHIFT5_COLUMN + bottom).getValue();
  var shift6 = sheet.getRange(SHIFT6_COLUMN + bottom).getValue();
  var shift7 = sheet.getRange(SHIFT7_COLUMN + bottom).getValue();
  var shift8 = sheet.getRange(SHIFT8_COLUMN + bottom).getValue();
  
  var shift1List = String(shift1).split(',');
  var shift2List = String(shift2).split(',');
  var shift3List = String(shift3).split(',');
  var shift4List = String(shift4).split(',');
  var shift5List = String(shift5).split(',');
  var shift6List = String(shift6).split(',');
  var shift7List = String(shift7).split(',');
  var shift8List = String(shift8).split(',');
  
  // シフト1を登録
  for (var i = 0; i < shift1List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift1List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT1, date);
    Logger.log('createEvent() is done.');
  }
  
  // シフト2を登録
  for (var i = 0; i < shift2List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift2List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT2, date);
    Logger.log('createEvent() is done.');
  }

  // シフト3を登録
  for (var i = 0; i < shift3List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift3List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT3, date);
    Logger.log('createEvent() is done.');
  }

  // シフト4を登録
  for (var i = 0; i < shift4List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift4List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT4, date);
    Logger.log('createEvent() is done.');
  }

  // シフト5を登録
  for (var i = 0; i < shift5List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift5List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT5, date);
    Logger.log('createEvent() is done.');
  }

  // シフト6を登録
  for (var i = 0; i < shift6List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift6List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT6, date);
    Logger.log('createEvent() is done.');
  }

  // シフト7を登録
  for (var i = 0; i < shift7List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift7List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT7, date);
    Logger.log('createEvent() is done.');
  }

  // シフト8を登録
  for (var i = 0; i < shift8List.length; i++) {
    var dateStr = year + '/' + month + '/' + shift8List[i];
    Logger.log(dateStr);
    var date = new Date(dateStr);
    Logger.log(date);
    createEvent(CALENDAR_ID, SHIFT8, date);
    Logger.log('createEvent() is done.');
  }

}

// カレンダーに終日のイベントを作成
function createEvent(calendarId, title, date) {
  const calendar = CalendarApp.getCalendarById(calendarId);
  const event = calendar.createAllDayEvent(title, date);
  if (title === '休み')
      event.setColor(CalendarApp.EventColor.PALE_RED);
  else if (title === '日勤')
      event.setColor(CalendarApp.EventColor.ORANGE);
  else if (title === 'L日勤')
      event.setColor(CalendarApp.EventColor.ORANGE);
  else if (title === '準夜')
      event.setColor(CalendarApp.EventColor.CYAN);
  else if (title === 'L準夜')
      event.setColor(CalendarApp.EventColor.CYAN);
  else if (title === '深夜')
      event.setColor(CalendarApp.EventColor.MAUVE);
  else if (title === 'L深夜')
      event.setColor(CalendarApp.EventColor.MAUVE);
  else if (title === '遅番')
      event.setColor(CalendarApp.EventColor.YELLOW);
  else
      event.setColor(CalendarApp.EventColor.GRAY);
}

細かな留意点①:スプレッドシートの仕様変更

参考サイトの【作業その2】(「まだ中学生のブログ」様)では、「スクリプトエディタ」がメニューバーのツールにあるとしています(ツール>スクリプトエディタ)。

しかし仕様が変更になり、名前が「Apps Script」に変更になり、場所もメニューバーの拡張機能に移動しています(拡張機能>Apps Script)。
役割に変更はありません。

細かな留意点②:Apps Scriptの仕様変更

参考サイトの【作業その2】(「まだ中学生のブログ」様)では、「現在のプロジェクトのトリガー」がプログラム上部にあるとしています。「トリガー」

しかし仕様が変更になり、名前が「トリガー」に変更になり、場所もプログラムの左側に移動しています。
役割に変更はありません。

大事な大事なアクセス権限

これまでの作業を行い、

  • 全部うまくいっているのに、Googleカレンダーに登録されない!
  • ある日急に、Googleカレンダーに登録されなくなった!

となった方、Googleアカウント(Googleカレンダー)へのアクセス権が付与されていないかもしれません。

アクセス権付与には、

  1. 「Apps Script」を開き、「トリガー」を開きます。
  2. 下記画面の通り、トリガー編集の画面を開き、内容を変えずそのまま「保存」を押します。
  3. すると、アクセス権の承認を求める画面が出てくるので承認します。
    ちなみに、承認画面は英語で書かれていて翻訳すると、危険だけど良いか?みたいに書かれていますが、問題ありません。
    翻訳は「Googleレンズ」でPC画面を直接翻訳できます。

私はこのアクセス権限がある日急になくなり、Googleカレンダーに登録できなくなりました。

2段階認証などのセキュリティ設定をいじったからかもしれませんが。。。

最後に

今回紹介した方法は準備に時間がかかるかもしれません。
ですが、完成さえしてしまえば楽できるのでかなりおススメです!
私のプログラムもありますし(手前味噌でスミマセン(笑))

それではまた、次の記事でお会いしましょう!

ぜひ気軽にコメントしていってくださいね♪

リクエストあれば、記事で解説したいと思います。

記事を書いたらXにポストしてます。
フォローしてもらうと歓喜します(笑)

コメント

タイトルとURLをコピーしました