Googleフォーム事前入力URLのエントリーIDを一括取得する
この記事で実現できること
Googleフォーム事前入力URLのエントリーIDを1つずつURLから探す作業から解放されます。
背景:フォームで仮登録と本登録を組み合わせで運用する
私がサポートする放課後子ども教室の募集では、応募者(保護者)のメール不達防止のため、まずGoogleフォームで応募者(保護者)のメールアドレスと氏名・児童名等、必要最低限の情報を登録してもらいます。
フォームの回答が着信すると、すべての申込情報を入力するための本登録用のフォームURLを記載したメールを即時返信しています。
この時、返信するURLは、仮登録で入力済みの情報を再度入力を省略できる様に、仮登録の入力項目(メールアドレス・保護者氏名・児童名・学年・組 など)はGoogle フォームの標準機能である「回答を事前入力したフォームのURL」をGASで組み立てて返信します。
事前入力項目が5項目程度までならば「フォームに事前入力する」をクリックして事前入力URL取得の画面に遷移します。

ここでいくつか 事前入力の回答を設定してから、最下部の[リンクを取得]をクリックします。

これまでは上記の操作で取得したURLをスプレッドシートの設定表に貼り付けて各質問項目に対するエントリーIDを探し出しGASで複数のエントリーIDと回答を連結し、長いURLを生成していました。
エントリーID解析作業の問題点
この様なフォームの仮登録・本登録の組み合わせを作り始めて今年で6年目になりますが、各質問とエントリーIDの取得と関係づけを紐解くのは今でも苦手なまま進歩しません。
1.取得した長い事前入力URLから、&entry.221140653 などのエントリーIDを抜き出すのが大変面倒
2.必ずしも質問順に並んでいないことがあり、油断しているとIDと質問の対応付けを誤認する
3.URLに組み込まれる日本語を正しく送るためにENCODEURL関数でエンコードされてしまうため、回答を見ても内容を推測しにくい
エントリーIDを一括取得できる!
Geminiに聞いたところ、まさかの100点満点の回答を貰いました!

Geminiの回答をステップを踏んで、エントリーIDの一覧を取得
ブラウザのデベロッパーツール(開発者ツール)のコンソールに専用のJavaScriptコードを貼り付けるだけで、一瞬でフォーム内の全質問のエントリーIDを一覧で取得できます。
🛠️ エントリーIDを一括取得する手順
1. 事前入力URLの作成画面を開く
編集権限のあるGoogleフォームを開きます。
画面右上にある 「その他(縦の3点リーダー)」 ボタンをクリックします。
「事前入力したURLを取得」 を選択します。
新しいタブで事前入力用のフォーム画面が開きます。(※ここではまだ回答を入力する必要はありません)

2. デベロッパーツール(コンソール)を開く
開いた事前入力用フォームの画面で、キーボードの F12 キー(Macの場合は Cmd + Option + I)を押して、ブラウザのデベロッパーツールを開きます。
上部のタブメニューから 「Console(コンソール)」 を選択します。


初めてブラウザのコンソールを使用する場合、貼り付け時に以下のようなセキュリティ警告が表示され、コードの貼り付けがブロックされることがあります。
💡 コンソールにコードを貼り付けられない場合

その場合は、セキュリティ警告の説明の通り、キーボードで allow pasting と入力し、Enterを押します。
3. コードを貼り付けて実行する
下記の「コピー用JavaScriptコード」をすべてコピーします。
コンソールの入力欄に貼り付け、 Enter キーを押して実行します。

