フォームの質問項目を自動で調整したい!!
と思ったら、読む話。
例えば会議室の予約や先着順の催し物の参加募集なんかも、上限に達したら質問から消したり、残り数を表示したりしたいこと、ありますよね?
色々と方法はありますが、今回は一番シンプルな例を出してみようと思います。
徐々に機能拡充していくのでちょっとずつ読んでいってくださいな。
おやつを先着〇〇名にプレゼントする企画の予約フォーム。
実装機能
- スプレッドシートに、プルダウンで選択するものをリストで入れます。
- フォームからの投稿数上限を設定する。
- フォームからの投稿があると、countif関数で選択肢に応じて回答数をカウントするように仕込む。
こんな感じに設定します。
A列. 選択項目を手打ち
B列. countif関数でフォームの回答数を取得
C列. A列の項目ごとに、フォームに表示されるまでの上限数を手打ち。
D列. C列-B列
で、これがコード
function edit_form() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getSheetByName("プルダウン");
const rng = sh.getDataRange();
const values = rng.getValues();
const choiceValues = values.filter(row => row[3] >0).map(choice => [choice[0]]);
const formId = "フォームのidを入れてね。";
const form = FormApp.openById(formId);
const items = form.getItems();
const item = items[0];
if(choiceValues){
item.asListItem().setTitle("好きなフルーツ").setChoiceValues(choiceValues);
}else{
item.asListItem().setTitle("好きなフルーツ").setChoiceValues("終了");
}
}
あとは、フォームに1個だけプルダウン選択のアイテムを作って以上のコードを動かせばオッケーです。
フォーム送信時にGASが事項されるようにトリガーつけるのを忘れずに。
フォームから回答が送られるたびに、プルダウンシートのD列が減っていきます。
かつ、フォームから回答が送られるたびに、フォームのアイテムを書き換えるGASが動きます。
D列がゼロになると、その行はGASのFilterメソッドででA列の質問項目が表示されなくなります。
3回投稿すると、プルダウンに表示されなくなる。
キャンディは残りが0になったので、フォームのプルダウンに表示されなくなるのです。
スプレッドシートに仕込んだ動的な要因を使って、フォームを色々と調整することは結構できます。
工夫次第でかなり仕事を効率化できるので、挑戦してみてください。