Googleフォームの回答結果はフォームの編集画面でも確認できますが
スプレッドシートに書き出すこともできます
今回試したこと
- アンケートフォームとクイズフォームでスプレッドシートに書き出してみる
- 書き出すスプレッドシートは新規作成と既存のもので試してみる
アンケートフォームの場合
ここでは Google Formsで単一選択の質問を作りたい で作ったフォームを公開して使います
事前に10件ほど回答を送信しておきます
スプレッドシートに書き出すには
回答の要約画面で「スプレッドシートにリンク」をクリックします
回答の送信先選択画面では2つの選択肢があります
- 新しいスプレッドシートを作成
- 既存のスプレッドシートを選択
今回は「新しいスプレッドシートを作成」にして「作成」をクリックします

新規のスプレッドシートが作成されて1行ずつ回答が書き込まれます

クイズフォームの場合
Google Formsで複数の質問と選択肢の順番を毎回シャッフルしたい(Apps Script) を例に使います
フォームを公開して上記と同じく10件ほど回答を送信しておきます
「スプレッドシートにリンク」をクリックします
今回は「既存のスプレッドシートを選択」して「選択」をクリックしてみます
先ほど新規作成したスプレッドシートを選択して「挿入」をクリックします


Apps Script で作成する場合
Code.gs
Tips
既存のシートに紐づける場合は
Reference

先ほどと同じスプレッドシートが開いて「フォームの回答2」タブが追加されます
そこにクイズの回答結果が一行ずつ書き込まれます

このように既存のスプレッドシートを紐づけることもできますが
基本的には一つのフォームには一つのスプレッドシートを紐づけることになると思います
Apps Script で作成する場合
以下の Code.gs は Google Formsで単一選択の質問を作りたい で書いたコードをベースに
「新しいスプレッドシートを作成」する
const sheet = SpreadsheetApp.create(formName + ' Responses') と
フォームにスプレッドシートをリンクする
form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet.getId()) を追加したものです
createMultipleChoiceWithSheet() を実行すると
回答を書き込むスプレッドシートが紐づいたフォームが作成されます
Code.gs
function createMultipleChoiceWithSheet() {
const formName = 'Favorite Color Survey';
const description = 'Please tell us your favorite color.';
const title = 'What is your favorite color?';
const color = ['Red', 'Blue', 'Green', 'Yellow'];
// フォームの作成
const form = FormApp.create(formName);
form.setDescription(description);
// 質問の追加
const item = form.addMultipleChoiceItem();
item.setTitle(title)
.setChoiceValues(color)
.showOtherOption(true) // 「その他」を表示
.setRequired(false);
// 回答先スプレッドシートを新規作成
const sheet = SpreadsheetApp.create(formName + ' Responses');
// フォームにスプレッドシートをリンク
form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet.getId());
// フォームの非公開設定
form.setPublished(false); // ※非公開状態にしたい場合(フォームAppの動作には影響しない)
// URL出力
Logger.log('Form Edit URL: ' + form.getEditUrl());
Logger.log('Response Sheet URL: ' + sheet.getUrl());
}
Tips
既存のシートに紐づける場合は
下記 Code.gs の existingSheetUrl の値に対象のスプレッドシートURLを入れて
const existingSheetId = SpreadsheetApp.openByUrl(existingSheetUrl).getId() と
form.setDestination(FormApp.DestinationType.SPREADSHEET, existingSheetId) を追加します
(手動でURLからIDを抽出する場合はopenByIdで直接IDを指定するとコードは短くなる)
Code.gs
function createMultipleChoiceWithExistingSheet() {
const formName = 'Favorite Color Survey';
const description = 'Please tell us your favorite color.';
const title = 'What is your favorite color?';
const color = ['Red', 'Blue', 'Green', 'Yellow'];
const existingSheetUrl = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit';
// フォームの作成
const form = FormApp.create(formName);
form.setDescription(description);
// 質問の追加
const item = form.addMultipleChoiceItem();
item.setTitle(title)
.setChoiceValues(color)
.showOtherOption(true) // 「その他」を表示
.setRequired(false);
// 既存のスプレッドシートID
const existingSheetId = SpreadsheetApp.openByUrl(existingSheetUrl).getId();
// フォームに既存のスプレッドシートをリンク
form.setDestination(FormApp.DestinationType.SPREADSHEET, existingSheetId);
// フォームの非公開設定
form.setPublished(false);
// ログ出力
Logger.log('Form Edit URL: ' + form.getEditUrl());
Logger.log('Linked Response Sheet URL: https://docs.google.com/spreadsheets/d/' + existingSheetId);
}
Reference
フォームの回答の保存先を選択する
setDestination(type, id)
Enum DestinationType
関連記事