Googleフォームでアンケートや申し込みフォームを作成し、回答を収集している方は多いでしょう。収集したデータを別のシートに自動的にコピーできれば、集計作業が格段に効率化されます。しかし、毎回手動でコピー&ペーストするのは時間がかかり、ヒューマンエラーの原因にもなります。Googleスプレッドシートの「Apps Script」を使えば、フォーム送信をトリガーにして自動転記が可能です。この記事では、初心者でもわかるように、具体的なコード例とともに設定手順を丁寧に解説します。
【要点】Apps Scriptでフォーム回答を別シートに自動転記する方法
- Apps Scriptエディタの起動: Googleスプレッドシートのメニューから拡張機能>Apps Scriptを開き、スクリプト作成の準備をします。
- フォーム回答トリガーの設定: 回答が送信されたときにスクリプトが動作するよう、トリガーを設定します。
- 転記用関数の作成とテスト: 回答データを別シートにコピーする関数を記述し、実際にフォームを送信して動作を確認します。
ADVERTISEMENT
目次
Apps Scriptで自動転記ができる仕組みと準備
Apps Scriptは、Googleが提供するJavaScriptベースのスクリプトプラットフォームです。スプレッドシートだけでなく、ドキュメントやGmailなども操作できます。フォーム回答の自動転記では、フォームからスプレッドシートに保存された回答データを読み取り、別のシートに書き込む処理をスクリプトで行います。トリガー機能により、フォーム送信というイベントを検知してスクリプトを実行できるため、完全自動化が実現します。
事前準備として、フォームをスプレッドシートにリンクさせておきます。これはフォーム作成時に「回答」タブから行えます。スプレッドシートが自動生成され、回答が保存されます。また、転記先となる別のシートを同じスプレッドシート内に作成しておきます。シート名は任意ですが、スクリプト内で指定するため、半角英数字が推奨されます。
自動転記スクリプトを作成する手順
- スクリプトエディタを開く
転記元のシート(フォーム回答が自動保存されるシート)を開きます。メニューバーの「拡張機能」をクリックし、「Apps Script」を選択します。新しいタブにスクリプトエディタが表示されます。初期状態では「無題のプロジェクト」となっています。左上の「無題のプロジェクト」をクリックして、任意のプロジェクト名(例:フォーム回答自動転記)に変更すると管理しやすくなります。 - コードを記述する
エディタの初期状態には「myFunction()」という空の関数があります。これを以下のコードで置き換えます。まず、既存のコードをすべて選択して削除し、新しいコードを貼り付けます。function copyFormResponses() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sourceSheet = ss.getSheetByName("フォームの回答1"); // 元シートの名前に変更 var targetSheet = ss.getSheetByName("転記先"); // 転記先シートの名前に変更 var lastRow = sourceSheet.getLastRow(); // 元シートの最終行番号 var data = sourceSheet.getRange(lastRow, 1, 1, sourceSheet.getLastColumn()).getValues(); // 最終行を取得 var targetLastRow = targetSheet.getLastRow(); // 転記先の最終行番号 targetSheet.getRange(targetLastRow+1, 1, 1, data[0].length).setValues(data); // 最終行の次の行に追加 }このコードは、元シートの最後の行(最新の回答)を取得し、転記先シートの最終行の次の行に書き込みます。各行の意味を解説します。1行目で関数名を宣言し、2行目でアクティブなスプレッドシートを取得します。3行目と4行目で元シートと転記先シートを名前で取得します。5行目で元シートの最終行番号を取得し、6行目でその最終行の全列のデータを取得します。7行目で転記先シートの最終行番号を取得し、8行目で取得したデータを転記先の最終行の次の行に書き込みます。
- シート名を確認する
コード内のシート名「フォームの回答1」と「転記先」は、実際のシート名に合わせて変更してください。元シートはデフォルトで「フォームの回答」という名前ですが、フォーム作成時に変更している場合はその名前を指定します。また、スプレッドシートの言語設定によって「フォームの回答1」のように番号が付くことがあります。シート名はスプレッドシート下部のタブに表示されている名前と完全に一致させる必要があります。転記先シートは事前に作成しておき、名前を正確に記述します。シート名に誤りがあるとエラーになりますので注意します。 - プロジェクトを保存する
コードの編集が終わったら、画面上部の「保存」アイコン(フロッピーディスクのマーク)をクリックしてプロジェクトを保存します。キーボードショートカット「Ctrl+S」でも保存できます。 - 関数を手動でテストする
トリガーを設定する前に、関数が正しく動作するか手動でテストします。スクリプトエディタのツールバーにある「実行」ボタン(▶)をクリックし、関数「copyFormResponses」を選択して実行します。初回実行時は権限の承認が求められますので、指示に従って許可します。実行後、転記先シートに、その時点の元シートの最終行がコピーされていることを確認します。もしエラーが発生した場合は、画面下部の「実行ログ」にエラー内容が表示されるので、それを手がかりにコードを修正します。 - トリガーを設定する
スクリプトエディタの左側のメニューから「トリガー」アイコン(時計マーク)をクリックします。下部の「トリガーを追加」ボタンを押し、以下の通り設定します。
・実行する関数: copyFormResponses
・デプロイメント: Head(デフォルトのまま)
・イベントのソース: スプレッドシートから
・イベントの種類: フォーム送信時
・エラー通知設定: 毎回通知を受け取る(推奨)
「保存」をクリックします。 - 権限を承認する
トリガーを保存すると、権限の承認画面が表示されます。「権限を確認」をクリックし、使用するGoogleアカウントを選びます。次に「許可」をクリックして、スクリプトがシートへのアクセス権を持つことを承認します。この操作は最初の1回だけです。承認後、トリガーが有効になります。 - テスト送信で動作確認
実際のフォームを開いて、テスト回答を送信します。送信後、数秒から数十秒待ってから転記先シートを確認します。新しい行が追加され、回答内容がコピーされていれば成功です。もし追加されない場合は、トリガーが正しく設定されているか、コードに誤りがないか再確認します。
自動転記の注意点とよくあるトラブル
シート名のスペルミスによるエラー
コード内のシート名が実際のシート名と1文字でも違うと、getSheetByNameメソッドがnullを返し、後続の処理でエラーが発生します。ダブルクォーテーション内の文字列を何度も確認しましょう。シート名にスペースが含まれる場合も正確に入力します。
トリガーが期待通りに動作しない場合
トリガー設定後、すぐに動作しないことがあります。その場合は、まずスクリプトエディタの「トリガー」ページでトリガーが有効になっているか確認します。もし無効になっている場合は、再度設定し直します。また、エラー通知設定をオンにしておけば、問題発生時にメールで通知を受け取れます。
フォーム回答が転記されない場合の確認ポイント
フォーム送信後に転記されない場合、以下の点を確認します。
・フォームが正しくスプレッドシートにリンクされているか
・スクリプトのトリガーが「フォーム送信時」に設定されているか
・コード内のシート名が正しいか
・スクリプトの実行に必要な権限が承認されているか
大量のフォーム回答がある場合のパフォーマンス
1日に何百もの回答がある場合、このスクリプトは各送信ごとにスプレッドシートにアクセスするため、負荷が大きくなる可能性があります。Google Apps Scriptには1日あたりの実行時間制限(無料アカウントで90分)があるため、大量の回答が予想される場合は、一定時間ごとにまとめて転記するバッチ処理を検討します。もしくは、複数の回答を一度に処理するようにコードを改良します。
転記先シートのデータが重複するケース
このスクリプトは、最新行のみを転記先の最終行の次に追加します。しかし、何らかの理由でスクリプトが複数回実行されると、同じ回答が重複して転記される可能性があります。重複を防ぐには、転記先シートに一意のID列を設け、重複チェックを行うロジックを追加するとよいでしょう。
ADVERTISEMENT
手動コピーとApps Script自動転記の比較
| 項目 | 手動コピー | Apps Script自動転記 |
|---|---|---|
| 所要時間 | 回答ごとに数分 | 設定後はゼロ |
| ミス発生率 | 高い | 極めて低い |
| 初期設定の手間 | 不要 | 初回のみ30分程度 |
| データの一貫性 | ヒューマンエラーあり | プログラムで保証 |
| 応用のしやすさ | 制限あり | 加工・結合など自由自在 |
| コスト | 人件費のみ | 無料(制限内) |
まとめ
この記事では、Googleフォームの回答をApps Scriptを使って別シートに自動転記する方法を詳しく解説しました。設定は、スクリプトエディタにコードを貼り付け、トリガーを設定するだけの簡単な手順です。一度設定すれば、以降の回答は自動で転記されるため、手作業の手間とヒューマンエラーを大幅に減らせます。また、コードをカスタマイズすれば、特定の条件でフィルタリングしたり、他のスプレッドシートに転記したりと、応用範囲も広がります。ぜひ、実際のフォーム管理に活用してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
