Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2025年5月16日金曜日

Google Formsの回答結果をスプレッドシートに書き出したい(setDestination)


Googleフォームの回答結果はフォームの編集画面でも確認できますが

スプレッドシートに書き出すこともできます


今回試したこと
  • アンケートフォームとクイズフォームでスプレッドシートに書き出してみる
  • 書き出すスプレッドシートは新規作成と既存のもので試してみる


アンケートフォームの場合

ここでは Google Formsで単一選択の質問を作りたい で作ったフォームを公開して使います


事前に10件ほど回答を送信しておきます

スプレッドシートに書き出すには

回答の要約画面で「スプレッドシートにリンク」をクリックします


回答の送信先選択画面では2つの選択肢があります
  • 新しいスプレッドシートを作成
  • 既存のスプレッドシートを選択
今回は「新しいスプレッドシートを作成」にして「作成」をクリックします



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




クイズフォームの場合

Google Formsで複数の質問と選択肢の順番を毎回シャッフルしたい(Apps Script) を例に使います


フォームを公開して上記と同じく10件ほど回答を送信しておきます

「スプレッドシートにリンク」をクリックします


今回は「既存のスプレッドシートを選択」して「選択」をクリックしてみます


先ほど新規作成したスプレッドシートを選択して「挿入」をクリックします



先ほどと同じスプレッドシートが開いて「フォームの回答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);
}


Latest post

Google Formsでスプレッドシートに用意した質問を読み込んでみる(クイズ対応)

今回はGoogleフォームでスプレッドシートからデータを読み込んでクイズを作ります 事前に「質問・選択肢・フィードバック」をスプレッドシートに入力して それを読み込んでクイズモードのフォームを作ってみます 事前に用意するスプレッドシートの構造 A列に質問 B列に選択肢 先頭が正解...