[GAS]Googleフォームの解答欄にあらかじめ答えを入れておく

アンケート調査や申し込み手続きで回答を入力してもらうのに、Googleフォームは非常に有用だ。スプレッドシートに回答を転写してくれるので、入力された値を集計したり、入力値をもとに何かスクリプトを走らせることもできる。スプレッドシートのGASには、わざわざフォームから送信されたとき用のトリガが用意されている。

フォームを利用者の入力インターフェースにして、スプレッドシートのデータを使って条件分岐したいときに、予め一部の回答が入力された状態のフォームに利用者を誘導したい。

実はけっこう簡単にできる。フォームの回答画面はURLの最後がviewformになっているので、この後ろに?で
解答欄のID=予め入力したい回答
をつけてやればよい。
解答欄のIDを確認する簡単な方法は、Chromeでフォームの回答画面を表示(プレビューでいい)して、解答欄のIDを確認したいテキストボックスなどを右クリックする。次いで検証を押すと画面右側にカラムが表示される。ハイライトされている部分からnameを探す。一般のテキストボックスだとname=”entry.数値”となっている。この “entry.数値” が解答欄のIDである。
nameが描いてある場所がわからない場合は、検証のカラムでCtrl + Fを押してentry.を検索することを勧める。inputタグの中に入っているので、<inputで始まるのも目印になる。

(フォームのURL)/viewform?entry.1234=hoge
というアドレスにアクセスすると、解答欄のIDが entry.1234 である場所に予めhogeと書かれた状態で始まる。
複数の解答欄に予め回答を入れておくには&でつないでいけばいい。
(フォームのURL)/viewform?entry.1234=hoge&entry.5678=fuga

アドレスを加工すればフォームの初期値を指定できることを応用すれば、スプレッドシートのHYPERLINK関数を使って、初期値を入れたフォームへのリンクを張れる。
スプレッドシートの文字列を結合するとき&を使うことを思い出せば、A1セルの値がhogeである場合、ほかのセルに以下のように入力すれば、上で述べた例と同じくnameがentry.1234である解答欄に回答hogeを初期値として設定できる。
=HYPERLINK(” (フォームのURL)/viewform?entry.1234= “&A1,”スプレッドシートに表示される文字列”)
さらに、A2セルにfugaという文字列が入っている場合、上で述べた複数の解答欄に予め回答を入れておく場合を次のように表現することができる。
=HYPERLINK(” (フォームのURL)/viewform?entry.1234= “&A1&”&entry.5678=”&A2,”スプレッドシートに表示される文字列”)

参考
GOOGLEフォームの初期値

これもFormのGASで設定できないものだろうか。

[GAS]Googleフォームの解答欄にあらかじめ答えを入れておく」への7件のフィードバック

  1. もひろー

    参考になります。ありがとうございます。
    複数のセクションに分かれている場合、2ページ目以降の回答はどのように記述したらよろしいでしょうか?

    返信
    1. dekkaino 投稿作成者

      同じように「entry.####=答えの値」で書けます。

      entry.####の####の部分は次の方法で取得できます。

      フォームの編集画面で「送信」の右隣りにある3点ボタンを押します。
      メニューが表示されるので、「事前に入力したURLを取得」をクリックします。

      フォームのプレビューに似た画面が表示されます。これは事前に埋め込む回答を記述するページです。何かしらの回答を各入力欄に入力して最後に「リンクの取得」をクリックしてください。
      こうして取得したURLをよく見ると、「entry.####=答え」が&でつながっているだけだとわかります。

      返信
      1. もひろー

        返信ありがとうございます。

        ご提示いただいた方法を試してみました。
        あらかじめ値が入力されているフォームへのリンクを作成することができました。

        この方法を応用して、フォームのURLの最後をviewformからformResponseに変更し、
        formResponse?entry.#######で自動回答のURLを作成してみました。

        この場合、1つ目のセクションの回答しか送信されないようです。
        複数セクションに分けられているフォームの、自動回答URLを作成したいと考えています。

        ブログ記事の内容とは関係のないところの話になってしまいましたが、
        何か解決策をご存知でしたらご教示いただけるとありがたいです。

        返信
        1. dekkaino 投稿作成者

          この方法を応用して、フォームのURLの最後をviewformからformResponseに変更し、formResponse?entry.#######で自動回答のURLを作成してみました。

          回答を渡す先はformResponseでなくviewformです。
          複数のセクションに分かれるフォームであっても、最初のページviewformに渡します。

          「事前に入力したURLを取得」の画面はご覧になりましたか?
          すべてのセクションが表示され、事前に回答を入力することができます。こうして出力した事前に回答を入力したURLを見ていただいても、あくまでviewformに値を渡す仕組みであることがわかります。

          もし回答に応じて次のセクションを変更するような複雑な動作をする場合は、viewformに渡すパラメータがentryでなくfbzxになります。fbzxの値がentryほど単純でないので、これ以上のことはわかりません

          返信
  2. parukia

    学生です
    iPhoneのショートカットでURL?entry.数字=言葉みたいにしてテキストボックスに予め回答を入れたURLを作りたいのですが、テキストが表示されません…
    日付は何とかidを調べて入れることが出来、またパソコンの方ではテキストも表示されていました。idはあっているはずなのですが、もしかしてスマホでは出来ないのでしょうか?
    こういう系初めてでよく分かりません…

    返信
  3. kenshis

    こんにちは。
    ネットの検索でこちらにたどり着きました。
    複数の設問に事前に登録する件で教えていただけると幸いなのですが、
    現在、Googleフォームの回答の設問1と設問2にあらかじめデータを入れたいと思っています。
    設問1は管理番号
    設問2は回答期限
    スプレットシートのG列にGoogleフォームからあらかじめ取得したURLを入れて
    (http~=までのURL)
    スプレットシートB列に管理番号、F列に回答期限を登録するので
    G列(G5)に以下の関数を入れてURLを生成したいのですがうまくいきません。
    =https://~?usp=pp_url&entry.1xxxxxxxxx=&ENCODEURL($B5).1xxxxxxxxx=&ENCODEURL(FB5)

    記事の内容を見ると、HYPERLINK関数を使うといいということでしたので
    以下の関数で行ってみましたが
    =HYPERLINK(“https://~/viewform?entry.1xxxxxxxxx=”&B5&”entry.1xxxxxxxxx=”&F5&”)
    設問1のところに
    B5entry.1xxxxxxxxx=F5と表示されてしまいます。
    関数をどう作成すればよろしいでしょうか?

    返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください