
概要
ChatGPTにコードを聞いて、Googleスプレッドシートに列記した会社情報・役員任期満了予定日をGoogleカレンダーに一括登録し(Google Apps Scriptを利用)、任期満了日の一定期間前にメールで通知アラートを出すという、簡易的な任期管理の方法を実践します。
手順
- 1/8 Googleのサブアカウントを作成
- 2/8 Googleスプレッドシートを作成
- 3/8 ChatGPTにコードを聞く
- 4/8 Google Apps Scriptにコピペ
- 5/8 Googleカレンダーで確認
- 6/8 Googleカレンダーの通知設定
- 7/8 Gmail転送設定・カレンダーの登録
- 8/8 スプレッドシートの修正・追加
1/8 Googleのサブアカウントを作成

・普段使用しているGoogleアカウントでの利用は推奨しません
・サブアカ作成後は、サブアカID・PASSでログイン(Crome/Edge等のブラウザ自体もサブアカでログインする)
2/8 Googleスプレッドシートを作成
・サブアカのマイドライブから新規でスプレッドシートを作成
・シートに社名、任期、就任日、任期満了予定日等を入力
(例)1行目は項目名とし、A列に社名、B列に役員(任期管理する役員種別)、C列に任期(年)、D列に最終の就任日(※便宜上、定時株主総会の日をベースとする)、E列からN列に任期満了予定日(※便宜的に10回分とする)

・任期満了予定日を10回分入力した場合のシート↓

・任期満了予定日の関数(EDATE)につき

3/8 ChatGPTにコードを聞く
・ChatGPTにログイン(未登録ならサインアップ)し、Googleスプレッドシート上のデータをGoogleカレンダーに登録するためのコードを聞きます
(上述の例で、カレンダーに登録されるイベント名を、A列(社名)とB列(役員種別)を「_」で繋いだ名称(例:TEST_A_取締役)とし、E列からN列の任期満了①~⑩をイベント(終日)として登録する場合)
質問例(プロンプト)
Googleスプレッドシート上のデータを使用して、Googleカレンダーに全日イベントを作成したいです。イベントのタイトルはスプレッドシートのA列とB列のデータを”_”でつなげたものとしたいです。また、イベントの日付はE列からN列のデータに基づいて設定したいです。有効な日付が存在する場合のみイベントを作成し、無効な日付(例えば空のセルや非日付データ)は無視するようなGoogle Apps Scriptを教えてください。

・本質問で生成されたコード↓
function createAllDayEvent() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブなシートを取得
var data = sheet.getDataRange().getValues(); // シートの全データを取得
var calendar = CalendarApp.getDefaultCalendar(); // デフォルトのカレンダーを取得
// 全行のデータに対してループを回す(1行目のヘッダーを除くため、i=1からスタート)
for (var i = 1; i < data.length; i++) {
var row = data[i];
var title = row[0] + "_" + row[1]; // 「A列2行目以降」_「B列2行目以降」をイベントのタイトルとする
// E列からN列までループを回す(JavaScriptでは4から13まで)
for (var j = 4; j <= 13; j++) {
var date = new Date(row[j]); // イベントの日付
if (!isNaN(date.getTime())) { // 日付が有効ならイベントを作成
calendar.createAllDayEvent(title, date);
}
}
}
}
4/8 Google Apps Scriptにコピペ
・任期管理のスプレッドシートの「拡張機能」>「Apps Script」を選択

・ChatGPTに作成してもらったコードをコピペ
・適当な名称(任期管理等)とし、プロジェクトを保存

・承認が必要です>「権限を確認」>アカウント(サブアカ)を選択
・このアプリはGoogleで確認されてません>「詳細」>「(安全ではないページ)に移動」>「許可」
・「▷実行」
・実行ログ欄に「実行完了」が表示されるのを待つ
5/8 Googleカレンダーで確認
・カレンダー上に、任期満了年月日のタイミングでイベントが入っているか確認


・反映されていれば、任期満了予定日の登録は完了
6/8 Googleカレンダーの通知設定
マイカレンダーの設定
・「予定の通知」(メールで通知したいタイミングを設定する、複数可、例:4週前・1週前等)

7/8 Gmail転送設定orカレンダーの登録
(本アカのアドレスにもメール通知をしたい場合)
・サブアカから本アカへメール転送の設定を行う(サブアカのGmail設定)

(本アカのカレンダーにも任期満了予定日を表示させたい場合)
・本アカのGoogleカレンダーでサブアカのカレンダーを登録する(本アカの「設定」>「マイカレンダーの設定」>「カレンダーを追加」>「カレンダーに登録」(サブアカのGmailアドレスを入力))

・サブアカのGmailアドレスに、カレンダー共有のリクエストが届くので受容する

・本アカのGoogleカレンダーにサブアカのイベント(任期満了予定日)が反映されていることを確認
・本アカのGoogleカレンダーの「設定」>「他のカレンダー(サブアカ)の設定」から、予定の通知を設定を行う(上述6/8と同じ要領)
8/8 スプレッドシートの修正・追加
スプレッドシート上の社名・任期を変更したり、新しく任期管理する会社を行に追加したい場合
・上記設定のみではスプレッドシートの情報を修正しても反映されない
・スクリプトへのコード追記やトリガー設定する方法もありえるが、カレンダーに新旧のイベントが重複しがち(ChatGPTに聞いてもムズいって言う)
・サブアカのカレンダーの「設定」>「カレンダーの削除」で予定を完全削除して、Google Apps Scriptから、スクリプトを再度「▷実行」して登録し直すのが手っ取り早い
