Googleフォーム回答受付を一括管理|GASでスプレッドシートに一覧表示

Googleフォームを複数運用していて、「今どのフォームが受付中か分からない」「それぞれの回答状況をいちいち確認するのが面倒」…と感じることはありませんか?
アンケートや申込受付のフォームが増えてくると管理が大変になることもあります。
そんな時に便利なのが、Google Apps Script(GAS)でフォーム回答状況をスプレッドシートに自動で一覧化する方法です。
また、フォーム作成日が新しい順で自動出力されるので最新のフォーム管理にも役立ちます。
この記事では、すぐに実践できるGoogle Apps Script(GAS)のサンプルスクリプトと使い方をご紹介します。
完成イメージ

- どのフォームが現在受付中か、停止しているかを一目で把握できる
- 新しいフォームが追加されたときも、表を更新するだけで最新の状態を管理できる
- タイトルはリンク付きで、クリックすればすぐフォーム編集画面にアクセス可能
申込フォームやアンケートフォームを多数扱う際に活用すると便利です。
フォームタイトルは編集画面へのハイパーリンクになっているので管理や修正もカンタンにできます。
今回作成したテンプレートはこちら
手順

新規でスプレッドシートを作成します。

セルA3に「検索フォルダ」などヘッダーを入力します。
セルB3に「マイドライブ」または取得したいフォルダ名を入力してください。
4行目は空白、5行目に「No/タイトル/状態/回答数/作成日」の見出しが自動で入ります。
(6行目以降に検索結果が出力されます)

