フォームの回答をスプレッドシートで管理する:確認・集計・対応状況

公開 書いた人 大林 諒

Googleフォームの回答は、フォームの「回答」タブでも見られますが、受付の仕事として回すならスプレッドシートにつなぎます。この記事では、料理教室「サンプル料理教室」の体験レッスン申込フォームを例に、回答の見方、スプレッドシートへのつなぎ方、受付が「連絡済み」「来店」「入会」を付けていく対応状況の作り方、月ごとの集計、締め切りまでを順に書きます。読み終わると、回答シートを壊さずに対応状況を管理でき、質問を変えたり保存先をつなぎ替えたりしたときに何が起きるかも分かります。体験申込のフォームがすでにあり、Google Workspaceの会社のアカウントで編集できることが前提です。フォームの作り方は「Googleフォームの作り方:申込・予約・アンケートを受ける」に書いています。画面の名前と手順は2026年10月時点のものです。

この記事の内容
  1. 先に決めること
  2. 回答の見え方と置き場所の一覧
  3. 回答を確認する
  4. スプレッドシートにつなぐ手順
  5. 回答シートに直接書き込むと起きること
  6. 別シートで対応状況を管理する作り方
  7. 集計する
  8. 回答の締め切りと受付の停止
  9. フォームの質問を後から変えたとき
  10. 応用
  11. できないことと、その代わり
  12. よく詰まるところ
  13. 次にやること

先に決めること

フォームの画面だけで済ませるか、スプレッドシートにつなぐか

感想アンケートのように「集まった結果を眺める」だけなら、フォームの「回答」タブで足ります。満足度の平均や選択肢ごとの割合がグラフで出るので、スプレッドシートにつながなくても困りません。

体験申込のように、1件ずつに「誰が連絡したか」「来たか」「入会したか」を付けていくものは、スプレッドシートにつなぎます。フォームの画面には、回答に印を付けたりメモを書いたりする場所がないからです。

回答シートに人が書き込むか、書き込まないか

ここがこの記事でいちばん大事な判断です。フォームとつないだシート(回答シート)は、フォームが書き込む場所です。そこへ受付が手で列を足したり、並べ替えたりすると、あとで質問を変えたときやつなぎ替えたときにずれます。

サンプル料理教室では、回答シートには人が一切書き込まず、対応状況は別のシートで持つと決めています。少し手間が増えるように見えますが、半年後に質問を1つ足したときに台帳が崩れないのはこちらです。

1件を何で見分けるか

対応状況を別シートで持つなら、回答の1件と対応状況の1行を結び付ける目印が要ります。フォームの回答には「タイムスタンプ」が必ず入り、秒まで記録されます。体験申込の件数なら、タイムスタンプが同じ回答が2件来ることはまずありません。この記事では、回答の並び順とタイムスタンプで1件を見分けます。件数が多い、確実に一意にしたい、という場合はGASで受付番号を振ります(応用の節)。

誰が回答を見られるか

回答には名前・電話番号・メールアドレスが入っています。フォームの編集者はスプレッドシートを開けますし、新しく作ったスプレッドシートにはフォームの共同編集者が自動で入ります。そのあとでフォームの権限を変えても、スプレッドシートの権限は連動しません。外部の人を編集者に入れる前に、両方の共有設定を見直します。

回答の見え方と置き場所の一覧

回答はフォームの中とスプレッドシートの2か所に置けます。それぞれで何ができるかを並べます。

置き場所見え方できることできないこと
フォームの「回答」タブの「概要」質問ごとのグラフと件数全体の傾向を見る・グラフをコピー1件ずつに印やメモを付ける
フォームの「質問」1つの質問への全員の回答「ご要望」の記述を一気に読む他の質問と並べて見る
フォームの「個別」1人分の回答1件ずつ確認・その1件を削除一覧で比べる
回答シート(スプレッドシート)1回答が1行フィルタ・関数・GASで扱う人が書き込むと壊れやすい
対応状況シート(別シート)回答+受付が付けた状況受付の台帳として回す自分で作る必要がある
CSVのダウンロード1回答が1行のファイル他のシステムへ渡す自動で増えない

