最近更新できてませんが、ちょっと学習に充てないといけない用事が3つほど重なってまして、また、役立つ情報が整理できれば、個別記事にしていきます。
今回は、息抜きがてら、業務の一部を自動化した件を書いていこうかと思った次第です。
皆さんはGoogleCalendarは利用されますか?業務で利用することがあるのですが、会社内の標準のスケジュール管理アプリがあるので、どちらを使うかは人によって異なっていたりします。
すべての人に対してうまく立ち回るには2つとも使わないといけない、わけのわからない状態を解決していく1つの案です。
①GoogleCalendarって便利ですが、会社などの組織内で、標準のスケジュール管理アプリがあったりして、両方使わないといけないことってあると思います。(私がそうです)
②GoogleCalendar推しの人が多いと、部署で管理するアカウントが別にあったり、して2重でなくて3重で管理しないといけないことってあると思います。(私がそうです)
正直、2重以上の管理って本当に非生産的で、阿保の所業だと日ごろから、思ってたり、発言したりしているわけですが
形式的には組織内の標準スケジュール管理アプリを使うのが正しいのですが、GoogleCalendarの便利さも理解はするので、2重管理しない形で、両方使う感じにしていくわけです。
①のところは、属している組織によってやり方が異なるので、頑張ってくださいとしか言えないのですが、②の部分は、GoogleCalendar→GoogleCalendarなので、意外と簡単にできます。
まずは、何が簡単か?ということを把握する必要があります。
簡単なルールです”Googleが提供するモノ同士は連携が簡単”
なので、Googleスプレッドシート+GASでプログラムを書いてしまいます。
変数はそれぞれ各々変更したいと思うので、変数はスプレッドシートに記載する形式として、
GPTに命令を下し、コードを出力してもらいます。
で、できたコードが以下
function copyMatchingEventsFromSheetConfig() {
// スプレッドシート「設定」シートを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('設定');
// セルから設定値を取得
const sourceCalendarId = sheet.getRange('B1').getValue();
const targetCalendarId = sheet.getRange('B2').getValue();
const keyword = sheet.getRange('B3').getValue();
const daysToFetch = Number(sheet.getRange('B4').getValue());
// ログで確認
Logger.log('SourceCalendarID: ' + sourceCalendarId);
Logger.log('TargetCalendarID: ' + targetCalendarId);
Logger.log('Keyword: ' + keyword);
Logger.log('DaysToFetch: ' + daysToFetch);
// カレンダー取得
const sourceCalendar = CalendarApp.getCalendarById(sourceCalendarId);
const targetCalendar = CalendarApp.getCalendarById(targetCalendarId);
// 日付範囲
const now = new Date();
const future = new Date();
future.setDate(now.getDate() + daysToFetch);
// イベント取得
const events = sourceCalendar.getEvents(now, future);
for (const event of events) {
const title = event.getTitle();
const description = event.getDescription();
// キーワードがタイトルまたは説明に含まれているか
if (title.includes(keyword) || description.includes(keyword)) {
targetCalendar.createEvent(
title,
event.getStartTime(),
event.getEndTime(),
{
description: description,
location: event.getLocation(),
guests: event.getGuestList().map(g => g.getEmail()).join(','),
}
);
}
}
}
変数はスプレッドシートに書きます。

スプレッドシートのシート名を”設定”に変更し、
B1セルにコピー元のCalendarIDを入力、CalendarIDはメールアドレスのあるアカウントならそれを入力すればよい。メールアドレスが分からない場合、設定画面からCalendarIDを確認できます。
歯車アイコンからCtrl+Fで”カレンダー ID”と検索すれば~@group.calendar.google.comみたいなのが見つかるので、メールアドレスがないアカウント(グループアカウント)ならこれです。
B2の方にはペースト先のCalendarIDを入力
B3は特定のキーワードですね、各自自由に。
B4は対象日数ですね。
あとは、スプレッドシートの拡張機能タブからAppsScriptを開いて、上のコードをコピペ、保存、実行

初回の実行のみ、権限の許可が必要なので、許可してあげてください。許可しないなら使えません。

あと、画面左のストップウォッチみたいなアイコンの”トリガー”設定で、1日1回自動で実行するようにしておけば、特定のキーワードを含むスケジュールのみが、自分のスケジュールから、グループのスケジュールに転記されるので、情報共有しやすいってだけです。


コメント