Googleフォームの回答をスプレッドシートに自動集計する方法

フォームの回答が届くたびにコピペ作業をしているなら、その時間は今日でなくせます。この記事を読み終えると、回答が送信された瞬間にスプレッドシートへ自動で集計される仕組みを自分で作れるようになります。必要なのはGoogleアカウントだけです。

目次

何が自動になるの?仕組みを30秒で理解する

今回使うのは Google Apps Script(GAS) という、Googleが無料で提供しているプログラムの仕組みです。難しそうに聞こえますが、コードはこの記事にあるものをそのまま貼り付けるだけなので、プログラミングの知識は不要です。

動く流れはシンプルです。

  1. 誰かがGoogleフォームに回答を送信する
  2. GASが「フォームが送信されたよ」という合図を受け取る
  3. GASがスプレッドシートの「集計」シートに回答を自動で書き込む

この「合図を受け取る」仕組みのことを トリガー と呼びます。「フォームが送信されたときだけGASを起動する」という条件を設定するイメージです。トリガーの設定もクリックだけで完了します。

仕組みがわかったところで、さっそく準備を確認しましょう。

>
>

PR・広告
🛠 この記事の内容、プロに頼むこともできます
「自分で作る時間がない」ならスキルマーケットのココナラで。業務自動化・スクリプト開発の出品者が多数います。

ココナラで探す →

作業を始める前に確認しておくこと

手を動かす前に、2点だけ確認してください。どちらもすでに済んでいれば、すぐ次のセクションに進めます。

① フォームとスプレッドシートが紐づいているか
Googleフォームを開き、上部の「回答」タブをクリックします。右上に緑色のスプレッドシートアイコンがあれば、そこから回答先のスプレッドシートを指定できます。すでに紐づいていれば「スプレッドシートで表示」と表示されているはずです。

② GASエディタの開き方
紐づけたスプレッドシートを開き、メニューの「拡張機能」→「Apps Script」をクリックするとGASのエディタ画面が開きます。ここにコードを貼り付けていきます。

準備が整ったら、いよいよ実際に動かしてみましょう。

実際にコードを貼り付けて動かしてみる

Step1から順に進めれば、最後にはフォーム送信と同時に集計シートが更新される状態になります。一つひとつは難しくありません。

Step1: フォームとスプレッドシートを紐づける

Googleフォームを開き、「回答」タブをクリックします。右上のスプレッドシートアイコン(緑色)をクリックし、「新しいスプレッドシートを作成」または「既存のスプレッドシートを選択」を選んで回答先を指定してください。

これでフォームの回答データがスプレッドシートに流れ込む準備ができました。

Step2: GASエディタを開く

紐づけたスプレッドシートを開き、メニューの「拡張機能」→「Apps Script」を選びます。新しいタブでGASのエディタ画面が開きます。

最初から function myFunction() {} というコードが入っていますが、これは全部削除してください。次のステップで別のコードを貼り付けます。

Step3: コードを貼り付けて保存する

エディタが空になったら、以下の2つのコードをまとめて貼り付けます。上から順にそのままコピーしてください。

フォーム送信トリガーで回答を集計シートに追記するスクリプト

Googleフォームの送信イベントを受け取り、回答内容を「集計」シートの末尾に自動追記します。

// フォーム送信時に自動実行される関数(トリガーに登録する)
function onFormSubmit(e) {
  const SHEET_NAME = "集計"; // 書き込み先シート名

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = getOrCreateSheet(ss, SHEET_NAME);

  // フォームの回答を配列で取得(タイムスタンプ + 各質問の回答)
  const responses = e.values; // ["2024/01/15 10:30:00", "回答1", "回答2", ...]

  // シートの末尾行に追記
  sheet.appendRow(responses);
}

集計シートが存在しない場合に自動作成&ヘッダー挿入する初期化処理

「集計」シートがまだない場合でも自動で作成し、1行目にフォームの質問項目をヘッダーとして挿入します。フォームの質問を変えても自動で対応してくれます。