上部メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function listForms() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var searchType = sheet.getRange("B3").getValue();
// 検索するフォルダを決定
var folder;
if (searchType === "マイドライブ") {
folder = DriveApp.getRootFolder();
} else {
var folders = DriveApp.getFoldersByName(searchType);
if (folders.hasNext()) {
folder = folders.next();
} else {
sheet.getRange(6, 2).setValue("指定したフォルダが見つかりません");
return;
}
}
// 5行目にヘッダーをセット
sheet.getRange(5, 1, 1, 5).setValues([["No", "タイトル", "状態", "回答数", "作成日"]]);
// 6行目以降の出力クリア
var lastRow = sheet.getLastRow();
if (lastRow > 5) {
sheet.getRange(6, 1, lastRow - 5, 5).clearContent();
}
// Googleフォーム一覧を一時配列に格納
var files = folder.getFilesByType(MimeType.GOOGLE_FORMS);
var formsArray = [];
while (files.hasNext()) {
var file = files.next();
var id = file.getId();
var url = "https://docs.google.com/forms/d/" + id + "/edit";
try {
var form = FormApp.openById(id);
var title = form.getTitle();
var status = form.isAcceptingResponses() ? "受付中" : "停止中";
var responseCount = form.getResponses().length;
var createdDate = file.getDateCreated();
var createdDateStr = Utilities.formatDate(createdDate, Session.getScriptTimeZone(), "yyyy/MM/dd");
formsArray.push({
title: title,
url: url,
status: status,
responseCount: responseCount,
createdDate: createdDate,
createdDateStr: createdDateStr
});
} catch (e) {
formsArray.push({
title: "取得エラー",
url: "",
status: "",
responseCount: "",
createdDate: new Date(0), // 最古日付で並びにくく
createdDateStr: ""
});
}
}
// 作成日(createdDate)で降順ソート
formsArray.sort(function(a, b) {
return b.createdDate - a.createdDate;
});
// ソート済みデータをシートに出力
for (var i = 0; i < formsArray.length; i++) {
var row = 6 + i;
var form = formsArray[i];
sheet.getRange(row, 1).setValue(i + 1);
if (form.url && form.title !== "取得エラー") {
sheet.getRange(row, 2).setFormula('=HYPERLINK("' + form.url + '","' + form.title + '")');
} else {
sheet.getRange(row, 2).setValue(form.title);
}
sheet.getRange(row, 3).setValue(form.status);
sheet.getRange(row, 4).setValue(form.responseCount);
sheet.getRange(row, 5).setValue(form.createdDateStr);
}
// フォームが1件も見つからない場合
if (formsArray.length === 0) {
sheet.getRange(6, 2).setValue("フォームが見つかりませんでした");
}
}
スクリプトの説明
- B3セルで検索対象のフォルダを取得
-
const searchType = sheet.getRange("B3").getValue();
getRange("B3").getValue()
で、検索したいフォルダ名や「マイドライブ」を取得します。- B3セルに「マイドライブ」や、Googleドライブ上のフォルダ名を入力してください。
- 指定した場所からGoogleフォームファイルを検索
-
let folder; if (searchType === "マイドライブ") { folder = DriveApp.getRootFolder(); } else { const folders = DriveApp.getFoldersByName(searchType); if (folders.hasNext()) { folder = folders.next(); } }
- 「マイドライブ」ならルートフォルダ、それ以外は該当フォルダを指定します。
- フォルダ名は最初に見つかったものが検索対象となります。(同じフォルダ名がある場合)
- Googleフォーム一覧を一時配列に格納
-
const files = folder.getFilesByType(MimeType.GOOGLE_FORMS); const formsArray = []; while (files.hasNext()) { // ファイルごとに情報取得… }
- 指定フォルダ直下のGoogleフォーム(
.gform
)ファイルだけを取得します。 - サブフォルダは検索対象外です。
- 指定フォルダ直下のGoogleフォーム(
- 各フォームの情報を取得し配列に保存
-
const id = file.getId(); const url = "https://docs.google.com/forms/d/" + id + "/edit"; const form = FormApp.openById(id); const title = form.getTitle(); const status = form.isAcceptingResponses() ? "受付中" : "停止中"; const responseCount = form.getResponses().length; const createdDate = file.getDateCreated(); const createdDateStr = Utilities.formatDate(createdDate, Session.getScriptTimeZone(), "yyyy/MM/dd");
- タイトル(リンク付き)、状態(受付中/停止中)、回答数、作成日を取得します。
- 取得できない場合(権限エラーなど)は「取得エラー」となります。
- フォーム作成日で降順ソート
-
formsArray.sort(function(a, b) { return b.createdDate - a.createdDate; });
- フォーム作成日が新しい順(降順)で並べ替えます。
- スプレッドシートへの出力
-
sheet.getRange(row, 2).setFormula('=HYPERLINK("' + url + '","' + title + '")');
- タイトル列には編集画面へのリンクが自動で設定されます。
- 5行目にヘッダー、6行目以降に一覧が出力されます。

スクリプトを書いたら、好きな名前を付けて保存します。
(例:「フォーム受付状況一覧」)

スクリプトを実行すると5行目に自動で見出しが入り、6行目以降にフォームの最新状況が表示されます。
新しいフォームが追加された場合も、再実行するだけで最新の状態に更新されます。

必要に応じてヘッダーを太字にしたり、色付け、「受付中」「停止中」の色付けなどを行います。
注意点
- B3セルに入力する「マイドライブ」やフォルダ名の直下のみが検索対象です。
その下層(サブフォルダ)にあるフォームは検索されませんのでご注意ください。(必要なら拡張も可能) - フォームのオーナー権限がない場合やアクセス権限がない場合は「取得エラー」と表示されます。
- 定期的に自動更新したい場合は、GASのトリガー機能で「毎日」「毎時」なども設定可能です。
さらに自動化したい方へ
フォームの締め切り自動化(指定日時や定員で自動受付停止)を、一覧から一括で管理できる有料テンプレートもご用意しています。
より高度な自動化を実現したい方は、下記の記事もぜひご覧ください。
まとめ
複数のGoogleフォームをスプレッドシートでまとめて管理できると、日々の運用が効率的になります。
作成日順で並ぶので、最新フォームのチェックや運用切り替えもラクになります。
今回のスクリプトを活用してGoogleフォーム管理の手間を減らしてみませんか?
ご質問やカスタマイズ相談も、お気軽にコメント欄・お問い合わせフォームからどうぞ。
弊社では、Google Apps Script(GAS)を活用した業務効率化サポートのほか、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
ぜひお気軽にご相談ください。貴方の業務改善を全力でサポートいたします。
コメント