定員(人数制限)に達した選択肢の項目を消す、申込締切日を過ぎた選択肢の項目も消す、定員までの残席数を表示するフォームです。
前の記事で作成したGAS(updateItems)とスプレッドシートの関数を組み合わせて実現しました。
次の記事からの続きです。GASで組んだ関数updateItemsを今回も使います。
応用例その6
〇〇講演会の申込フォーム
このフォームは、定員に達した選択肢の項目は、表示が消えて選べなくなります。
また、申込締切日を過ぎた選択肢の項目も、表示が消えて選べなくなります。
そして、定員までの残りの席数を表示します。
①質問、②選択肢、③説明
GASの登録
次の記事に従ってGAS(updateItems)をこのフォームに登録してください。
スプレッドシートの関数
次に、リンクしたスプレッドシートに2枚目のシートを用意しました。
このシートの内容がGAS(updateItems)で使用されます。
①フォームの質問
②フォームの選択肢
③フォームの説明~このB列をフォームの説明に表示します。
④参照セル~このC列の値がゼロ"0"以下になると、フォームの選択肢から消えます。(このシートのA列は消えません。)
このシートを数式を表示([Ctrl]+@)してみます。
テーブル(コピペ用)で表示します。
公演日 | ご希望の公演日をお選び下さい。 | フラグ | 残席数 | 申込数 | 定員数 | 受付終了までの日数 | 締切日 |
7月9日 | =IF(C2,A2&":残り"&D2&"座席",A2&"は受付終了です。") | =N(AND(D2>0,G2>0)) | =F2-E2 | =COUNTIF('フォームの回答'!B:B,A2) | 5 | =DATEVALUE(H2)-DATEVALUE(TODAY())+1 | 2023/07/02 |
7月16日 | =IF(C3,A3&":残り"&D3&"座席",A3&"は受付終了です。") | =N(AND(D3>0,G3>0)) | =F3-E3 | =COUNTIF('フォームの回答'!B:B,A3) | 5 | =DATEVALUE(H3)-DATEVALUE(TODAY())+1 | 2023/07/09 |
7月23日 | =IF(C4,A4&":残り"&D4&"座席",A4&"は受付終了です。") | =N(AND(D4>0,G4>0)) | =F4-E4 | =COUNTIF('フォームの回答'!B:B,A4) | 5 | =DATEVALUE(H4)-DATEVALUE(TODAY())+1 | 2023/07/16 |
表計算に詳しい人でも、あれ?と思う箇所があるかもしれません。
今回のポイントは、各選択肢には定員と締切日の2つの制限を設けていることです。
登録してあるupdateItemsはC列のセル(今回はフラグ)がゼロ以下の時、A列の項目を選択肢から消します。
今まではこのセルに残席数などの漸減値を使うことで、定員になった時このセルの値がゼロになるようにしていました。
今回は定員だけでなく締切日の2つの値の判定のため、フラグ(0か、1か)で対応しました。
フラグ=N(AND(残席数>0,受付終了までの日数>0))
フラグは、定員に達していない(残席数がゼロより大きい)、かつ締切日より前(受付終了までの日数がゼロより大きい)であるなら1、それ以外は、0になります。
受付終了までの日数=DATEVALUE(締切日)-DATEVALUE(本日)+1
関数に詳しい人なら、締切日までの日数を得るにはDATEIFを思い出すかもしれません。
しかし、DATEIFは本日が締切日を過ぎたときはエラーとなります。
今回は締切日がいくつもありますから、ずっとエラーがでるのもなんですし採用しませんでした。
この計算式だと締切日を過ぎたら-1日です。締切日はまだ受付日なので、締切日の翌日で受付け終了なので、+1日です。
追記) 関数Nを調べましたら、DATEVALUEでなくNでもよいことが分かりました。
受付終了までの日数=N(締切日 - 本日) + 1
トリガーに追加が必要
今のトリガーの設定ではupdateItemsが実行されるのはフォーム送信時だけです。
これだと締切日を過ぎても送信が行われなければ、締切日を過ぎた選択肢の申し込みができてしまいます。
これを解決するには、少し面倒ですが、トリガーにフォーム送信時だけでなく時間主導型も追加する必要があります。
トリガーの追加は次のようにします。
フォームからスクリプトエディタを選択します。
トリガーを追加します。
「イベントのソースの選択」に「 時間主導型」を選択します。
「時間ベースのトリガーのタイプの選択」に「 日付ベースのタイマー」、
「時刻を選択」に「 午前0時~1時」を選択します。
実行(回答)
実行(プレビュー)します。
時短のため定員数は、セミナーの各部とも5名にしてあります。
回答を繰り返した後、テストのため締切日を前日にしました。
結果
残数と受付終了までの日数がゼロになった選択肢の項目が消えました。
受付け終了と残席数も表示されています。
全ての選択肢の項目が定員に達するか締切日を過ぎるかすると、自動で回答の受付けが終了します。
※実際にはトリガー(日付ベースのタイマー)でのテストも必要でしょうが、ここでは割愛させていたただきました。後日報告できると思います。
おわりに
いかがでしょうか。
この方法ですと申込み締切りを選択肢毎に設けることができて、フォーム作成の幅が広がるのではないでしょうか。
申込み開始日を設けてみるのも良いかもしれません。簡単にできそうですね。
それではまた、
コメント