Googleフォームの日程調整をGoogleカレンダーに自動反映する方法|GASで連携

Googleフォームはアンケートや日程調整、予約受付など、さまざまなシーンで活用できる便利なツールです。
ですが、フォームで集めた日程を手作業でGoogleカレンダーに登録するとなると意外と手間がかかります。
そこで今回はGoogle Apps Script (GAS) を使って、Googleフォームの回答内容を自動的にGoogleカレンダーへ反映する方法をご紹介します。
なお、別の記事でご紹介しているGoogleカレンダーの「予約スケジュール」機能も同様のことができるため、手軽にカレンダー反映するならこちらの機能を活用するのもおすすめです。
Googleカレンダーの「予約スケジュール」機能について
Googleカレンダーの「予約スケジュール」機能を使えば、フォームを作成しなくてもカレンダー上で空き枠への予約受付や自動登録がかんたんに行えます。
Google Workspaceユーザーだけでなく、個人のGoogleアカウントでも1つまで利用できるようになっています。
詳しくは以下の記事をご覧ください。
完成イメージ
Googleフォームの回答

Googleカレンダー反映結果

- Googleフォームから日程希望が送信されると、自動でGoogleカレンダーに予定が追加される
- 手作業の転記が不要になり、日程調整や予約受付の効率がアップ
Googleフォームからカレンダー反映に必要な設定3つ
今回の例では、GoogleフォームからGoogleカレンダーに予定を反映するには次の3つの設定が必要です。
- Googleフォームの作成
申込み内容を受け付けるフォームを作成し、回答をスプレッドシートに保存します。 - スクリプトの設定
Google Apps Scriptで、フォーム送信時に下書きを使って自動返信メールを送信するスクリプトを設定します。 - トリガーの設定
スクリプトが自動で動作するよう、「フォーム送信時」にスクリプトを実行するトリガーを設定します。
この3つのステップを設定することでフォーム送信→カレンダー反映を自動化できます。
それぞれの手順について以下でご説明します。
Googleフォームの作成

まずはGoogleフォームの作成から始めます。
今回は以下のようなシンプルなフォームを例に進めます。
- お名前
(記述式) - 希望日
(日時型・日付型) - 希望開始時刻
(時刻型) - その他連絡事項(任意)
(段落・自由記述)

ブラウザからGoogleフォームにアクセスします。
(GoogleドライブからでもGoogleフォームを新規作成できます。その場合、Googleドライブで「+新規」>「Google フォーム」を選択します。)

「新しいフォームを作成」の中から、「空白のフォーム」を選択して新規作成します。

質問タブをクリックし、フォームの名前を入力します。
その後、質問を追加していきます。
質問の追加例
- 1問目:お名前
-
- 「+」ボタンで質問を追加
- 「お名前」と入力
- 「記述式」を選択
- 「必須」の質問に設定
- 2問目:メールアドレス
-
- 「+」ボタンで質問を追加
- 「メールアドレス(任意)」と入力
- 「記述式」を選択
- 3問目:希望日
- 「+」ボタンで質問を追加
- 「希望日」と入力
- 「日付」を選択
- 「必須」の質問に設定
- 希望開始時刻
- 「+」ボタンで質問を追加
- 「希望開始時刻」と入力
- 「時刻」を選択
- 「必須」の質問に設定
- 連絡事項・ご要望
- 「+」ボタンで質問を追加
- 「連絡事項・ご要望(任意)」と入力
- 「段落」を選択

次に、回答の保存先をスプレッドシートにするため「回答」タブをクリックします。

新しいスプレッドシートを作成します。(または既存のシートを選択)

これで、希望日時を含むすべての回答がGoogleスプレッドシートに自動で保存されるようになります。

フォーム編集画面右上の「公開」ボタンをクリックします。

回答者の対象範囲を選択して、公開をクリックします。
フォームが公開状態になれば回答を受け付けできるようになります。
スクリプトの設定

Googleフォームの「回答」タブからスプレッドシートを開きます。
(または、Googleドライブでフォームの回答用スプレッドシートを開きます。)