回答を確認する

フォームの画面で見る

  1. フォームを開き、上部の「回答」タブをクリックします。
  2. 「概要」で、質問ごとのグラフと回答の件数を見ます。
  3. 「質問」に切り替え、上のプルダウンで「ご要望」を選ぶと、その質問の回答だけが並びます。
  4. 「個別」に切り替え、左右の矢印で1件ずつ回答を見ます。

「回答」タブの「概要」は、回答が1件以上あるときだけ表示されます。公開したばかりで回答がないと、表示されないのは正常です。

グラフは右上のコピーのアイコンからコピーして、ドキュメントやスライドに貼れます。月例のミーティング資料に「体験の満足度」を入れるならこれで十分です。

「回答」タブの「概要」で、「教室を知ったきっかけ」の円グラフが出ているところ
「回答」タブの「概要」で、「教室を知ったきっかけ」の円グラフが出ているところ

新しい回答をメールで知る

「回答」タブのその他アイコン(縦の点3つ)から「新しい回答についてのメール通知を受け取る」をオンにします。通知は設定した本人にだけ届きます。受付の2人とも知りたいなら2人ともオンにします。Chatのスペースや info@ のGoogleグループに流したいときは、GASかn8nで別に作ります。

スマホで見る

フォームの回答はスマホのブラウザでも「回答」タブから見られます。ただし、受付が外出先で見るなら、Googleスプレッドシートのアプリで回答シートや対応状況シートを開くほうが見やすくなります。

スプレッドシートにつなぐ手順

新しいスプレッドシートを作ってつなぐ

  1. フォームの「回答」タブを開きます。
  2. その他アイコン(縦の点3つ)から「回答の送信先を選択」を選びます。
  3. 「新しいスプレッドシートを作成」を選び、名前を「体験申込 回答」にします。
  4. 「作成」をクリックします。

スプレッドシートが開き、「フォームの回答 1」というシートに、タイムスタンプ、メールアドレス、質問の順に列が並びます。それまでに届いていた回答も最初から入ります。新しく作ったシートのデータは、自動でテーブルの形式になっています。

できたスプレッドシートは、フォームと同じ共有ドライブの「事務」フォルダへ移します。フォームとスプレッドシートはドライブ上で別のファイルです。片方を消してももう片方は消えません。

既存のスプレッドシートにつなぐ

予約一覧のスプレッドシートがすでにあるなら、そこにつなぐこともできます。

  1. 「回答」タブのその他アイコンから「回答の送信先を選択」を選びます。
  2. 「既存のスプレッドシートを選択」を選び、「選択」をクリックします。
  3. 一覧から「予約一覧」を選びます。

既存のスプレッドシートにつなぐと、その中に「フォームの回答 1」のような新しいシートが足されます。今あるシートの上に書き込まれるわけではありません。前から使っていたシートは、自動ではテーブルの形式になりません。

「回答」タブの「回答の送信先を選択」で「新しいスプレッドシートを作成」を選んだところ
「回答」タブの「回答の送信先を選択」で「新しいスプレッドシートを作成」を選んだところ

リンクを解除する

  1. 「回答」タブのその他アイコンから「フォームのリンクを解除」を選びます。
  2. 確認の画面が出たら、解除を確定します。

解除すると、新しい回答はスプレッドシートに送られなくなります。すでにシートに入っているデータはそのまま残ります。フォーム自体は回答を受け付け続けるので、受付を止めたいなら、リンクの解除ではなく後で書く「回答を受付中」をオフにします。

回答シートに直接書き込むと起きること

回答シートに手で列を足し、そこに「連絡済み」を付けていく作り方は、手軽なのでよく見かけます。動いているうちは問題ありませんが、次のことが起きます。

