おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

Googleフォームで回答数と回答された合算を表示する方法

前回も似たような話題を取り上げたのですが、Googleフォームを使って回答数を表示させる方法です。

opiyotan.hatenablog.com

ざっくり手順紹介

  1. 数値を入れる項目を作成
  2. スクリプトエディタを起動する
  3. 入力された数をカウントして説明欄に表示するスクリプト作成
  4. トリガーを設定

スクリプト部分はこんな感じですね。

form.setDescription('申し込んだ子どもの数: ' + sum_child_count + '人'); 

本当にコレだけなんですが、これじゃ分からないのでもう少しだけ細かく。

回答された数を表示する

単純に回答された数を表示するだけであれば、非常に簡単です。

function resultCount() {
  resultCount = 0;
  
  var form = FormApp.getActiveForm(); //アクティブフォームを取得
  resultCount = form.getResponses().length; // 全回答内容を取得
  
  // 説明欄に申し込み済み子供の数を表示する
  form.setDescription('申込まれた数: ' + resultCount + '人'); 
}

Googleフォームで申込まれた件数を表示する画像
Googleフォームで申込まれた件数を表示する画像
これで実行すると

めちゃくちゃ簡単ですね。

アンケート項目の数値を合算した数を表示する

今回僕がやってたのが、まさにこれなんですが少し複雑になります。

ですが、やってることは上と同じです。

function myFunction() {
  //子どもの数上限を設定
  var LIMIT_COUNT = 4;
  sumChildCount = 0;
  
  var form = FormApp.getActiveForm(); //アクティブフォームを取得
  var formResponses = form.getResponses(); // 全回答内容を取得

  for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i]; // 回答ひとつ分を取得
   var itemResponses = formResponse.getItemResponses(); // 質問項目を取得
    
   for (var j = 0; j < itemResponses.length; j++) { // 回答内容をひとつずつチェック
     var itemResponse = itemResponses[j];
     var question = itemResponse.getItem().getTitle();
     var answer = itemResponse.getResponse();
     
     // 申込み数カウント
     if( question == '子どもの数' ){
       sumChildCount += Number(answer);
     }
    }
  }
  
  // 説明欄に申し込み済み子供の数を表示する
  form.setDescription('申し込んだ子どもの数: ' + sumChildCount + '人'); 
}

申込まれた子供の数を表示する画像
申込まれた子供の数を表示する画像

ざっと説明すると、さっきのと違うのが回答数ではなくて子供の数はに答えてくれた総数を表示している点ですね。

なので、回答された子供の数を見つけ出して変数に合算して行ってる感じです。

for (var i = 0; i < formResponses.length; i++) {

全ての回答内容を先ずは取得して、for文でグルグル回します

for (var j = 0; j < itemResponses.length; j++) { // 回答内容をひとつずつチェック

1件の回答に対する全ての項目を更にグルグル回します

var question = itemResponse.getItem().getTitle();

項目のタイトルを取得します

var answer = itemResponse.getResponse();

回答された数を取得します

if( question == '子どもの数' ){
  sumChildCount += Number(answer);
}

さっき取得したタイトルを使って条件文を作り、そこに回答された数を合算していく処理です。

あとは、説明欄に合算した値を渡してあげれば出来上がりーです。

まとめ

結構色々できるなーってのが正直、面白いですね。

だけど意外と情報が少ないので、ハマると結構苦労します。

今ハマっているがTwitterでも呟いちゃったんですが

単純な回答数ならばアドオン「formLimiter」とかで対処できそうなのですが、今回みたいにGAS側で数を計算してその結果から判断するみたいなことができないのかな〜と。

知っている方がいれば是非!教えていただけると嬉しいです。

ということで話が少し脱線しましたが、以上でございます。