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

スプレッドシートの空白セルを直前の値で埋めたい

A列の空白セルに直前の値を入れたくて書いたコードです スプレッドシートに以下のようなBeforeの表があるとき (A列に空白セルがある) Before 1 A B 2 エリア 都市 3 東京 新宿 4 渋谷 5 池袋 6 神奈川 横浜 7 川崎 8 相模原 9 千葉 千葉 10 ...