【GAS】Googleフォーム締切条件をスプレッドシート集計人数にする
以下のようにスプレッドシートで"参加人数列"を集計しているGoogleフォームで、「ここの列を合計した数が100人を超えたらフォームを受付終了表示にしたい」
・・・ということをGASで実現する方法です。
Google Apps Scriptを書けなくても問題ないよう、コピペで済ませられるように書いていきます。
注意:
本記事で記載するGASスクリプトは、上記画像F列のように「1〜9名」までの1桁台の人数が入ってくる想定で書いています。
10名以上の人数が1つのセル内に入ってくるような応募フォームになっている場合はそのままコピペしても動かない点、ご注意ください。
【GAS】Googleフォームをスプレッドシート集計人数で自動締切にする
以下、2ステップです。
- GASのスクリプトを作成(コピペ)
- GASのトリガーを設定
1. GASのスクリプトを作成(コピペ)
対象のGoogleフォームを開いたら、右上3点マーク → スクリプトエディタをクリックします。
すると、このよう↓にスクリプト編集画面が開くので、
以下コードをまるっとコピペしてください。
Google Apps Scriptfunction myFunction() {
const ss = SpreadsheetApp.openByUrl('収集スプレッドシートのURL');
const answerSheet = ss.getSheetByName('フォームの回答 1');
let lastRow = answerSheet.getLastRow();
// F列2行目から最終行までを配列で取得
let applicantNumList = answerSheet.getRange(2, 6, lastRow-1).getValues().flat();
// 配列の空白削除 & 頭文字を数値型で切り出し
applicantNumList = applicantNumList.filter(v => v).map(v => Number(v[0]));
// 応募者数合計
let applicantSum = applicantNumList.reduce((sum, el) => sum + el, 0)
console.log(`応募者合計:${applicantSum}`);
// 送信ボタンを押したぶんを含め、100名が超えた瞬間にフォームを締め切る
if (applicantSum >= 100) {
closeFormAcceptance();
}
}
function closeFormAcceptance() {
var myForm = FormApp.openByUrl("GoogleフォームのURL");
myForm.setAcceptingResponses(false);
}
あなたのスプレッドシートの状態によって、以下の通り修正をします。
2行目
収集スプレッドシートのURL部分を書き換えます。その名の通り、Googleフォームの回答を収集しているスプレッドシートのURLを全部コピぺしましょう。
3行目
フォームの回答 1部分を書き換えます。シートのシート名をそのままコピペしましょう。
6行目
answerSheet.getRange(2, 6, lastRow-1)部分の「6」を修正します。
単純に、「人数カウントの列は左から何列目か」を数えて数字を代入すればOK。
A列=1列目、B列=2列目...というふうにです。
今回の例では「F列」に参加人数を集計しているので、「6」が入っています。
15行目
100部分を上限にしたい数値(人数)に修正します。
2. GASのトリガーを設定
つぎは、「応募者がGoogleフォームを送信した瞬間にGASが起動する」というトリガー設定をしていきます。
GASスクリプトエディタ画面の左メニューから「トリガー」→「トリガーを追加」をクリックします。
- 「実行する関数を選択」でコピペ作成した関数名を選択(最初から選択済みのはず)
- 「イベントのソースを選択」で「フォームから」を選択
- 「イベントの種類を選択」で「フォーム送信時」を選択し、保存
もし以下のような画面が表示されたら、アカウントを選択して許可をしていってください。
トリガーが設定されたことを確認します。
これでうまく動いていれば、応募上限人数に達した次の人から、応募フォームURLへアクセスすると自動的に応募締め切り画面が表示されて応募ができないようになっているはずです。
手動で集計スプレッドシートを編集するなどして、テスト応募を行なってみてください。