GASでGoogleフォームの回答を自動でスプレッドシートに整形する

「Googleフォームで集めた回答をそのまま使おうとしたら、列がバラバラで整形が大変…」そんな悩みを抱えている方は多いのではないでしょうか。この記事では、Google Apps Script(GAS)を使って、Googleフォームの回答を自動でスプレッドシートに整形・加工する仕組みを、コード付きで解説します。

フォームの回答が蓄積するたびに手動でコピー&ペーストしたり、列を並び替えたりする作業は、じつは完全に自動化できます。GASのフォーム送信トリガーを活用すれば、回答が届いた瞬間に自動で整形・別シートへ転記・通知まで行えます。

この記事でできること

  • フォーム送信のたびに自動で回答を整形・加工する
  • 必要な列だけを別シートに転記する
  • 回答内容をフォーマットして担当者にメール通知する
  • 重複回答の自動チェックと除外処理を実装する

事前準備(5分)

以下のものを用意してください。

  • Googleアカウント(無料)
  • Googleフォーム(回答先スプレッドシートと連携済み)
  • Google Apps Script(フォームに紐づくコンテナバインドスクリプト)

フォームの回答先スプレッドシートが未設定の場合は、フォーム編集画面の「回答」タブ → 「スプレッドシートにリンク」から連携してください。

STEP 1:GASエディタを開いてスクリプトを作成する

フォームの回答が蓄積するスプレッドシートを開き、「拡張機能」→「Apps Script」を選択します。エディタが開いたら、デフォルトの関数を削除して以下のコードを貼り付けます。

// フォーム送信時に自動実行される関数
// スプレッドシートのフォームトリガーに設定する
function onFormSubmit(e) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const rawSheet = ss.getSheetByName('フォームの回答 1'); // 回答シート名
  const destSheet = ss.getSheetByName('整形済み') || ss.insertSheet('整形済み');

  // 最新の回答行を取得
  const lastRow = rawSheet.getLastRow();
  const startCol = 1, numRows = 1;
  const rawData = rawSheet.getRange(lastRow, startCol, numRows, rawSheet.getLastColumn()).getValues()[0];

  // ヘッダーを取得
  const headerRow = 1, headerCol = 1, numHeaderRows = 1;
  const headers = rawSheet.getRange(headerRow, headerCol, numHeaderRows, rawSheet.getLastColumn()).getValues()[0];

  // 整形済みシートのヘッダーを初期化(初回のみ)
  if (destSheet.getLastRow() === 0) {
    const destHeaders = ['受付番号', 'タイムスタンプ', '名前', 'メールアドレス', 'お問い合わせ内容', 'ステータス'];
    destSheet.appendRow(destHeaders);
    destSheet.getRange(1, 1, 1, destHeaders.length).setFontWeight('bold');
  }

  // 受付番号を生成(例:REQ-0001)
  const receiptNo = 'REQ-' + String(destSheet.getLastRow()).padStart(4, '0');

  // タイムスタンプを整形(例:2026/04/17 09:30)
  const timestamp = Utilities.formatDate(
    new Date(rawData[0]),
    'Asia/Tokyo',
    'yyyy/MM/dd HH:mm'
  );

  // 回答データをマッピング(ヘッダー名でインデックスを取得)
  const nameIdx = headers.indexOf('名前');
  const emailIdx = headers.indexOf('メールアドレス');
  const contentIdx = headers.indexOf('お問い合わせ内容');

  // 整形したデータを作成
  const formattedRow = [
    receiptNo,
    timestamp,
    nameIdx >= 0 ? rawData[nameIdx] : '',
    emailIdx >= 0 ? rawData[emailIdx] : '',
    contentIdx >= 0 ? rawData[contentIdx] : '',
    '未対応' // デフォルトステータス
  ];

  // 整形済みシートに書き込み
  destSheet.appendRow(formattedRow);

  Logger.log('整形完了: ' + receiptNo);
}

