質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

フォームの回答数を取得したい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 570

fal_boy1

score 4

 前提・実現したいこと

GASを使用してフォームの答えをスプレッドシートに保存するスクリプトを作成しています。

 フォームの形式

設問数→ 30問 すべてラジオボタン形式の質問
質問→ ・はい ・いいえの2パターンのみ

 実現したいこと

第(i)問目を、「はい」と答えた人数をカウントしたいと考えています。(i =0~29)

 質問

MultipleChoiceItem クラスにはgetPoints()という関数がありますが、この関数は回答数を取得する関数とは違うのでしょうか?

var items = form.getItems();

for(var i = 0; i < items.length ; i++)
{
    var m_item = items[i].asMultipleChoiceItem(); //MultipleChoiceItemにキャスト
    var score = m_item.getPoints(); //該当の関数. 投票数が返ってくる予定だった
    Logger.log(score); //すべての回答が0.0と出力された
}

 

Formからレスポンスを取得し、全員の回答をfor文でループしカウントするプログラムでは作成することができました。しかし、回答者数(約30名)・設問数(30問)と処理回数が多いため、かなりの実行時間がかかりました。

参考にしたサイトのURL↓
https://yukaobu.wordpress.com/2016/10/23/googleform-2/

質問ごとに得票数をカウントすることを再現することはGoogle Apps Scriptでは不可能なのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

 質問

質問ごとに得票数をカウントすることを再現することはGoogle Apps Scriptでは不可能なのでしょうか?

時間は掛かっているけど可能だと分かっておられるとおり可能です

 現状

Logger.log(score); //すべての回答が0.0と出力された

form.getItems();として取得できるのは、編集で作っている状態の回答項目です。Responseではないので。
フォームの編集画面って、どこにもチェックついてないでしょう?なので0なのだと思います。それのpointを取得してもあまり意味がないです。

 提案(カウントする方法)

GASを使用してフォームの答えをスプレッドシートに保存するスクリプト

という文面からすると、スプレッドシートに答えのリストがあるのですよね?(スクリプトがなくてもデフォルトで集計する機能がありますし、ありますよね?)

スプレッドシートはエクセルみたいなものなので、そこで回答を集計してはどうでしょう?
countifみたいなシート関数が使えるのではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/16 20:52

    遅いということなんですが、例えば↓のような記事があります。
    https://qiita.com/kawahara_hiroyuki/items/463ea2b348080f38a578
    要約的に言うとやりかたによって何倍もの処理の開きがあるということです。30人の30項目は、慣れた人が処理すれば数秒もかからないと思われます。

    キャンセル

  • 2018/11/16 21:20

    実現したいことに書いてあることベースで回答しておりました。
    改めて参考サイトを拝見しました。参考サイトのようなことがしたいなら提案で書いたことは無意味ですね。

    キャンセル

  • 2018/11/19 15:57 編集

    回答ありがとうございます。返信が遅くなり申し訳ありません。
    編集中の回答項目というので、とても納得がいきました。
    コメント頂いたサイトを拝見したことがあり、処理にAPIを叩く回数はできる限り減らしています。
    スプレッドシートの状態を配列に取得してから、すべて配列上で処理を行っていく方針にしているのですが、時間がかかります。もう少し思考が必要ですね... ありがとうございました。

    キャンセル

  • 2018/11/19 17:15

    私に限らず有益な回答を得るためには、ぜひとも"実現したいこと"を"質問本文に"追記・補充していただきたいのですが、「どのタイミング」で「どういう用途」でその集計を利用するのでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る