Googleフォームの申込数が指定した数以上になった場合に自動で申し込みを停止する方法(GAS)

イベントなどの予約管理をしている時に使いやすいGoogleフォーム。申し込み時に通知が来るようにしていても、いつ上限に達するかヒヤヒヤしてしまうことはないですか?残念ながら現状のGoogleフォームには自動でフォーム受付を締め切る機能はついていません。そこで、Googleが提供するGoogle Apps Script(GAS)を使って、自動でフォームを停止するようにしたいと思います。

こんな時に使いたい

例えば、「最大30個のお弁当の予約販売をしたい」などという事があったとします。予約の数量を打ち込む欄があり、「お弁当28個の予約時点で、1名から3個追加予約がある場合は対応してあげよう」という柔軟な対応をとってもいいかなと思った時に使えるものです。
当然ですが、Googleアカウントを作成している前提です。アカウント作成していない人はすぐにつくってください。

GASをつかう前に

①まずは受付するためのフォームとを作成しましょう。

f:id:pnch:20201101174125p:plain
Googleドライブよりフォームを作成


②フォームに入力欄を追加する

f:id:pnch:20201101174710p:plain
入力項目はなんでもいいです


③回答用のフォームを作成する

f:id:pnch:20201101174931p:plain
「回答」から「回答をスプレッドシートに表示をクリック」する
f:id:pnch:20201101175011p:plain
「作成」をクリック


④作成した回答が記入されるスプレッドシートを開く

ここまで準備することができたら、ようやくスクリプトを記入していきます。

GASをつくる

今回おこないたいのは、申込数が上限に達した時にフォームの受付を締め切ることです。つまり、今回は最後の申し込みで、申し込み数の合計が30個以上となった場合に受付を締め切ろうと思います。さっそく、開いているスプレッドシートを見ていきましょう。

⑤予約数を管理するセルを用意しよう

f:id:pnch:20201101180230p:plain
合計がわかるように今回はEの3を合計が入力されるように関数を入力しました

今回は申込数の合計を計算してもらうように、SUM関数をE2セルに入れています。画像はすでに数字が入っているように、SUM関数はお弁当の予約数が増えると勝手に計算して、数字を更新してくれます。


スクリプトエディタを開く
 >

f:id:pnch:20201101175434p:plain
ツールより「スクリプトエディタ」をひらく 

f:id:pnch:20201101175606p:plain
新しいタブで画像のようなページが開きます

僕のようにプログラミングとは縁のない生活をしてる人にとっては恐怖を感じる人もいるかも知れませんが、今回はまったく難しくないので安心して下さい。

スクリプトを貼り付ける
スクリプトエディタに下記の内容をコピペして下さい。//以下のコメントにありますが、先程スプレッドシートに用意した合計の数字が記入される欄が30を超えたら、フォームを停止にするということがわずか数行で記述されています。すごいね!

function autocloseform() {
    var ss = SpreadsheetApp.getActiveSheet(); //今開いているスプレッドシートをssという名前にします
    var myForm = FormApp.openByUrl("https://docs.google.com/forms/~~~~/edit");  //フォームのURLをコピペ
    var amount = ss.getRange(2, 5).getValue();  //amountという単語にssのE2(行, 列)の値を取得します
    var hantei = ss.getRange(2, 6);  //hanteiという単語をssのF2(行, 列)のセルとします
  
  if(amount>30){  //もしもamountが30より大きければ
   hantei.setValue("完売");  //hanteiに「完売」と入力します
   myForm.setAcceptingResponses(false);  //フォームの受付を締め切ります
  }else{  //もしもamountが30より小さければ
    hantei.setValue("在庫あり");  //hanteiに「在庫あり」と入力します
  }
}

//以下のコメントに書いているとおり、フォームの編集URLを貼り付けて下さい。

f:id:pnch:20201101181506p:plain
コピーするURLはここ
f:id:pnch:20201101181719p:plain
スクリプトを保存


⑧トリガー(スクリプトを実施するタイミング)を作成する
フォームに予約申し込みがあった時にこのスクリプトを動かし、合計の数字が30を超えたら止めてもらう必要があります。そのために、スクリプトを動かすタイミング(トリガー)を設定します。

f:id:pnch:20201101182004p:plain
スクリプトエディタの編集より「現在のプロジェクトのトリガー」をクリックする
f:id:pnch:20201101182231p:plain
新しく表示されたページより「新しいトリガーの作成」をクリックする
f:id:pnch:20201101182528p:plain
「イベントの種類」からフォームの「変更時」にトリガーを指定する

これでスプレッドシートに記入があり、「変更」された瞬間をトリガーにスクリプトが発生するように指定できました。保存をクリックするとGoogleのアカウントと紐付けて大丈夫?的な表示がされるので、「許可する」をクリックしてあげて下さい。

GASが動くか確認しよう

これでフォームの入力があれば、スプレッドシートに「在庫あるよ」と表示されたり、「完売なので受付締めました」と自動でなるようになりました。フォームの入力画面から、予約が繰り返しおこなわれ、30個以上の予約数となったらこんな画面が表示されているはずです。

f:id:pnch:20201101184208p:plain
完売の表記あり
f:id:pnch:20201101184235p:plain
受付停止の画面が自動表示

───

これで上限以上で申し込まれた方にお断りの連絡をしなくて済みますね。スクリプトについてもっと知りたいという方は、ぜひGoogle Apps Scriptのページをご覧ください。

workspace.google.co.jp