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

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

ただいまの
回答率

90.36%

  • JavaScript

    18602questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Google Apps Script

    1069questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google

    721questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Googleフォームで動的なフォームを作りたい

解決済

回答 2

投稿

  • 評価
  • クリップ 4
  • VIEW 10K+

Crew

score 9

前提・実現したいこと

Googleフォーム上でGASを用いて動的なフォームを作りたいのですが、初心者ゆえになかなかうまくできません。ご指導をお願いいたします。

実装したいことは、以下の通りです。

  1. 参加人数を入力してもらう。
  2. 入力された人数分の氏名入力欄を表示する。
  3. (入力されたデータはGoogleフォームの標準機能でのスプレッドシートで集計したい)

現在、添付したコードによって解答欄を増減させられることは確認しています。

不明点

  • Googleフォームでのスクリプトのトリガーが、起動時/送信時しかなく、「人数の入力~回答の送信」の間に以下のスクリプトを実行する方法が分からない

よろしくお願いいたします。

ソースコード

function Dynamic(e) {
  var responses = e.response.getItemResponses();
  var form = FormApp.getActiveForm();

  for (var i = 0; i < responses.length; i++) {
    var itemResponse = responses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();

    if (question == "ソロチーム数"){    
      for (var j = 0; j < answer; j++) {
        var item = form.addTextItem();
         item.setTitle((j+1) + "人目のお名前");
      }

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • jinshan

    2018/02/19 09:44

    kei344さんの回答で解決されたようですね。斜め読みですが、Googleフォームを使用せず、動的HTMLでgetでGASにデータを渡して課題解決したという感じですか?

    キャンセル

  • Crew

    2018/02/19 20:41 編集

    初めての利用だったため解決した際にベストアンサーの選定を失念しておりました.先にご回答いただいたのがkei344様だったため,jinshan様には申し訳ありませんがそちらをベストアンサーにさせていただきました.解決方法としては,依頼主に動的に確保できない旨を伝えたところ,「x人以上になることはないだろうから最大人数をx人で決め打ちしてもらっていい」とのことだったので枠を元から余分に用意し,スプレッドシート側で入力数と申請人数を示し合わせる形で行いました.お二方とも大変参考になりましたので,またの機会があれば動的HTMLでの作成にも挑戦してみたいと考えております.回答ありがとうございました.

    キャンセル

  • jinshan

    2018/02/21 09:41

    ベストアンサーの件はお気になさらないでください。質問から実際に解決に至った方法まで残しておくことに意義があると思ってます

    キャンセル

回答 2

+3

私がフォームを使用した限り、トリガーの「起動時」は編集者の起動時だったかと記憶しているので、実質的に使用できません。

やりたいことの実現方法として、こういう方法はどうですか?
人数指定部分をプルダウンの単独セクションにして、
1人用、2人用、3人用、4人用…をそれぞれ事前に別セクションを用意しておいて、
プルダウンの選択内容によって、飛ぶ先のセクションを変える設定をしておく。
静的フォームによる疑似動的という感じです。

最終的にスプレッドシート側は、値が入るセルは違うところに入ってしまいますが、スプレッドシート側のスクリプトで別行を用意し、どうにでも編集加工できるかと思います。
フォームでメール送信などを考えている場合も、スクリプトで同一配列格納なんかで対応できると思います。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+2

Googleフォームではそこまで動的な処理はできません。フォームの書き換えなどをGoogle Apps Scriptで行うこともできますが、状況に合わせて項目を変えるなどを実現するのであれば、下記の様な方法を使うといいと思います。

【【短いコードで色々出来る】Google Apps Scriptでスプレッドシートと連携した無料Ajaxフォームの作り方※サンプル付き【自動返信メールもあるよ】 - Qiita】
http://qiita.com/snowsunny/items/56a85c63598dcfb1b06e

フォーム作成部分がとても癖があって(GAS独自仕様みたいなもの)たいへんですが、がんばってみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • JavaScript

    18602questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Google Apps Script

    1069questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google

    721questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。