やったこと起きること
回答シートで並べ替えた並びは変わるが、次の回答は最後の行に足されるので、並びが崩れる
回答シートの行を削除したフォームの中の回答は残る。つなぎ直すと消した行が戻ってくる
回答シートの右に「対応状況」の列を足した質問を足すと、その質問の列が回答の列の並びに挿入され、手で足した列の位置がずれる
回答の値を手で直したフォームの中の回答は元のまま。つなぎ直すと元の値で書き直される
見出しの名前を手で変えた質問のタイトルを変えたときに、フォーム側の名前で上書きされることがある
回答シートを別のファイルにコピーして使ったコピーには新しい回答が入らない

ヘルプには「回答シートに手で書き込んではいけない」とは書いてありません。上の表は、実際に運用していて起きたことをまとめたものです。とくに「質問を足したら対応状況の列が1つ右にずれ、受付が付けた印が別の回答の行に見えた」という事故は、本番の環境で何度か見ています。ずれた列は自分で直すしかなく、どれがどの回答の印だったかを、受付の記憶で戻すことになります。

対応状況の列を回答シートに足すなら、最低限、並べ替えと行の削除をしない、質問を足すときは事前に対応状況の列を退避する、の2つを守ります。それより、次の作り方で別シートに分けたほうが安心です。

別シートで対応状況を管理する作り方

全体の形

回答シートには触らず、同じスプレッドシートに「予約一覧」というシートを作ります。左側に回答を関数で写し、右側に受付が状況を書き込む列を置きます。

列中身入れ方
A受付日時(タイムスタンプ)関数で回答シートから写す
Bお名前関数で写す
C電話番号関数で写す
Dメールアドレス関数で写す
E希望日時関数で写す
F対応状況受付がプルダウンで選ぶ(未対応・連絡済み・来店・入会・不参加)
G担当受付がプルダウンで選ぶ
H確定日時受付が日付で入れる
Iメモ受付が書く

手順

  1. スプレッドシートの下の「+」を押し、新しいシートを作って名前を「予約一覧」にします。
  2. A1セルに次の式を入れます。体験申込の回答シートは、A列がタイムスタンプ、B列がメールアドレス、C列がお名前、E列が電話番号、I列が希望日時です。自分のフォームの並びに合わせて、列の文字は読み替えます。
=QUERY('フォームの回答 1'!A:K, "select A, C, E, B, I where A is not null", 1)
  1. 1行目に見出しが、2行目から回答が並ぶことを確かめます。
  2. F1に「対応状況」、G1に「担当」、H1に「確定日時」、I1に「メモ」と入れます。
  3. F列を選び、「挿入」から「プルダウン」を選びます。
  4. 右側のパネルで、選択肢に「未対応」「連絡済み」「来店」「入会」「不参加」を入れ、「完了」をクリックします。
  5. G列も同じようにプルダウンにし、受付2人の名前を入れます。
  6. H列を選び、「データ」から「データの入力規則」を開いて、条件を「有効な日付」にします。

この式は、受付が電話をかけるときに見る順(お名前・電話番号・メールアドレス・希望日時)に列を入れ替え、フリガナや「教室を知ったきっかけ」のような受付で使わない列を外しています。where A is not null は、まだ回答の入っていない空の行を出さないための条件です。

「予約一覧」シートで、A〜E列が関数で表示され、F列に「未対応」「連絡済み」のプルダウンが付いているところ
「予約一覧」シートで、A〜E列が関数で表示され、F列に「未対応」「連絡済み」のプルダウンが付いているところ

この形が崩れない理由と、崩れる条件

QUERYで写した行の順番は、回答シートの行の順番と同じです。フォームは新しい回答を必ず最後の行に足すので、受付がF〜I列に書いた内容は、いつも同じ回答の横にいます。

崩れるのは、回答シートの行の順番が変わったときだけです。具体的には、回答シートで並べ替えた、行を削除した、途中に行を挿入した、の3つです。そこで回答シートは、受付が誤って触らないように保護します。「データ」から「シートと範囲を保護」を選び、回答シートを代表だけが編集できる設定にします。保護の詳しいやり方は「スプレッドシートの共有と保護:権限・範囲の保護・プルダウン」に書いています。

回答シートを「シートと範囲を保護」で代表だけが編集できるようにした設定パネル
回答シートを「シートと範囲を保護」で代表だけが編集できるようにした設定パネル

