Googleフォームの回答をGASで自動で別シートに振り分ける方法

Googleフォームでお問合せやアンケートを集計していると、「回答の内容(部署やお問い合わせ種別)ごとにシートを分けて管理したい」と思ったことはありませんか?

手動でコピー&ペーストして振り分けるのは時間がかかりますし、転記ミスの原因にもなります。

そこで活躍するのがGAS(Google Apps Script)です。 GASを使えば、Googleフォームから回答が送信された瞬間に、指定した選択肢に応じて別シートへ自動で振り分けて転記する仕組みを簡単に構築できます。

この記事では、プログラミング初心者の方でもできるように、コピペで使えるコードと詳しい設定手順をわかりやすく解説します。

目次

今回作成する自動振り分けの仕組み

今回は例として、以下のような「お問い合せフォーム」を作成し、お問い合わせ種別に応じて回答を別シートに自動振り分けします。

  • フォームの質問:
    1. メールアドレス
    2. お名前
    3. お問い合わせ種別(ラジオボタン:お見積り / ご質問 / その他)
    4. お問い合わせ内容
  • 振り分け先:
    • 「お見積り」を選択 ➔ 「見積シート」へ自動転記
    • 「ご質問」を選択 ➔ 「質問シート」へ自動転記
    • 「その他」を選択 ➔ 「その他シート」へ自動転記

STEP 1:Googleフォームとスプレッドシートの準備

まずはベースとなるフォームとスプレッドシートを用意します。

  1. Googleフォームを作成する 質問項目を作成します。振り分けの基準となる質問(例:お問い合わせ種別)の選択肢の表記を覚えておいてください。
  2. 回答の連携先スプレッドシートを作成する フォームの「回答」タブを開き、「スプレッドシートにリンク」をクリックして連携します。自動的に「フォームの回答 1」というシートが生成されます。
  3. 振り分け先のシートを追加する スプレッドシートの左下の「+」ボタンをクリックし、振り分け先となるシート(例:見積シート、質問シート、その他シート)をあらかじめ作成しておきます。 ※1行目にヘッダー(項目名)を入れておくと見やすくなります。

STEP 2:GASのエディタを開く

スプレッドシート側からGASを起動します。

  1. スプレッドシートの上部メニューから 「拡張機能」 ➔ 「Apps Script」 をクリックします。
  2. スクリプトエディタが開いたら、最初から入っている function myFunction() {...} をすべて削除して空にします。

STEP 3:GASコードをコピペして貼り付ける

以下のコードをコピーして、Apps Scriptのエディタに貼り付けてください。

function autoDistributeFormAnswers(e) {
  // イベントオブジェクトが存在しない場合は処理を中断(手動実行時のエラー防止)
  if (!e) {
    Logger.log("この関数はフォーム送信時のトリガーで実行してください。");
    return;
  }

  // アクティブなスプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  
  // フォームから送信された回答データを取得
  var responses = e.values; 
  // e.values[0]: タイムスタンプ
  // e.values[1]: メールアドレス
  // e.values[2]: お名前
  // e.values[3]: お問い合わせ種別(振り分け基準)
  // e.values[4]: お問い合わせ内容

  // 振り分け基準となる「お問い合わせ種別」の値を取得(インデックスは0から始まるため3番目)
  var category = responses[3];

  // 振り分け先のシート名を決定
  var targetSheetName = "";
  if (category === "お見積り") {
    targetSheetName = "見積シート";
  } else if (category === "ご質問") {
    targetSheetName = "質問シート";
  } else if (category === "その他") {
    targetSheetName = "その他シート";
  }

  // 対象のシートを取得して行を追加
  if (targetSheetName !== "") {
    var targetSheet = ss.getSheetByName(targetSheetName);
    
    if (targetSheet) {
      // データを指定したシートの最下行に追加
      targetSheet.appendRow(responses);
    } else {
      Logger.log("指定されたシート「" + targetSheetName + "」が見つかりませんでした。");
    }
  }
}

