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

このページにはプロモーションが含まれています。

Googleフォームを複数運用していて、「今どのフォームが受付中か分からない」「それぞれの回答状況をいちいち確認するのが面倒」…と感じることはありませんか?

アンケートや申込受付のフォームが増えてくると管理が大変になることもあります。

そんな時に便利なのが、Google Apps Script(GAS)でフォーム回答状況をスプレッドシートに自動で一覧化する方法です。

また、フォーム作成日が新しい順で自動出力されるので最新のフォーム管理にも役立ちます。

この記事では、すぐに実践できるGoogle Apps Script(GAS)のサンプルスクリプトと使い方をご紹介します。

目次

完成イメージ

  • どのフォームが現在受付中か、停止しているかを一目で把握できる
  • 新しいフォームが追加されたときも、表を更新するだけで最新の状態を管理できる
  • タイトルはリンク付きで、クリックすればすぐフォーム編集画面にアクセス可能

申込フォームやアンケートフォームを多数扱う際に活用すると便利です。

フォームタイトルは編集画面へのハイパーリンクになっているので管理や修正もカンタンにできます。

手順

STEP
スプレッドシートを開く

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

STEP
検索フォルダ名を入力

セルA3に「検索フォルダ」などヘッダーを入力します。

セルB3に「マイドライブ」または取得したいフォルダ名を入力してください。

4行目は空白、5行目に「No/タイトル/状態/回答数/作成日」の見出しが自動で入ります。
 (6行目以降に検索結果が出力されます)

STEP
GASエディタを開く

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

STEP
スクリプトの作成

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)ファイルだけを取得します。
  • サブフォルダは検索対象外です。
各フォームの情報を取得し配列に保存
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行目以降に一覧が出力されます。
STEP
スクリプトを保存

スクリプトを書いたら、好きな名前を付けて保存します。

(例:「フォーム受付状況一覧」)

STEP
スクリプトを実行

スクリプトを実行して、対象フォルダ内のフォーム受付状況を一覧で出力します。

初めてそのスクリプトを実行する場合は権限の承認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
フォーム受付状況を一覧表示

スクリプトを実行すると5行目に自動で見出しが入り、6行目以降にフォームの最新状況が表示されます。

新しいフォームが追加された場合も、再実行するだけで最新の状態に更新されます。

必要に応じてヘッダーを太字にしたり、色付け、「受付中」「停止中」の色付けなどを行います。

注意点

  • B3セルに入力する「マイドライブ」やフォルダ名の直下のみが検索対象です。
    その下層(サブフォルダ)にあるフォームは検索されませんのでご注意ください。(必要なら拡張も可能)
  • フォームのオーナー権限がない場合やアクセス権限がない場合は「取得エラー」と表示されます。
  • 定期的に自動更新したい場合は、GASのトリガー機能で「毎日」「毎時」なども設定可能です。

さらに自動化したい方へ

フォームの締め切り自動化(指定日時や定員で自動受付停止)を、一覧から一括で管理できる有料テンプレートもご用意しています。

より高度な自動化を実現したい方は、下記の記事もぜひご覧ください。

Googleフォームの締め切り自動化テンプレートはこちら

まとめ

複数のGoogleフォームをスプレッドシートでまとめて管理できると、日々の運用が効率的になります。

作成日順で並ぶので、最新フォームのチェックや運用切り替えもラクになります。

今回のスクリプトを活用してGoogleフォーム管理の手間を減らしてみませんか?

ご質問やカスタマイズ相談も、お気軽にコメント欄・お問い合わせフォームからどうぞ。

弊社では、Google Apps Script(GAS)を活用した業務効率化サポートのほか、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

ぜひお気軽にご相談ください。貴方の業務改善を全力でサポートいたします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次