【GAS】Googleカレンダー×スプレッドシートでスケジュール管理が超簡単に!

GAS

本日の記事では,スプレッドシートGoogleカレンダーを組み合わせたスケジュール管理の方法をご紹介します!

本日の記事がおすすめな方

  • スプレッドシートでスケジュールを管理している方
  • Googleカレンダーを使っている方
  • Google Apps Script(GAS)を使った業務効率化に興味がある方

下記のようなスプレッドシート形式のスケジュールで進行管理をされている方は多いのではないでしょうか。

もちろんこれでも進行管理はできますが,案件が多くなってくると管理が面倒ですし,スケジュールの把握が困難になります。

そんなときにGoogle Apps Script(GAS)を活用すれば下記の動画ようなことができます。

「スケジュールを登録」ボタンを押すだけで簡単にGoogleカレンダーに予定が追加できることが分かると思います。

案件ごとにスケジュールを作っておいて,すべてGoogleカレンダーに集約しておけば進行管理も簡単にできますね。

このスプレッドシートは下記より無料でダウンロードができるので,ぜひご活用ください!

こちらからダウンロード

※必ずコピーを作成してからご使用ください。

そもそもGoogle Apps Scriptって何?って方のために簡単にご説明します。

Google Apps Scriptとは

Google社が提供しているプログラミング言語で,略してGASと呼ばれます。
Webブラウザ上で動作する「JavaScript」をベースに開発されており,GmailGoogleスプレッドシートGoogleカレンダーなどのアプリを操作することができます。

また,Googleアカウントさえ作れば無料で使える点から,誰でも気軽に利用することができます。

Google Apps Scriptでできること

  1. Googleの各サービス(GmailスプレッドシートGoogleカレンダーGoogleドライブなど)の自動化
  2. Webアプリケーション開発
  3. Webサイトスクレイピング
  4. 外部サイトアプリとの連携

Google Apps Scriptを利用する上での注意点

GASGoogleのアカウントごとに実行時間実行回数の制限が決まっています。下記の表はGoogleアカウント(無料)Google Workspace(有料)を比較したものです。

制限Googleアカウント(無料)Google Workspace(有料)
スクリプト実行時間6分/実行6分/実行
メール本文のサイズ200KB/メッセージ400KB/メッセージ
添付ファイルサイズ25MB/メッセージ25MB/メッセージ
メール受信者数100件/日1500件/日
カレンダーイベント作成数5000件/日10000件/日
ドキュメント作成数250件/日1500件/日

全体のコード

本日の記事で紹介したスプレッドシートに記述されている全体のコードは下記のとおりです。

function confirmAndAddWorkToCalendar() {
  var ui = SpreadsheetApp.getUi(); // ユーザーインターフェースを取得
  var response = ui.alert('スケジュールをgoogleカレンダーに登録しますか?', ui.ButtonSet.YES_NO);

  // ユーザーが「はい」を選択した場合、スケジュールをカレンダーに登録する
  if (response == ui.Button.YES) {
    addOrUpdateWorkToCalendarOptimized(); // 最適化された関数を呼び出す
  } else {
    ui.alert('操作がキャンセルされました。');
  }
}

function addOrUpdateWorkToCalendarOptimized() {
  var settingsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('使い方');
  var calendarId = settingsSheet.getRange("A2").getValue(); // '使い方'シートのA2セルからカレンダーIDを取得
  var calendar = CalendarApp.getCalendarById(calendarId); // このIDを使用してカレンダーを取得
  if (!calendarId) {
    SpreadsheetApp.getUi().alert('カレンダーIDが指定されていません。');
    return; // カレンダーIDがなければ処理を中止
  }

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var project = sheet.getRange("C1").getValue(); // プロジェクト名を取得
  var startRow = 2; // スタートする行(ヘッダーを除く)
  var numRows = sheet.getLastRow() - 1; // データの数
  var dataRange = sheet.getRange(startRow, 1, numRows, 4); // A列からD列までのデータ範囲
  var data = dataRange.getValues(); // データを二次元配列として取得
  var eventsToCreate = [];
  var existingEventsCache = {};

  data.forEach(function (row) {
    var date = row[0]; // 日付列
    var workContent = row[2]; // 作業内容列
    var description = row[3]; // D列の内容を説明として使用
    if (date && workContent) {
      var fullWorkContent = project + "_" + workContent; // プロジェクト名と作業内容を結合
      var formattedDate = Utilities.formatDate(new Date(date), Session.getScriptTimeZone(), "yyyy-MM-dd");
      if (!existingEventsCache[formattedDate]) {
        existingEventsCache[formattedDate] = calendar.getEventsForDay(new Date(date));
      }
      var existingEvents = existingEventsCache[formattedDate];
      var eventExists = existingEvents.some(function (event) {
        return event.getTitle() === fullWorkContent;
      });
      if (!eventExists) {
        eventsToCreate.push({ date: new Date(date), title: fullWorkContent, description: description });
      }
    }
  });

  // 一括でイベントを作成
  eventsToCreate.forEach(function (event) {
    calendar.createAllDayEvent(event.title, event.date, { description: event.description });
  });
}

まとめ

本日の記事では,Googleカレンダーとスプレッドシートを連携する方法,Google Apps Scriptの概要についての解説をしました。

今後もGASを活用した業務改善例の紹介や,GASについての最新情報を発信していきます。

GASの学習するのにおすすめな本

コメント

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