// シートを取得、なければ新規作成してヘッダーを挿入
function getOrCreateSheet(ss, sheetName) {
  let sheet = ss.getSheetByName(sheetName);

  if (!sheet) {
    sheet = ss.insertSheet(sheetName);

    // フォームと連携したスプレッドシートから質問項目を取得
    const formUrl = ss.getFormUrl();
    if (formUrl) {
      const form = FormApp.openByUrl(formUrl);
      const items = form.getItems();

      // ヘッダー行:タイムスタンプ + 各質問タイトル
      const headers = ["タイムスタンプ", ...items.map(item => item.getTitle())];
      sheet.appendRow(headers);

      // ヘッダー行を太字・背景色で装飾
      const headerRange = sheet.getRange(1, 1, 1, headers.length);
      headerRange.setFontWeight("bold").setBackground("#d9ead3");
    }
  }

  return sheet;
}

貼り付けたら、画面上部のフロッピーディスクアイコンをクリック(またはCtrl+S)して保存します。エラーが出なければOKです。

Step4: トリガーを設定する

コードを保存しただけでは、まだ自動では動きません。「フォームが送信されたときに起動する」という指示をGASに伝える必要があります。これがトリガーの設定です。

エディタ左側のメニューにある時計のアイコン「トリガー」をクリックし、右下の「トリガーを追加」ボタンを押します。設定画面で以下のように選択してください。

  • 実行する関数:onFormSubmit
  • イベントのソース:スプレッドシートから
  • イベントの種類:フォーム送信時

設定できたら「保存」をクリックします。

なお、コードの中に setTrigger() という関数も用意しています。トリガーをスクリプトから自動登録したい場合や、重複登録を防ぎたい場合はこちらを1度だけ手動実行する方法もあります。

// ▼ トリガーをスクリプトから自動登録したい場合はこの関数を1度だけ手動実行する
function setTrigger() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 既存の同名トリガーを削除(重複防止)
  ScriptApp.getProjectTriggers().forEach(trigger => {
    if (trigger.getHandlerFunction() === "onFormSubmit") {
      ScriptApp.deleteTrigger(trigger);
    }
  });

  // フォーム送信時に onFormSubmit を起動するトリガーを登録
  ScriptApp.newTrigger("onFormSubmit")
    .forSpreadsheet(ss)
    .onFormSubmit()
    .create();

  Logger.log("トリガーを登録しました");
}

Step5: Googleアカウントの承認を行う

トリガーを保存すると、「このアプリはGoogleアカウントへのアクセスを求めています」という承認ダイアログが表示されます。これは怪しいものではなく、あなた自身のスクリプトがあなた自身のスプレッドシートを操作するための許可です。

「詳細」→「〇〇(プロジェクト名)に移動」→「許可」の順にクリックすれば完了です。

Step6: テスト送信して動作を確認する

設定が終わったら、実際にフォームをプレビューで開いてテスト回答を送信してみてください。スプレッドシートの「集計」シートに新しい行が追加されていれば成功です。

テストが不安な場合は、GASエディタで以下のテスト関数を実行する方法もあります。ダミーデータで動作を確かめられます。

// テスト用:フォーム送信イベントをダミーデータで模擬実行
function testOnFormSubmit() {
  const dummyEvent = {
    values: [
      new Date().toLocaleString("ja-JP"), // タイムスタンプ
      "テスト太郎",                        // 質問1の回答
      "test@example.com",                 // 質問2の回答
      "お問い合わせ内容のテスト"            // 質問3の回答
    ]
  };

  onFormSubmit(dummyEvent);
  Logger.log("テスト送信完了 → 集計シートを確認してください");
}

エラーが出た場合は、エディタ左メニューの「実行数」をクリックすると実行ログが確認できます。エラーメッセージをそのままコピーして検索すると、ほとんどのケースで解決策が見つかります。

ちゃんと動いている?確認方法とよくある次の一手

集計シートに行が追加されることを確認できたら、自動転記の仕組みは完成です。ここからは「もう一歩進めたい」という場合の話をします。