STEP 2:ヘッダー名に合わせてマッピングをカスタマイズする

STEP 1のコードは「名前」「メールアドレス」「お問い合わせ内容」というフォーム質問名を前提にしています。自分のフォームに合わせて変更が必要な場合は、以下の部分を編集してください。

// ▼ ここを自分のフォームの質問名に変更する
const nameIdx = headers.indexOf('氏名');         // 「名前」→「氏名」に変更する例
const emailIdx = headers.indexOf('連絡先メール');  // 「メールアドレス」→「連絡先メール」
const contentIdx = headers.indexOf('相談内容');   // 「お問い合わせ内容」→「相談内容」

質問名が一致しない場合は indexOf が -1 を返し、空文字がセットされます。フォームのヘッダー名を「ログ」で確認したい場合は、以下のコードを追加して実行してください。

function checkHeaders() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const rawSheet = ss.getSheetByName('フォームの回答 1');
  const headerRow = 1, headerCol = 1, numHeaderRows = 1;
  const headers = rawSheet.getRange(headerRow, headerCol, numHeaderRows, rawSheet.getLastColumn()).getValues()[0];
  Logger.log(headers); // ログでヘッダー一覧を確認
}

STEP 3:フォーム送信トリガーを設定する

GASはコードを書いただけでは動きません。フォームが送信されたときに自動実行されるよう「トリガー」を設定します。

  • GASエディタ左側のメニューから「トリガー(時計アイコン)」をクリック
  • 右下の「トリガーを追加」ボタンをクリック
  • 実行する関数:onFormSubmit
  • イベントのソース:「スプレッドシートから」
  • イベントの種類:「フォーム送信時」
  • 「保存」をクリック

初回は権限承認のポップアップが表示されます。「許可」→Googleアカウントを選択→「許可」の順にクリックしてください。

STEP 4:動作確認

テスト用のフォーム回答を送信し、「整形済み」シートに正しく転記されているか確認します。

トラブルシュートチェックリスト

  • 「整形済み」シートが作成されない → シート名の自動生成に失敗している可能性。手動でシートを作成し、シート名が正確に「整形済み」であることを確認
  • ヘッダーが空欄になる → フォームの質問名とコード内の文字列が一致しているか checkHeaders() で確認
  • トリガーが動かない → 権限承認が完了しているか確認。GASのトリガー画面でエラーが出ていないかもチェック
  • 受付番号が重複する → destSheet.getLastRow() は行数を返すので、削除・並び替えをすると重複が起きる。UUIDを使う方法に切り替えること

応用:さらに便利にする拡張アイデア

  • メール自動通知:整形後に GmailApp.sendEmail() で担当者や回答者へ確認メールを自動送信する
  • 重複チェック:メールアドレスを使って既存の回答と重複していないか検索し、重複行にフラグを立てる
  • Slack通知連携:フォーム受付時にSlackのWebhookへPOSTして、チャンネルに即時通知する
  • 条件分岐ルーティング:回答内容に応じて「整形済みA」「整形済みB」など複数シートに振り分ける
  • PDF自動生成:回答内容をテンプレートDocumentに差し込んでPDF化し、Driveに自動保存する

まとめ

GASのフォーム送信トリガーを使えば、Googleフォームの回答を受け取った瞬間に自動整形・転記・通知まで行えます。手作業のコピー&ペーストや列の並び替えから解放され、業務効率が大きく改善します。

  • フォームと連携したスプレッドシートのGASに onFormSubmit 関数を作成する
  • ヘッダー名でインデックスを取得し、必要な列だけを整形して別シートに書き込む
  • トリガーを「フォーム送信時」に設定すれば全自動で動く
  • メール通知・Slack連携・重複チェックなどの拡張も簡単に追加できる

「自社のフォームに合わせてカスタマイズしたい」「もっと複雑な整形ロジックを実装したい」という方は、お気軽にお問い合わせください。

お問い合わせはこちら

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA