
今度イベントを開催するんだけど、席数に限りがあるから予約人数の上限に達したら自動で締め切られるフォームが欲しいな
Googleフォームの集計状況を毎度確認しにいくのは手間なとき、集計が規定の人数に達したら自動でフォームを閉じてくれるスクリプトをGAS(Google Apps Script)で設定します。
これは、「回答した人数(ユーザー数)」の集計ではなく、「設問内で回答された人数」の集計を使用するケースです。
1. Googleフォームの作成
※Googleアカウントを保有している前提となります。
Googleアカウントにログインし、Chromeブラウザの右上メニューより「フォーム」を選択します。


「+空白のフォーム」をクリックして、新規作成します。
フォームタイトルを入力後、人数の数値をプルダウン形式で設定します。応募人数は数値で集計したいので、選択肢は半角数字で統一します。(単位の「人」「名」などは付けない)


次に、回答を集計するスプレッドシートを作成する。
「回答」タブの「スプレッドシートにリンク」をクリックすると、回答用のスプレッドシートが作成される。


2. スプレッドシートのGAS設定
これで、Googleフォームと回答集計用スプレッドシートが連携できました。
ここでシート名を「フォーム(回答)」から、任意のわかりやすいシート名に変えておくことを推奨します。(このあとGAS内で使用)


「拡張機能」を開き、「Apps Script」をクリック


「エディタ」タブのコードを開きます。
①エディタの設定


デフォルトで入っている1~4行目のコードは削除して、代わりに下記をコピー&ペーストします。
function onFormSubmit(e) {
var formId = "Google_FORM_ID"; // GoogleフォームのIDを設定
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1"); // 回答シート名
var form = FormApp.openById(formId);
var data = sheet.getDataRange().getValues();
var total = 0;
for (var i = 1; i < data.length; i++) {
var num = parseInt(data[i][1], 10); // 2列目に人数があると仮定
if (!isNaN(num)) {
total += num;
}
}
Logger.log("現在の合計人数: " + total);
if (total >= 10) {
form.setAcceptingResponses(false);
Logger.log("フォームを締め切りました。合計人数: " + total);
}
}


2行目、var formId = "Google_FORM_ID"; // GoogleフォームのIDを設定
の『Google_FORM_ID』には先ほど作成したGoogleフォームのURLのうち、/d/と/editの間にある英数字をコピー&ペーストします。例)https://docs.google.com/forms/d/xxxxxxxxxxx
/edit
3行目、var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1"); // 回答シート名
の『Form Responses 1』には集計用スプレッドシートのシート名をコピー&ペーストします。
※タイトル名ではないので注意!


18行目、 if (total >= 10)
には上限を設けたい人数(現在は10名)を入力します。
フロッピーアイコンをクリックして保存します。
今回は集計したい人数が集計用スプレッドシートB列目に入っていますが、もしフォームに他の質問があり人数がC列、D列などに入る場合は、10行目var num = parseInt(data[i][1], 10); // 2列目に人数があると仮定
の[1]の数値を変更してください。
・C列の場合→[2]
・D列の場合→[3]
となります。
②トリガーの設定
次に、トリガータブに移動し、トリガー(何を起点として先ほどのスクリプトが実行されるか)設定をします。


「+トリガーを追加」をクリックすると、以下のようなモーダル画面が表示されます。
・実行する関数:onFormSubmit
・実行するデプロイ:Head
・イベントのソース:スプレッドシート
・イベントの種類:フォーム送信時
を選択し保存します。(エラー通知設定はお好みの頻度で)


すると、このような警告が出ますが「Advanced」をクリックします。


Go to フォーム名(unsafe)をクリックし、権限を許可します。


これで、GASの設定が完了です。
3. 動作確認
再度Googleフォームに戻り、右上の公開ボタンから公開します。


公開するとリンクが発行されるので、試しに回答してみましょう。


9人回答した状態ではまだフォームは受け付けています。


+3人の申し込みがあり、合計12人になりました。


次の申し込みをしようと再度フォームを開くと、受付が締め切られていますね。

