Googleスプレッドシートから、Googleカレンダーにまとめてスケジュールを連携する方法について解説します。
今回はGoogleが提供しているGoogle Apps Scriptを使ってスプレッドシートに記載されているスケジュールをGoogleカレンダーにまとめて反映させます。
スケジュールをスプレッドシートやエクセルで管理している人やスケジュールの一括登録したい人などにおすすめです。
連携方法
スプレッドシートの作成
スプレッドシートの見た目を整える意味合いでB5セルから予定表を作成します。B5セルの縦列はカレンダーに連携済みかの確認、C5縦列は日付の入力、D5縦列は曜日、E5縦列は開始時間F5縦列は終了時間、G5縦列はスケジュールのタイトル、H5縦列は場所、I5縦列でスケジュールの説明を入力します。
これでスプレッドシートの準備は完了です。
曜日以外の項目をGoogle Apps Scriptで読み込む仕組みになっています。
スクリプトの設定
スクリプトの設定を行います。
スプレッドシート上部にあるメニューバーから拡張機能>Apps Scriptを選択します。
 ここでスクリプトの入力画面が出てきたら下記のサンプルコードをコピペします。
ここでスクリプトの入力画面が出てきたら下記のサンプルコードをコピペします。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
//スプレッドシートのメニューにカスタムメニュー「カレンダー連携 > 実行」を作成
 var subMenus = [];
 subMenus.push({
 name: “実行”,
 functionName: “createSchedule” //実行で呼び出す関数を指定
 });
 ss.addMenu(“カレンダー連携”, subMenus);
 }
/**
 * 予定を作成する
 */
 function createSchedule() {
// 連携するアカウント
 const gAccount = “○○@gmail.com”; // ○○ここに連携するカレンダーのアドレスを入れる
// 読み取り範囲
 const topRow = 6;
 const lastCol = 9;
// 0始まりで列を指定しておく
 const statusCellNum = 1;
 const dayCellNum = 2;
 const startCellNum = 4;
 const endCellNum = 5;
 const titleCellNum = 6;
 const locationCellNum = 7;
 const descriptionCellNum = 8;
// シートを取得
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 予定の最終行を取得
 var lastRow = sheet.getLastRow();
//予定の一覧を取得
 var contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues();
// googleカレンダーの取得
 var calender = CalendarApp.getCalendarById(gAccount);
//順に予定を作成
 for (i = 0; i <= lastRow – topRow; i++) {
//「済」っぽいのか、空の場合は飛ばす
 var status = contents[i][statusCellNum];
 if (
 status == “済” ||
 status == “済み” ||
 contents[i][dayCellNum] == “”
 ) {
 continue;
 }
// 値をセット 日時はフォーマットして保持
 var day = new Date(contents[i][dayCellNum]);
 var startTime = contents[i][startCellNum];
 var endTime = contents[i][endCellNum];
 var title = contents[i][titleCellNum];
 // 場所と詳細をセット
 var options = {location: contents[i][locationCellNum], description: contents[i][descriptionCellNum]};
try {
 // 開始終了が無ければ終日で設定
 if (startTime == ” || endTime == ”) {
 //予定を作成
 calender.createAllDayEvent(
 title,
 new Date(day),
 options
 );
// 開始終了時間があれば範囲で設定
 } else {
 // 開始日時をフォーマット
 var startDate = new Date(day);
 startDate.setHours(startTime.getHours())
 startDate.setMinutes(startTime.getMinutes());
 // 終了日時をフォーマット
 var endDate = new Date(day);
 endDate.setHours(endTime.getHours())
 endDate.setMinutes(endTime.getMinutes());
 // 予定を作成
 calender.createEvent(
 title,
 startDate,
 endDate,
 options
 );
 }
//無事に予定が作成されたら「済」にする
 sheet.getRange(topRow + i, 2).setValue(“済”);
// エラーの場合
 } catch(e) {
 Logger.log(e);
 }
}
 // ブラウザへ完了通知
 Browser.msgBox(“完了”);
 }
スクリプト内20行目にご自身で使われているGoogleアカウントを入力する場所があるので忘れずに記載してください。20行目に自分のGoogleアカウントを入れる理由は、ここに記載したGoogleアカウントのカレンダーにスプレッドシートのデータを同期しに行くためです。
これでスクリプトを保存します。保存はエディタ画面上部にあるメニューバーにあるフロッピーディスクのマークをクリックします。
スクリプト名はApps Scriptのロゴの横にある”無題のプロジェクト”をクリックすると変更することができます。ここは自由に設定して構いません。(私はカレンダー連携と名付けました。)
これでスクリプトの準備は完了です。
カレンダーと連携
保存された状態でスプレッドシートを更新すると、保存したスクリプト名(今回はカレンダー連携)でスプレッドシート上部のメニューバーに追加されています。このカレンダー連携をクリックします。
スクリプト初回起動時にGoogleアカウントを選択するように言われるので選択します。
これでスプレッドシートのスケジュールを一括でカレンダーに登録することができました。
まとめ
無事スプレッドシートからGoogleカレンダーにスケジュール連携することができました。
今回はサンプルソースを使っての連携になりましたが、これをカスタマイズすることで、もっと細かい予定も入れることができます。
 以降もこのスプレッドシートに予定を記入し、もう一度プログラム実行ボタン(カレンダー連携)をクリックすることでカレンダーに予定を入れることができます。
Google Apps Scriptでは、無駄な作業を自動化したり、外部サービスと連携するなどで、業務効率をUPさせることができます。
 無料で簡単に始められるサービスですので、みなさんもぜひお試しください。
 
 




