見出し画像

#11 Google フォームに機能を追加する ~アドオンが利用できない組織でも大丈夫!~

以前にも似たような、以下のような投稿をしましたが、

「Google フォーム」によるアンケートについて、

  • 先着〇名までの回答で終了

  • アンケートの開始日時

  • アンケートの終了日時

という機能を簡単に追加できる元ファイルを作成してみました。

アドオンを使うことで、スクリプトを使用しなくても実現できるのかもしれませんが、アドオンの使用を制限されているケースも散見されるので、アドオンを利用せずに上記の機能を実現したいというニーズもあるんじゃないかと思って、作ってみました。

準備

元となる「Google フォーム」は、https://bit.ly/3raCxm1 にアクセスすると、自身の「Google ドライブ」にコピーできます。

サンプルファイルをコピーする
  • 短縮 URL にしているのは、「URL を短くしたい」ということよりも、提供しているファイルは「コピー元」として提供しているものであり、編集してほしくないため、アクセスしている URL をわかりにくくしたかったためです。

  • 前項のような理由もあり、アクセス先の URL を変更して、コピー元となっている「Google フォーム」に直接アクセスするなど、改変行為はおやめください。

  • 自身の「Google ドライブ」にコピーされた「Google フォーム」は、ファイル名の先頭に「コピー」と付いていたり、サンプルの質問が作成されていますが、ファイル名や内容などを変更しても構いません。

先着〇名までの回答で終了

先着〇名までの回答で終了
  1. 「スクリプトエディタ」は、画面右上の三点リーダーをクリックして、「スクリプトエディタ」を選択して開きます。

  2. このスクリプトで変更しなければならないのは一か所だけです。少し下にスクロールした37行目にある数字が、回答を受け付ける最大値となっています。変更するのはこの部分だけです。

  3. トリガーの設定は、画面左側の時計のアイコンをクリックします。右下の「トリガーを追加」をクリックして、次のように設定します。

    • 「実行する関数を選択」 → limitFormAcceptance

    • 「イベントのソースを選択」 → 「フォームから」

    • 「イベントの種類を選択」 → 「フォーム送信時」

  4. トリガーを設定して「保存」ボタンを押すと、以下の記事で説明しているような確認画面が表示されます。GAS のプログラムを実行するために必要な確認です。

////
/// フォームの受付数を制限したいときに設定する関数
//
//  ■トリガーの設定
//    イベントのソースを選択: フォームから
//    イベントの種類を選択 : フォーム送信時
function limitFormAcceptance( ) {
  const iLimit = 5;                       // ここに設定する値が最大回答数
  
  form = FormApp.getActiveForm( );
  res = form.getResponses( );
  
  // 現在の回答数が最大回答数に達していれば、回答の受付を終了する
  if ( res.length >= iLimit ) {
    form.setAcceptingResponses( false );  // 回答数が最大数に達した。
  }
}

アンケートの開始日時、アンケートの終了日時


アンケートの開始日時、アンケートの終了日時

「時間主導型」のトリガーを使えば、フォームの開始日時・終了日時を指定できます。準備でコピーした「Google フォーム」には、開始日時・終了日時を指定するスクリプトも含まれています。

指定した日時に回答の受付を開始させたい場合は openFormAcceptance を、終了させたい場合には closeFormAcceptance を選択します。

////
/// フォームの受付を終了するときに設定する関数
//
//  ■トリガーの設定
//    イベントのソースを選択      : 時間主導型
//    時間ベースのトリガータイプを選択 : 特定の日時
//    日時を入力            : YYYY-MM-DD HH:MM   e.g. 2021-11-09 18:00
function closeFormAcceptance( ) {
  // 回答の受付を停止(false)
  FormApp.getActiveForm( ).setAcceptingResponses( false );
}

////
/// フォームの受付を開始するときに設定する関数
//
//  ■トリガーの設定
//    イベントのソースを選択      : 時間主導型
//    時間ベースのトリガータイプを選択 : 特定の日時
//    日時を入力            : YYYY-MM-DD HH:MM   e.g. 2021-11-09 18:00
function openFormAcceptance( ) {
  // 回答の受付を開始(true)
  FormApp.getActiveForm( ).setAcceptingResponses( true );
}

最後に

最後に、お決まりのフレーズを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • 上記のようにコメントを含めても 50行に満たないスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

アドオンが利用できる環境であれば、必要の内容な簡単なスクリプトですが、何かの役に立てば幸いです。


この記事が気に入ったらサポートをしてみませんか?