0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GASでフォームの質問項目を投稿結果から自動で書き換える。

Last updated at Posted at 2023-12-06

フォームの質問項目を自動で調整したい!!

と思ったら、読む話。

例えば会議室の予約や先着順の催し物の参加募集なんかも、上限に達したら質問から消したり、残り数を表示したりしたいこと、ありますよね?

色々と方法はありますが、今回は一番シンプルな例を出してみようと思います。
徐々に機能拡充していくのでちょっとずつ読んでいってくださいな。

おやつを先着〇〇名にプレゼントする企画の予約フォーム。

実装機能

  1. スプレッドシートに、プルダウンで選択するものをリストで入れます。
  2. フォームからの投稿数上限を設定する。
  3. フォームからの投稿があると、countif関数で選択肢に応じて回答数をカウントするように仕込む。

フォームの回答シートはこんな感じになる。
image.png

image.png

こんな感じに設定します。
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列の質問項目が表示されなくなります。

最初は存在していたキャンディが・・・。
image.png

3回投稿すると、プルダウンに表示されなくなる。

image.png
キャンディは残りが0になったので、フォームのプルダウンに表示されなくなるのです。

スプレッドシートに仕込んだ動的な要因を使って、フォームを色々と調整することは結構できます。
工夫次第でかなり仕事を効率化できるので、挑戦してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?