はじめに

Googleフォームで選択肢を動的にしたいときってありますよね!

具体的には、
① スプレッドシートに候補日リストつくる
② Googleフォームで①から1つ選んで予約する
③ ②で選ばれたやつが①から消えてフォームで選べなくなる
みたいなことがやりたい!

作ったもの

https://github.com/naoqoo2/auto-delete-choices-gas
ほぼリアルタイムで選択肢を最新化します。

  • スプレッドシートの変更反映
  • 回答された選択肢の削除

d.gif

導入手順

  1. フォームとスプレッドシートを作る
  2. スプレッドシートにスクリプト貼り付け
  3. スプレッドシートにトリガーを設定する
  4. フォームにスクリプトを貼り付け
  5. フォームにトリガーを設定する

1. フォームとスプレッドシートを作る

いつも通り作成します。
のちほどIDを使いますのでURLから取得しておいてください。

2. スプレッドシートにスクリプト貼り付け

まずスクリプトエディタを開きます。

image.png

このコードをコピペして保存します。
下記を書き換えてください。

var form_id = '1zpr5c46YWqJqhTBMIFAr9X8bXezJtOdP6OSkoLptvLs'; // フォームID
var question_title = 'ご希望の日程をお選びください'; // 動的にしたい質問のタイトル
var sheet_id = '1Psa8ngX9_Q5sP4YS3P7DR0ACQoHK_tiSh9D9uZaK0qE'; // スプレッドシートID
var sheet_name = 'シート1'; // シート名

3. スプレッドシートにトリガーを設定する

スクリプトエディタからトリガーを開きます。(時計アイコン)
image.png

セルを追加・変更した時にフォームに反映させるためトリガーを設定

  • 実行する関数:change_pulldown_list
  • イベントの種類を選択:編集時
  • エラー通知設定:今すぐ通知を受け取る (問題があった時にすぐ気づけるのでオススメ)

こんな感じです。

image.png

保存時に「Googleアカウントへのアクセスをリクエストしています」と聞いてくるので許可してください。

行を削除した時にフォームに反映させるためトリガーを設定

行の削除は「編集時」イベントでは拾えないため、「変更時」のトリガーも設定してあげます。

  • イベントの種類を選択:変更時

となるだけで、あとは同様です。

4. フォームにスクリプトを貼り付け

2と全く同じスクリプトをフォームのスクリプトエディタにも設定してください。

image.png

5. フォームにトリガーを設定する

回答された選択肢を削除するためトリガーを設定

  • 実行する関数:triger_submit ※スプレッドシートと異なるのでご注意ください
  • イベントの種類を選択:フォーム送信時

これで完成です。

参考

  • https://qiita.com/fuku_sato1/items/d1f3377850caceb6f95c
  • https://twitter.com/naoqoo2/status/1268840794787418113?s=20
  • https://twitter.com/naoqoo2/status/1268840961980764161?s=20