QUERYの式に order by を入れて並べ替えるのもやめます。並べ替えた結果は回答が増えるたびに並びが変わり、右側の手入力の列とずれます。新しい順に見たいときは、予約一覧のシートでフィルタ表示を使い、並べ替えは表示の上だけで行います。

二重申込を見つける

同じ人が2回送ってくることがあります。C列の電話番号が上の行と同じなら色を付けます。

  1. 予約一覧のA2:I1000を選びます。
  2. 「表示形式」から「条件付き書式」を開きます。
  3. 「セルの書式設定の条件」で「カスタム数式」を選びます。
  4. 式に =COUNTIF($C$2:$C2,$C2)>1 と入れます。
  5. 書式設定のスタイルで背景を薄い黄色にし、「完了」をクリックします。

この式は「自分より上の行に同じ電話番号があるか」を見るので、2回目以降の申込にだけ色が付きます。受付は色の付いた行のF列を「不参加」にし、メモに「重複」と書きます。行を消さないのは、消すと右側の列とずれるからです。

集計する

ピボットテーブルで月ごと・状況ごとに数える

  1. 予約一覧のA1:I1000を選びます。
  2. 「挿入」から「ピボット テーブル」を選びます。
  3. 「新しいシート」を選んで「作成」をクリックします。
  4. 右のパネルの「行」の「追加」から「受付日時」を選びます。
  5. 「受付日時」の項目で、日付を「年-月」でまとめる設定にします。
  6. 「列」の「追加」から「対応状況」を選びます。
  7. 「値」の「追加」から「受付日時」を選び、集計を「COUNTA」にします。

これで、月ごとに「未対応・連絡済み・来店・入会・不参加」が何件あるかの表ができます。ピボットテーブルは元のデータが増えれば自動で数え直されます。

ピボットテーブルの編集パネルで、行に「受付日時」、列に「対応状況」、値に件数を入れたところ
ピボットテーブルの編集パネルで、行に「受付日時」、列に「対応状況」、値に件数を入れたところ

COUNTIFSで決まった数字を出す

月例の報告で毎月同じ数字を見るなら、集計用のシートに式を置いておくほうが速く読めます。

「集計」シートのA2に「10月の体験申込」、A3に「10月の来店」、A4に「10月の入会」と書き、B2〜B4に次の式を1行ずつ入れます。

=COUNTIFS(予約一覧!A:A, ">="&DATE(2026,10,1), 予約一覧!A:A, "<"&DATE(2026,11,1))
=COUNTIFS(予約一覧!A:A, ">="&DATE(2026,10,1), 予約一覧!A:A, "<"&DATE(2026,11,1), 予約一覧!F:F, "来店")
=COUNTIFS(予約一覧!A:A, ">="&DATE(2026,10,1), 予約一覧!A:A, "<"&DATE(2026,11,1), 予約一覧!F:F, "入会")
集計用のシートに、10月の体験申込・来店・入会の式と結果が並んでいるところ
集計用のシートに、10月の体験申込・来店・入会の式と結果が並んでいるところ

「来店」には「入会」した人が含まれない点に注意します。受付が「来店」から「入会」に付け替えるので、来店した人の数は「来店」と「入会」の合計です。数え方は、F列に今の状況を1つだけ持つか、来店と入会を別の列のチェックボックスで持つかで変わります。後で集計の定義がぶれないよう、最初に決めて集計用のシートの横に書いておきます。

QUERYで月ごとの表を作る

ピボットテーブルを使わずに、式1つで月ごとの件数を出すこともできます。

=QUERY(予約一覧!A:F, "select year(A), month(A)+1, count(A) where A is not null group by year(A), month(A)+1 label year(A) '年', month(A)+1 '月', count(A) '申込'", 1)

QUERYの month() は1月を0として返すので、+1 しています。QUERYは1つの列に違う種類のデータが混ざると、多いほうの種類だけを扱い、少ないほうを空として扱います。A列にタイムスタンプ以外の文字が入ると、その行が数えられません。予約一覧のA列には関数の結果だけが入るので、この問題は起きません。