※実行すると、コンソール上にフォーム内の全質問とエントリーIDが一覧表で表示されます
※フォームの質問がセクションに分かれていても、全セクションの項目を一括取得できます
📋 コピー用JavaScriptコード
以下のコードをそのままコンソールに貼り付けて実行してください。
(function() {
// Googleフォームがページ内に保持しているグローバルデータを取得
const FB_PUBLIC_LOAD_DATA_ = window.FB_PUBLIC_LOAD_DATA_;
if (!FB_PUBLIC_LOAD_DATA_) {
console.error("Googleフォームの事前入力ページで実行してください。");
return;
}
// 質問項目の配列を抽出
const items = FB_PUBLIC_LOAD_DATA_[1][1];
const result = [];
let tsvContent = "質問\tエントリーID\n"; // クリップボード用のタブ区切りテキスト
items.forEach(item => {
if (!item || !item[1]) return;
const questionText = item[1]; // 質問
const itemDetails = item[4]; // 質問項目の詳細情報
// 質問項目に詳細データ(itemDetails)が存在する場合
if (itemDetails && Array.isArray(itemDetails)) {
itemDetails.forEach((detail, index) => {
if (detail && detail[0]) {
const entryId = detail[0];
// グリッド質問などで複数行ある場合は、質問に行番号を付与
const suffix = itemDetails.length > 1 ? " (" + (index + 1) + "行目)" : "";
const displayName = questionText + suffix;
const formattedEntryId = "entry." + entryId;
result.push({
"質問": displayName,
"エントリーID": formattedEntryId
});
// タブ区切り形式で追加
tsvContent += displayName + "\t" + formattedEntryId + "\n";
}
});
}
});
// 結果をコンソールに表形式で出力
if (result.length > 0) {
console.table(result);
// デベロッパーツールの機能を使ってクリップボードに自動コピー
copy(tsvContent.trim());
console.log("🎉 取得完了!エントリーIDの一覧をクリップボードにコピーしました。");
console.log("そのままスプレッドシートやExcelに貼り付け(Ctrl+V)できます!");
} else {
console.log("エントリーIDが見つかりませんでした。質問項目があるか確認してください。");
}
})();
📊 実行結果のイメージ
コードが正常に実行されると、コンソール上に以下のように見やすい表形式(テーブル)でデータが表示されます。

表示されたテーブルのデータをドラッグしてコピーし、Googleスプレッドシートにそのまま貼り付けることで、簡単にリスト化して管理できます。
📋 コピーしたデータをスプレッドシートに貼り付ける方法
上記のJavaScriptコードを実行すると、コンソールへの出力と同時に、クリップボードへ自動的に**「シングルクォート(')を含まないタブ区切りデータ」**がコピーされます。
1. スプレッドシートに直接貼り付ける(推奨)
スプレッドシートの貼り付けたいセル(例: A1)を選択します。
キーボードの Ctrl + V(Macは Cmd + V)を押して貼り付けます。
質問とエントリーIDが、クォートなしで2列に綺麗に自動展開されます。
💡 (補足)コンソール上の表をドラッグコピーした場合の対処法
万が一、自動コピーが動作せず、コンソール上のテーブルを直接ドラッグ選択してコピーした場合は、値の前後にシングルクォート(')が付着した状態(例: 'entry.123456789')になります。
このシングルクォートは、スプレッドシートの SUBSTITUTE 関数 を使って除去できます。
=SUBSTITUTE(B2, "'", "") これを数式に組み込めば、手動コピーした場合でもクォートなしの綺麗なIDとして扱うことができます。
事前入力URLの生成とテスト
事前入力URLの各要素と組み立て方を説明します。
先に取得した「エントリーID」の値の後ろに " = " を付けています。
C6: フォーム回答用URL(短縮していないURL)
C7: ?usp=pp_url&entry.341595886=
C8: &entry.711108593=
C9: &entry.1421323816=
以下省略
D7: メールアドレス
D8: 保護者氏名(姓)
D9: 保護者氏名(名)
以下省略
事前入力URL(7項目の質問)は次の式で生成できます。
=C6&C7&ENCODEURL(F7)&C8&ENCODEURL(F8)&C9&ENCODEURL(F9)&C10&ENCODEURL(F10)&C11&ENCODEURL(F11)
💡 注意点・制限事項
グリッド選択肢や特殊なレイアウトについて グループ化された質問(グリッド選択肢など)や特殊なレイアウトの質問がある場合、データ構造の違いによりIDがうまく抽出できないケースがあります。その場合は、該当する項目のみ手動でURLから確認してください。
実行する画面について 必ず 「事前入力したURLを取得」で開いた画面(URLの末尾が prefill になっているプレビューに似た画面) で実行してください。通常の編集画面や一般の回答画面では、window.FB_PUBLIC_LOAD_DATA_ の構造が異なるため動作しません。
Googleの仕様変更によりデータ構造が変わると、エントリーIDが取得できなくなる可能性があります。
