Googleフォームの回答はスプレッドシートに自動的に記録されますが、編集用と原本の2つのスプレッドシートを作成し、リアルタイムで更新されるようにする方法はあるのでしょうか?本記事では、Googleフォームの仕様と、複数のスプレッドシートに回答を反映させる方法を解説します。
Googleフォームの「スプレッドシートで表示」の仕様
Googleフォームでは、「スプレッドシートで表示」を選択すると、回答がリアルタイムで反映されるスプレッドシートが作成されます。
仕様のポイント
- Googleフォームの回答は、1つのスプレッドシートにしか直接リンクできない
- 一度リンクしたスプレッドシートを変更すると、以前のスプレッドシートへの更新は停止する
- 新しいスプレッドシートを作成する場合は、手動でデータをコピーするか、自動転送の設定が必要
そのため、リアルタイムで2つのスプレッドシートに同じデータを反映させるには、GoogleスクリプトやIMPORTRANGE関数を活用する必要があります。
方法1:IMPORTRANGE関数を使用する
IMPORTRANGE関数を使用すると、Googleフォームとリンクされたスプレッドシートの内容を、別のスプレッドシートにリアルタイムで同期できます。
手順
- Googleフォームとリンクされたスプレッドシート(元データ)を開く
- 新しいスプレッドシートを作成
- 新しいスプレッドシートのA1セルに以下の関数を入力
=IMPORTRANGE("元のスプレッドシートのURL", "フォームの回答1!A:Z")
この関数は、元のスプレッドシートの「フォームの回答1」シートのA列からZ列までのデータを、新しいスプレッドシートにリアルタイムでコピーします。
注意点
- 初回使用時に「アクセスを許可する」ボタンが表示されるので、承認が必要
- 元のスプレッドシートに変更が加わるたびに、自動的にデータが更新される
方法2:Google Apps Scriptを使用する
IMPORTRANGE関数ではなく、Google Apps Scriptを使うことで、フォームの回答が追加されるたびに、複数のスプレッドシートに自動転送することも可能です。
手順
- Googleフォームとリンクされたスプレッドシートを開く
- 「拡張機能」→「Apps Script」を選択
- 以下のスクリプトを入力
function copyToNewSheet(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("フォームの回答1");
var newSheet = SpreadsheetApp.openById("新しいスプレッドシートのID").getSheetByName("Sheet1");
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var data = sheet.getRange(lastRow, 1, 1, lastColumn).getValues();
newSheet.appendRow(data[0]);
}
スクリプトの動作
- フォームに新しい回答が追加されると、自動で新しいスプレッドシートにもコピー
- 元のデータを変更しても、新しいシートには影響しない
トリガーの設定
このスクリプトを実行するためには、Google Apps Scriptの「トリガー」を設定する必要があります。
- Apps Scriptの「トリガー」を開く
- 「新しいトリガーを追加」
- 関数「copyToNewSheet」を選択
- イベントの種類「フォーム送信時」を選択
- 「保存」をクリック
これにより、Googleフォームに新しい回答が追加されるたびに、別のスプレッドシートに自動でコピーされます。
まとめ:Googleフォームの回答をリアルタイムで複数のスプレッドシートに反映する
Googleフォームの回答を編集用と原本の2つのスプレッドシートで管理したい場合、以下の方法が有効です。
- IMPORTRANGE関数を使う(簡単な方法・元データと同期)
- Google Apps Scriptを使う(よりカスタマイズ可能・元データを編集しても影響を受けない)
この方法を活用することで、回答の編集をしても元データを保持しつつ、リアルタイムの更新を管理できます。
コメント