月ごとの体験数と入会数をグラフにして代表や講師と共有するなら、この集計シートをデータポータル(旧Looker Studio)につなぎます。やり方は「データポータル(旧Looker Studio)の使い方:スプレッドシートの数字をグラフにして共有する」に書いています。

回答の締め切りと受付の停止

体験申込を期間限定で受けるとき、フォームの受付を止める方法は3つあります。

方法操作使いどころ
手動で止める「公開済み」をクリックし、「回答を受付中」をオフにして「保存」急に止めたいとき
終了日を決める公開アイコンの「回答を受付中」の下の「終了日または回答数の上限を設定」で終了日を入れるキャンペーンの締め切り
回答数の上限を決める同じ「終了日または回答数の上限を設定」で「回答数で終了」を選び、件数を入れる先着10名の特別レッスン

回答数の上限は、すでに集まっている件数より大きい数にする必要があります。また、複数の人が同時に回答した場合は、上限に関係なく受け付けられます。先着10名なら、11件目が入ることもある前提で、受付が最後に確定させます。止めているあいだにフォームを開いた人には、締め切りのメッセージが表示されます。メッセージは編集できるので、「11月の体験は締め切りました。12月の日程は教室のWebサイトでご案内します。」のように次の行き先を書いておきます。

公開していないフォームは回答を受け付けません。フォームを「公開済み」から非公開に戻しても止まりますが、URLを開いた人には「アクセス権が必要」のような画面が出て、締め切りなのか間違いなのかが伝わりません。締め切るときは、非公開ではなく「回答を受付中」をオフにします。

公開アイコンから「回答を受付中」と「終了日または回答数の上限を設定」を開いたところ
公開アイコンから「回答を受付中」と「終了日または回答数の上限を設定」を開いたところ

フォームの質問を後から変えたとき

運用を始めてから質問を変えることは必ずあります。回答シートで起きることは、変えた内容によって違います。

変えたこと回答シートで起きること予約一覧への影響
質問のタイトルを変えた列の見出しが新しいタイトルになる。過去の回答は同じ列に残るQUERYは列の文字で写しているので影響なし。GASが見出しで探していれば直す
質問を足した回答の列の並びに新しい列が足されるQUERYの範囲(A:K)を広げ、写す列を足す
質問を消した列はシートに残り、新しい回答ではその列が空になる写している列ならそのまま空が並ぶ。不要なら式から外す
選択肢の名前を変えた過去の回答は古い名前のまま、新しい回答は新しい名前COUNTIFSやピボットで別の値として数えられる
質問の順番を入れ替えたシートの列の順は変わらないことが多い影響は少ない

いちばん効くのは選択肢の名前の変更です。「教室を知ったきっかけ」の「Instagram」を「インスタグラム」に変えると、集計で2行に分かれます。名前を変えるなら、変える前の回答も予約一覧の側で置き換えるか、集計の条件に両方の名前を入れます。

質問を消すのは、過去の回答を見なくなってからにします。

応用

GASで受付番号を振る

件数が多くなり、タイムスタンプと並び順に頼るのが不安なら、フォームの送信時にGASで受付番号を作り、別のシートに書き込みます。スプレッドシートの「拡張機能」から「Apps Script」を開き、次のコードを貼ります。

// フォーム送信時に「受付台帳」シートへ受付番号付きで1行足す
function onFormSubmitToLedger(e) {
  const ss = SpreadsheetApp.getActive();
  const ledger = ss.getSheetByName('受付台帳');
  const v = e.namedValues;
  const lastNo = ledger.getLastRow() - 1;            // 1行目は見出し
  const no = 'T' + String(lastNo + 1).padStart(5, '0');
  ledger.appendRow([
    no,
    v['タイムスタンプ'][0],
    v['お名前'][0],
    v['電話番号'][0],
    v['メールアドレス'][0],
    v['希望日時'][0],
    '未対応',
  ]);
}