コードの解説・ポイント

  • e.values:フォームから送信された回答データが配列(順番に並んだリスト)として入っています。
    • e.values[0] = タイムスタンプ
    • e.values[1] = 1番目の質問(例:メールアドレス)
    • e.values[2] = 2番目の質問(例:お名前)
    • e.values[3] = 3番目の質問(例:お問い合わせ種別)
  • category === "お見積り":フォームの回答内容と一致するか判定しています。フォーム上の文字と1文字でも違うと正しく動きませんので注意してください。
  • appendRow(responses):指定したシートの一番下の行に、回答データをそのまま追加します。

コードを貼り付けたら、エディタ上部のフロッピーディスクのアイコン(保存)をクリックして保存します。

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

コードを書いた直後の状態では、フォームが送信されてもプログラムは動きません。「フォームが送信された時にこのプログラムを実行する」という通知設定(トリガー)を行います。

  1. Apps Script画面の左メニューにある時計マークアイコン(トリガー)をクリックします。
  2. 画面右下の 「+ トリガーを追加」 ボタンをクリックします。
  3. 設定画面で以下のように設定します:
    • 実行する関数を選択:autoDistributeFormAnswers
    • 実行するデプロイを選択:Head
    • イベントの源を選択:スプレッドシートから
    • イベントの種類を選択:フォーム送信時 (★ここを必ず変更してください)
  4. 右下の 「保存」 をクリックします。
  5. 途中でGoogleアカウントへのアクセス許可(認証)を求められた場合は、画面の指示に従って「詳細」➔「安全ではないページに移動」➔「許可」の順で進めて承認してください。

STEP 5:動作確認を行う

設定が完了したら、実際にテストしてみましょう。

  1. 作成したGoogleフォームのプレビューを開き、テスト回答を送信します(例:お問い合わせ種別で「お見積り」を選択)。
  2. スプレッドシートを確認し、「フォームの回答 1」に回答が追加されると同時に、「見積シート」にも同じデータが自動追加されていれば成功です!

自分のフォームに合わせてカスタマイズする方法

ご自身のフォームの項目に合わせてコードを調整する際のポイントは2点です。

1. 質問の順番(番号)を合わせる

コード内の responses[3] の数字は、フォームの何番目の回答かを表しています(0から数えます)。

  • responses[0] ➔ タイムスタンプ(自動)
  • responses[1] ➔ 1番目の質問
  • responses[2] ➔ 2番目の質問
  • responses[3] ➔ 3番目の質問

振り分け条件にしたい質問が「2番目」にある場合は、responses[2] に変更してください。

2. 選択肢やシート名を変更する

選択肢が増えた場合は、if 文(条件分岐)を追加します。

if (category === "お見積り") {
    targetSheetName = "見積シート";
  } else if (category === "ご質問") {
    targetSheetName = "質問シート";
  } else if (category === "採用について") { // 選択肢を追加
    targetSheetName = "採用シート";          // 振り分け先のシート名
  } else {
    targetSheetName = "その他シート";
  }

うまく動かない時のチェックリスト

もし別シートにデータが振り分けられない場合は、以下の項目を確認してみてください。

  • シート名や選択肢の文字が完全一致しているか? (例:「お見積り」と「お見積もり」、前後に余計なスペースが入っていないか等)
  • トリガーの「イベントの種類」が「フォーム送信時」になっているか? (デフォルトの「起動時」のままだと動作しません)
  • responses[3] の番号がずれていないか? (フォームの質問順を変更・削除した場合は番号も更新が必要です)

まとめ

GASを活用してGoogleフォームの回答を自動振り分けすることで、業務効率が格段にアップします。

一度トリガーを設定してしまえば、あとは放っておいても指定したシートへ綺麗に整理されてデータが溜まっていきます。部署ごとのタスク割り振りや、問い合わせの種別管理などにぜひ役立ててみてください!

目次