転記されたデータをそのまま集計表にしたい場合は、別のシートに COUNTIFSUMIF 関数を組み合わせるのがおすすめです。「集計」シートのデータを参照するように関数を設定しておけば、新しい回答が追記されるたびに集計表の数字も自動で更新されます。

たとえば参加可否のアンケートなら、「参加」と回答した人数を =COUNTIF(集計!C:C,"参加") のように書くだけです。転記と同時に集計まで終わる状態になります。

GASを使った自動化の応用例が気になった方は、こちらも参考にしてみてください。
→ GASでスプレッドシートを自動化しよう!5ステップの手順から導入事例まで徹底解説

また、より詳しい実装パターンを知りたい方はこちらも参考になります。
→ GASでGoogleフォームの回答を自動集計するアプリの解説|シンギュラリティ・ラボ
→ Googleフォームをスプレッドシートに自動集計して仕事を楽に!手順を徹底解説 | Jicoo

ハナの所見

今回の仕組みは、GASの中でも最もシンプルな部類に入ります。コードを貼り付けてトリガーを設定するだけで、毎週1〜2時間かかっていた作業がゼロになります。

「もっと複雑なことをしたい」「他の業務にも応用したい」と思ったら、GASをもう少し体系的に学ぶのが近道です。以下の書籍や講座は、プログラミング未経験でも読み進められると評判で、私もよく参考にしています。

「自分でコードを書くのは難しそう」「もっと複雑な自動化を誰かに頼みたい」という場合は、GASの外注という選択肢もあります。
GAS外注で業務自動化を実現!依頼先の選び方と発注手順を完全解説

今回の自動化をきっかけに、他の繰り返し作業にも目を向けてみると、意外と自動化できるものが見つかりますよ。
→ 業務効率化に役立つ自動化アイディア10選と実践方法【今すぐ使える】

まずは今日、テスト送信を一回やってみてください。「動いた」という体験が、次の一歩を軽くしてくれます。

つまずいたときは

❌ トリガーを設定したのに集計シートに何も書き込まれない

✅ スクリプトエディタの「実行数」ログを開いてエラー内容を確認する。多くの場合、シート名がコード内の指定と一致していないことが原因なので、コード内のシート名を実際のシート名に合わせて修正する。

❌ 承認画面に「このアプリはGoogleで確認されていません」と表示される

✅ 「詳細」をクリックし「(プロジェクト名)に移動」を選んで「許可」を押す。これは自分で作ったスクリプトを自分のアカウントで動かす際に表示される通常の警告であり、安全に進められる。

❌ 回答が集計シートに重複して書き込まれる

✅ トリガーが複数登録されている可能性がある。エディタの「トリガー」画面を開き、同じ関数に対するトリガーが2つ以上あれば古い方を削除する。

❌ 日本語の回答が文字化けして表示される

✅ スプレッドシート自体の文字化けではなくログ表示の問題であることが多い。実際のセルの値を直接確認し、問題なければ気にしなくてよい。



>

>
>
>

白米元気

白米元気 | LLM Oops

コピペ・転記・集計といった毎日の手作業は、AIに丸ごと任せられます。このサイト自体、非エンジニアの私が作った“AI社員”7体が、記事執筆から案件対応まで24時間自動で回しています。同じ仕組みを、あなたの業務に。

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

この記事を書いた人

はじめまして、「白米元気」と申します。

ノースキルで副業をスタートし、2ヶ月で月10万円を達成。
その後も毎日ChatGPTとにらめっこしながら、
「どうやったら仕組みで稼げるのか?」を考え続けてきました。

そんな中出会ったのが「LLM無職」です。
AIと仕組みを作り、AIに仕事をさせる。
副業や働き方そのものを実験していく——そんな挑戦をしています。

このブログでは、わたしのLLM無職への道のりの途中で
AIを活用した具体的な方法や工夫、日々の実践内容を紹介。
ときどき家族の話もまじえながら、
読んでくれた方が「なんかおもしろそう!」と思えるような、
リアルで実験的な情報をお届けしていきます。

コメント

コメントする

目次