「受付台帳」シートは先に作り、1行目に「受付番号」「受付日時」「お名前」「電話番号」「メールアドレス」「希望日時」「対応状況」と見出しを入れておきます。トリガーは、スプレッドシートの「フォーム送信時」に onFormSubmitToLedger を実行するように入れます。こうすると受付台帳は人が並べ替えても行を消しても回答シートとずれません。手順の詳細は「GASのトリガー:定期実行・フォーム送信時・編集時」に書いています。

予約一覧から台帳へ育てる

体験から入会した人は、会員台帳に移ります。予約一覧と会員台帳を別のスプレッドシートにするなら、IMPORTRANGEやXLOOKUPでつなぎます。台帳の作り方は「スプレッドシートで業務の台帳を作る:顧客・予約・在庫」、関数の使い方は「スプレッドシートの関数:業務で使うXLOOKUP・QUERY・IMPORTRANGE」に書いています。

できないことと、その代わり

やりたいこと標準では代わりの手
フォームの画面で1件ずつに対応状況を付けるできないスプレッドシートの別シートで持つ
スプレッドシートで直した値をフォームに戻すできない値の修正は予約一覧側で行い、回答シートは原本として残す
回答の権限をフォームとシートで連動させるできない両方の共有設定を別々に見直す
1つのフォームの回答を2つのスプレッドシートへ送るできない1つにつなぎ、もう1つはIMPORTRANGEで写す
回答が来たらChatやLINEに知らせるメール通知のみGASかn8nでつなぐ
回答を数十万件ためて分析するフォームごとの上限がある定期的にCSVで書き出して削除、またはデータベースへ移す

フォームごとの上限は、合計の保存容量が1GB、回答数が50万件です(添付ファイルは含まない。2026年10月時点、2026年9月から適用)。表示の不具合が出始める目安として、ヘルプには「概要」が5万件、スプレッドシートとの同期が10万件、「質問」「個別」が1万件と書かれています。体験申込で届く件数ではありませんが、何年も同じフォームを使い続ける社内の日報フォームなどでは、年に1回、古い回答を書き出して削除する運用にします。

よく詰まるところ

症状原因直し方
「概要」が表示されない回答がまだ1件もない回答が届けば表示される。プレビューから1件送って確かめる
新しい回答がシートに入らなくなった誰かが「フォームのリンクを解除」した「回答の送信先を選択」で同じスプレッドシートにつなぎ直す
つなぎ直したら「フォームの回答 2」ができた既存のスプレッドシートにつなぐと新しいシートが足される予約一覧のQUERYの参照先を新しいシートに変える。古いシートは見比べてから消す
回答シートで消した行が戻ってきたフォームの中の回答は消えていないので、つなぎ直すと全件が書き出される不要な回答は「個別」で削除するか、予約一覧側で「不参加」にする
回答が消えたフォームで「すべての回答を削除」した、または別のシートにつなぎ替えて古いシートを見ていないフォームで消した回答は戻らない。シートの「変更履歴」から古い版を探す
対応状況が別の人の行にずれた回答シートで並べ替え・行の削除・行の挿入をした変更履歴で並べ替える前の版に戻す。回答シートを保護する
質問を足したら手入力の列がずれた回答シートに対応状況の列を足していた対応状況を別シートに移す
集計で同じ選択肢が2行に分かれる選択肢の名前を途中で変えた古い名前を置き換えるか、条件に両方の名前を入れる
COUNTIFSの数が合わないタイムスタンプが文字として入っている、または範囲がずれているセルの表示形式を日時にし、条件の範囲を同じ行数にそろえる
外部の人が回答を見られるフォームの共同編集者がスプレッドシートにも自動で入ったスプレッドシートの共有から外す
締め切ったはずなのに回答が来た非公開にしただけ、または終了日の設定が未保存「回答を受付中」のオフを保存する

次にやること

回答を受付の台帳として回せるようになったら、台帳と集計を広げます。

  • Googleフォームの作り方:申込・予約・アンケートを受ける
  • スプレッドシートで業務の台帳を作る:顧客・予約・在庫
  • スプレッドシートの関数:業務で使うXLOOKUP・QUERY・IMPORTRANGE
  • データポータル(旧Looker Studio)の使い方:スプレッドシートの数字をグラフにして共有する

あわせて読む