スプレッドシートの画面上部メニューから「拡張機能」→「Apps Script」をクリックします。
新しいタブでGoogle Apps Scriptのエディタが開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
フォーム回答 → カレンダー反映スクリプト
function onFormSubmit(e) {
// 回答内容を取得
const responses = e.values;
const name = responses[1]; // 氏名
const email = responses[2]; // メールアドレス
const date = responses[3]; // 希望日(例: 2025/06/19)
const time = responses[4]; // 希望開始時刻(例: 16:00:00)
const memo = responses[5]; // 連絡事項
// 日付(yyyy/MM/dd)と時刻(HH:mm:ss)を分割して取得
const dateParts = date.split("/");
const timeParts = time.split(":");
// new Date(年, 月(0始まり), 日, 時, 分, 秒) で日本時間で生成
const start = new Date(
Number(dateParts[0]),
Number(dateParts[1]) - 1, // 月は0始まり
Number(dateParts[2]),
Number(timeParts[0]),
Number(timeParts[1]),
Number(timeParts[2] || 0)
);
// 例:1時間後を終了時刻に
const end = new Date(start.getTime() + 60 * 60 * 1000);
// GoogleカレンダーID
const calendarId = "自分のGmailアドレス@gmail.com";
const calendar = CalendarApp.getCalendarById(calendarId);
// カレンダーに予定を登録
calendar.createEvent(
"【日程調整】" + name,
start,
end,
{ description: memo }
);
}
スクリプトの説明
- フォームの回答内容を取得
-
const responses = e.values; const name = responses[1]; // 氏名 const email = responses[2]; // メールアドレス const date = responses[3]; // 希望日 const time = responses[4]; // 希望開始時刻 const memo = responses[5]; // 連絡事項
e.values
:フォームに入力された各回答値が配列で格納されています。responses[n]
:フォーム項目の並び順に応じて、それぞれの回答を取り出しています。
例)responses[1]が「氏名」、responses[2]が「メールアドレス」など。
- 日付・時刻から開始日時・終了日時を生成
-
const dateParts = date.split("/"); const timeParts = time.split(":"); const start = new Date( Number(dateParts[0]), // 年 Number(dateParts[1]) - 1, // 月(0始まりのため-1) Number(dateParts[2]), // 日 Number(timeParts[0]), // 時 Number(timeParts[1]), // 分 Number(timeParts[2] || 0) // 秒(未入力なら0) ); const end = new Date(start.getTime() + 60 * 60 * 1000); // 1時間後を終了時刻に設定
split("/")
:「2025/06/19」のような日付文字列を「年・月・日」に分割します。split(":")
:「16:00:00」のような時刻文字列を「時・分・秒」に分割します。new Date(年, 月, 日, 時, 分, 秒)
:Google Apps Script上で日本時間(JST)で日時オブジェクトを作成します。end
:開始時刻の1時間後を自動で終了時刻として設定しています。
- Googleカレンダーの取得
-
const calendarId = "自分のGmailアドレス@gmail.com"; const calendar = CalendarApp.getCalendarById(calendarId);
calendarId
:予定を登録したいGoogleカレンダーのID。CalendarApp.getCalendarById
:指定したカレンダーIDのGoogleカレンダーを取得します。
- カレンダーに予定を登録
-
calendar.createEvent( "【日程調整】" + name, start, end, { description: memo } );
createEvent(タイトル, 開始日時, 終了日時, オプション)
:カレンダーに新しい予定(イベント)を作成します。- 今回は「【日程調整】+氏名」をタイトルに、開始・終了日時・備考(memo)を説明欄として登録しています
// GoogleカレンダーID
const calendarId = "あなたのGmailアドレス@gmail.com";
スクリプトの27行目のカレンダーIDの入力を自分のGoogleカレンダーIDに書き換えます。
GoogleカレンダーのIDは、Googleカレンダーを開き、左側の「マイカレンダー」リストから登録したいカレンダーを選択→「設定と共有」→「カレンダーの統合」に記載されています。
個人用であれば自分のGmailアドレスでOKです。
共有カレンダーの場合は、そのカレンダー専用のID(メールアドレス形式)が必要です。
// 例:1時間後を終了時刻に
const end = new Date(start.getTime() + 60 * 60 * 1000);
スクリプト24行目の「終了時刻を設定する部分」で、予定の長さ(所要時間)を自由に変更できます。
1時間の場合は「60 * 60 * 1000
」、
90分の場合は「90 * 60 * 1000
」など、用途に合わせて設定してください。

スクリプトを書いたら、名前を付けて保存します。

実行ボタンをクリックして、「権限の確認(承認)」を行います。
これは、自動化スクリプトが「このGoogleアカウントで本当にスプレッドシートやカレンダーを操作して良いですか?」という安全確認を行うもので、最初の1回だけ実施します。
許可が完了すると、以降はトリガー経由でもスクリプトが実行されるようになります。

なお、実行ボタンから実行するとエラー表示になりますが特に問題ありません。
(トリガーで実行するため)
トリガーの設定

エディタ画面の左側メニューから「時計マーク(トリガー)」をクリックします。

「トリガーを追加」または「新しいトリガーを作成します」をクリックします。

- 「実行する関数を選択」
-
onFormSubmit
を選択します。 - 「実行するデプロイを選択」
-
Head
が表示されているのでそのままでOKです。 - 「イベントのソースを選択」
-
スプレッドシートから
を選択します。 - 「イベントの種類を選択」
-
フォーム送信時
を選択します。

保存をクリックして、トリガー設定完了となります。
トリガー設定時も初回のみ、権限の確認ダイアログが表示されます。
画面の案内に従ってGoogleアカウントで「許可」を選択します。
動作確認

フォームの作成、スクリプトの設定、トリガーの設定の3つが準備できたら、動作確認を行います。
- フォームにテスト回答を送信し、Googleカレンダーに自動で予定が追加されているか確認
- うまくいかない場合は、スクリプト内の列番号やカレンダーIDに誤りがないか確認
- 必要に応じて、予定のタイトルや説明文をカスタマイズ
Googleカレンダーに予定が正しく反映されれば完了です。
注意点
- フォームの項目を増減した場合、スクリプト内の列番号も修正が必要です。
- カレンダーが共有カレンダーの場合、書き込み権限が必要です。
- Google Workspace管理下では管理者の設定によってスクリプト実行が制限される場合があります。
(Google Workspaceユーザーの場合のみ。個人アカウントでは制限されません)
Googleカレンダーの「予約スケジュール」機能もおすすめ

今回の記事ではGoogleフォームからカレンダーに予定を自動反映する方法をご紹介しましたが、同様のことができるGoogleカレンダの予約スケジュール機能もおすすめです。
カレンダー上で空き時間枠を設定しておけば、申込者が希望する時間を選ぶだけで予定が自動登録される便利な機能です。
予約スケジュール機能はGoogle Workspaceだけでなく、個人Googleアカウントでも1つまで利用可能です。
詳細について以下の記事をご覧ください。

まとめ
GoogleフォームとGoogleカレンダーを自動連携させることで、日程調整や予約受付業務を効率化できます。
手作業での転記や入力ミスを防ぎ、空いた時間を本来の業務やサービス向上に充てられるようになります。


弊社では、Google Apps Script(GAS)を活用した業務効率化サポートのほか、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
ぜひお気軽にご相談ください。貴方の業務改善を全力でサポートいたします。
コメント