「ちょっと聞いてみたい」だけでもOK! ツールや業務効率化についての相談をすべて1対1で丁寧にお答えします。 まずはお気軽にメッセージをどうぞ!LINE公式アカウントはこちら!
Googleフォームで受けた問い合わせや申請、全部同じ色でスプレッドシートに並んでいませんか。至急対応が必要な件と、後で確認すれば良い件が同じ見た目で混在していると、優先順位の判断に余計な時間がかかります。「確認漏れ」が発生すると、クレームや機会損失に直結することもあります。
フォーム回答の管理でよくあるのが、こんな状況です。
- 受け取った順に並んでいるだけで、緊急度が一目でわからない
- 「あの申請、どこいった?」と過去のシートを遡るのに時間がかかる
- 担当者が変わったとき、対応済みかどうかの引き継ぎが口頭頼り
本記事では、GoogleフォームとGASを連携して、回答の重要度を自動で判別し、スプレッドシートの行を自動色分けする仕組みの作り方を解説します。フォームの作り方・コードの各行解説・トリガー設定・応用パターン(優先度3段階・Slack通知連携・既存スプレッドシートへの適用)・よくある疑問Q&Aまで網羅します。完全なGASコードも掲載しているので、コピペで今日から使えます。
この仕組みが役立つ業務シーン
まず「どんな場面で使えるのか」を具体的にイメージしてみましょう。「至急フラグ付きフォーム」が活きる業務はかなり幅広いです。
① 問い合わせフォーム(クレーム・緊急不具合を優先対応)
② 社内申請フォーム(当日締め切り・予算超過案件を即把握)
③ クレーム受付(感情強めの文言を含む回答を自動検出)
④ 修理・サポート依頼(「今すぐ使えない」「データが消えた」などの緊急語を検知)
⑤ イベント参加申し込み(「当日キャンセル」「特別対応希望」をフラグ立て)
共通しているのは「受け取った内容の重要度に差があり、優先度を素早く判断したい」という業務です。これがGASで自動化できると、担当者が一件一件確認する必要がなくなります。
色分けの基準は「フォームに選択肢を作る方法」と「回答テキストをGASでキーワード判定する方法」の2種類があります。この記事では両方を紹介しますが、まずはフォームに「重要度」選択肢を追加する方法が最もシンプルで確実です。
Googleフォームの作り方。どんな質問項目にするか
フォームの設計が色分けの精度を左右します。問い合わせ内容の重要度を判別するには、「重要度」や「緊急度」を明示的に選択させる質問を追加するのが最も確実な方法です。
基本的なフォーム設計の例を示します。問い合わせフォームの場合、以下のような質問項目を設定します。
① お名前(短文テキスト・必須)
② メールアドレス(メールアドレス・必須)
③ お問い合わせ内容(長文テキスト・必須)
④ 緊急度(プルダウンまたはラジオボタン・必須)
選択肢:「至急(24時間以内に対応が必要)」「通常(3営業日以内)」「低(1週間以内でOK)」
④の質問が色分けの基準になります。「至急」「通常」「低」のような選択肢にすることで、GASが回答データから一致する文字列を検出して色を判定できます。
選択肢のテキストとGASコード内の比較文字列は完全一致にする必要があります。「至急(24時間以内に対応が必要)」という選択肢にした場合、コード内の比較も `’至急(24時間以内に対応が必要)’` にする必要があります。
フォームを作ったら、「回答」タブからスプレッドシートと連携します。「スプレッドシートにリンク」または「スプレッドシートを作成」を選択すると、回答が自動でスプレッドシートに記録されます。

スクリプトエディタでGASコードを設置する。各行解説付き
スプレッドシートを開いた状態で「拡張機能」→「Apps Script」を開きます。以下の完全版コードを貼り付けてください。各行にコメントを入れているので、何をしているかを確認しながら読めます。
// ================================================================
// 関数①:フォーム送信時に自動で色分けするトリガー用関数
// フォームに新しい回答が届くたびに、この関数が自動で呼び出されます
// ================================================================
function colorCodeFormResponse(e) {
// 【1】現在開いているスプレッドシートのアクティブシートを取得します
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 【2】最終行の行番号を取得します(今回送信された回答は最終行に入ります)
var lastRow = sheet.getLastRow();
// 【3】最終行の全データを配列として取得します
// getRange(行, 列, 行数, 列数) の形式です
var rowData = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
// rowData[0]はA列、rowData[1]はB列……という形式になります
// 【4】重要度(緊急度)が入っている列のインデックスを指定します
// フォームの質問が「タイムスタンプ→名前→内容→緊急度」の順なら、緊急度はインデックス3です
// ※インデックスは0始まりです(0=A列、1=B列、2=C列、3=D列)
var priorityColumnIndex = 3; // ← フォームの構成に合わせて変更してください
var priority = rowData[priorityColumnIndex];
// 【5】最終行の全列を範囲として取得します
var rowRange = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn());
// 【6】重要度の値に応じて背景色を設定します
// setBackground()の引数は16進数カラーコードです
if (priority === '至急') {
rowRange.setBackground('#FF6B6B'); // 赤系(目立つ・緊急を意識)
} else if (priority === '通常') {
rowRange.setBackground('#FFF9C4'); // 黄色系(注意を要する)
} else if (priority === '低') {
rowRange.setBackground('#C8E6C9'); // 緑系(落ち着いた印象)
} else {
rowRange.setBackground('#FFFFFF'); // 白(該当なしのデフォルト)
}
Logger.log('色分け完了: 行' + lastRow + ' 重要度=' + priority);
}
// ================================================================
// 関数②:キーワードで自動判定する関数(選択肢なしのフォーム向け)
// 自由記述欄の文言にキーワードが含まれているか判定します
// ================================================================
function colorByKeyword(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var rowData = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
// 【1】全列のテキストを1つの文字列に結合してキーワードチェックします
var fullText = rowData.join(' ');
// 【2】至急判定に使うキーワードリストです(業務に合わせて編集してください)
var urgentKeywords = ['至急', '緊急', '今すぐ', 'ASAP', '助けて', 'エラー', '動かない', '壊れた', '対応できない', '困っています'];
// 【3】someはリストの中に1つでも条件を満たすものがあればtrueを返します
var isUrgent = urgentKeywords.some(function(keyword) {
return fullText.indexOf(keyword) !== -1; // indexOf は文字列が見つかればその位置、なければ-1を返します
});
var rowRange = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn());
// 【4】キーワードが見つかれば赤、なければ薄青に設定します
if (isUrgent) {
rowRange.setBackground('#FF6B6B');
} else {
rowRange.setBackground('#E3F2FD'); // 薄い青(通常回答)
}
Logger.log('キーワード判定完了: ' + (isUrgent ? '至急' : '通常'));
}
// ================================================================
// 関数③:既存のすべての回答を一括で色分けし直す関数
// フォームにすでに回答が溜まっている場合に一度だけ手動実行します
// ================================================================
function recolorAllRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
// データが1行しかない(ヘッダーのみ)場合はアラートを出して終了します
if (lastRow < 2) {
SpreadsheetApp.getUi().alert('データがありません。');
return;
}
var priorityColumnIndex = 3; // colorCodeFormResponseと同じ列番号にしてください
var count = 0;
// 2行目から最終行まで1行ずつ処理します
for (var i = 2; i <= lastRow; i++) {
// priorityColumnIndex + 1は0始まりのインデックスを1始まりの列番号に変換しています
var priority = sheet.getRange(i, priorityColumnIndex + 1).getValue();
var rowRange = sheet.getRange(i, 1, 1, sheet.getLastColumn());
// 重要度に応じて色を設定します
if (priority === '至急') {
rowRange.setBackground('#FF6B6B');
} else if (priority === '通常') {
rowRange.setBackground('#FFF9C4');
} else if (priority === '低') {
rowRange.setBackground('#C8E6C9');
} else {
rowRange.setBackground('#FFFFFF');
}
count++;
}
SpreadsheetApp.getUi().alert(count + '行の色分けが完了しました。');
}

このコードの `priorityColumnIndex` は、フォームの構成に合わせて変更が必要です。フォームの最初の列がタイムスタンプ(インデックス0)、次が名前(1)、内容(2)、緊急度(3)なら `3` を入力してください。インデックスは0始まりであることに注意してください。
フォーム送信トリガーを設定する
コードを保存したら、フォームが送信されるたびに自動で `colorCodeFormResponse` が実行されるよう、トリガーを設定します。トリガーを設定しないと、フォームが送信されても自動で色分けされません。
トリガーの設定手順はこのとおりです。
① スクリプトエディタ左サイドバーの時計マーク(トリガー)をクリック
② 右下の「トリガーを追加」をクリック
③ 実行する関数: `colorCodeFormResponse` を選択
④ イベントのソース: 「スプレッドシートから」を選択
⑤ イベントの種類: 「フォーム送信時」を選択
⑥ 「保存」をクリック

トリガー設定時にも「許可」の確認画面が表示されます。初回は「詳細」→「安全でないページに移動」→「許可」の順にクリックしてください。これを完了しないとトリガーが正常に動作しません。許可後は「トリガー一覧」画面に設定したトリガーが表示されていることを確認してください。
これでフォームに新しい回答が届くたびに、自動で色分けが実行されます。
既存の回答を一括で色分けし直す
フォームにすでに回答が溜まっている場合は、`recolorAllRows` 関数を手動で一度実行してください。スクリプトエディタ上部のドロップダウンで `recolorAllRows` を選択してから「実行」ボタンを押します。
全行が一括で色分けされます。今後は新しい回答が来るたびに自動で色がつくので、この手動実行は最初の一度だけで構いません。
この仕組みで実現できること:①フォーム送信のたびに自動で重要度を色分け、②キーワード判定で「至急」文言を含む回答を自動検出、③既存の全回答を一括で色分け直し、④ツールの追加や費用なし・GASだけで完結。
応用パターン①:優先度3段階から5段階へ拡張する
「至急・通常・低」の3段階では粒度が足りないという場合、選択肢と色を増やすだけで5段階にも対応できます。コードの色分け部分を以下のように書き換えてください。
// 5段階の優先度色分け(colorCodeFormResponse内の色分け部分を置き換えます)
if (priority === '最優先(今日中)') {
rowRange.setBackground('#FF0000'); // 濃い赤
} else if (priority === '至急(24時間以内)') {
rowRange.setBackground('#FF6B6B'); // 赤系
} else if (priority === '高(3営業日以内)') {
rowRange.setBackground('#FFB347'); // オレンジ系
} else if (priority === '通常(1週間以内)') {
rowRange.setBackground('#FFF9C4'); // 黄色系
} else if (priority === '低(いつでもOK)') {
rowRange.setBackground('#C8E6C9'); // 緑系
} else {
rowRange.setBackground('#FFFFFF'); // 白
}
応用パターン②:Slack通知連携
「至急」の回答が届いたらSlackに通知する機能もGASで追加できます。SlackのWebhook URLが必要です。`colorCodeFormResponse` 関数の色設定の後に以下のコードを追記してください。
// 至急の場合はSlackに通知する(colorCodeFormResponse内に追記します)
if (priority === '至急') {
// SlackのIncoming Webhook URLを設定します
// https://api.slack.com/messaging/webhooks からWebhook URLを取得してください
var slackWebhookUrl = 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'; // ← 自分のURLに変更
var slackMessage = {
text: '【至急】新しいフォーム回答が届きました。\n' +
'送信者: ' + rowData[1] + '\n' + // インデックス1(名前の列)
'内容: ' + rowData[2].substring(0, 100) + '...', // インデックス2(内容の列)最初の100文字
username: 'フォーム通知Bot',
icon_emoji: ':rotating_light:'
};
// Slackに通知を送信します
var options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(slackMessage)
};
UrlFetchApp.fetch(slackWebhookUrl, options);
Logger.log('Slack通知を送信しました');
}
フォームの回答管理をスプレッドシートの色で視覚化するだけで、優先順位の判断にかける時間が大幅に減ります。
応用パターン③:フォームを使わず既存スプレッドシートに適用する方法
「すでにスプレッドシートでデータを管理しているが、色分けだけ自動化したい」という場合も対応できます。既存のスプレッドシートに対して `recolorAllRows` を実行するか、スプレッドシートが編集されるたびに色分けをやり直す設定を使います。
トリガーを「フォーム送信時」ではなく「スプレッドシートを編集時」に変更することで、フォームなしのスプレッドシートでも自動色分けが機能します。
// スプレッドシート編集時に色分けを更新する関数
// トリガーの「イベントの種類」を「編集時」に設定して使います
function onEditColorCode(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var editedRow = e.range.getRow(); // 編集された行の番号を取得します
if (editedRow < 2) return; // ヘッダー行は除外します
var priorityColumnIndex = 3; // 重要度の列インデックス(0始まり)
var priority = sheet.getRange(editedRow, priorityColumnIndex + 1).getValue();
var rowRange = sheet.getRange(editedRow, 1, 1, sheet.getLastColumn());
// 重要度に応じて色を設定します
if (priority === '至急') {
rowRange.setBackground('#FF6B6B');
} else if (priority === '通常') {
rowRange.setBackground('#FFF9C4');
} else if (priority === '低') {
rowRange.setBackground('#C8E6C9');
} else {
rowRange.setBackground('#FFFFFF');
}
}
このコードをスクリプトエディタに追加し、トリガーを「スプレッドシートから」→「編集時」に設定することで、フォームとは関係なく、スプレッドシートを直接編集したときにも色分けが自動更新されます。
色のカスタマイズは `setBackground(‘#FF6B6B’)` の16進数カラーコードを変更するだけです。会社のコーポレートカラーや、チームで使っている色分けルールに合わせて自由に変えられます。Google「カラーピッカー」と検索すると好きな色の16進数コードを確認できます。
よくある疑問Q&A
GASのフォーム色分け仕組みを作る際に多く寄せられる疑問をまとめました。
Q:スプレッドシートが他の人と共有されていない場合は動きますか?
A:GASはスクリプトを実行するGoogleアカウントの権限で動作します。自分のアカウントが対象スプレッドシートの編集権限を持っていれば、共有設定に関わらず動作します。チームメンバーが同じスプレッドシートを使う場合は、全員が同じGoogleアカウントか、スプレッドシートを編集共有にしておく必要があります。
Q:フォームが100件以上来たら処理が重くなりませんか?
A:`recolorAllRows`(全件処理)は100件程度なら数秒で完了します。1,000件を超えると数十秒かかることがありますが、毎回全件処理するわけではなく、新規回答の都度処理(`colorCodeFormResponse`)は1行だけの処理なので影響を受けません。大量データを一括処理する場合は、処理を分割するか翌日に実行するようにしてください。
Q:「フォーム送信時」トリガーと「編集時」トリガーの違いは?
A:「フォーム送信時」はGoogleフォームに回答が来たときだけ動作します。「編集時」はスプレッドシートを直接編集したときに動作します。フォームを使っているなら「フォーム送信時」、スプレッドシートを直接入力しているなら「編集時」を選んでください。
Q:色分けの設定を途中で変更したくなったら?
A:コード内の `setBackground(‘#FF6B6B’)` の16進数カラーコードを変更して保存するだけです。変更後は新しい回答から新しい色が適用されます。既存の行を新しい色に更新したい場合は `recolorAllRows` を手動実行してください。
Q:「至急」の回答に対してメール通知も送れますか?
A:送れます。`colorCodeFormResponse` 関数の色設定の後に `GmailApp.sendEmail(recipient, subject, body)` を追加するだけです。この記事の「色分け後に即メール通知」応用パターンとして前の節で紹介したコードをそのまま使えます。
GASのトリガー設定は「一度設定したら自動でずっと動き続ける」のが最大の特徴です。フォームが来るたびに毎回手動で色を塗る作業が、初期設定の15分で永久に不要になります。
「見て判断する」から「見れば分かる」状態へ
フォームの回答を一件一件開いて重要度を判断していた作業が、色を見るだけになります。チームメンバーに共有しても、ルールの説明なしに「赤は至急」と直感で伝わります。
スプレッドシートを開いた瞬間に優先対応すべき件が赤で目立っている状態は、担当者の判断ストレスを大幅に減らします。特に複数人でフォームを共有管理している場合、引き継ぎの説明コストも下がります。
仕組みを一度作ってしまえば、あとはフォームに回答が来るたびに自動で動き続けます。
「自分のフォームに合わせてカスタマイズしたい」「キーワードのリストを業務に合わせて調整したい」「Slack通知も一緒に設定したい」という方は、LINEでご相談ください。
「ちょっと聞いてみたい」だけでもOK! ツールや業務効率化についての相談をすべて1対1で丁寧にお答えします。 まずはお気軽にメッセージをどうぞ!LINE公式アカウントはこちら!
地道ラボでは、GoogleフォームとGASを使った業務効率化の無料相談をLINEで実施しています。
申し込みはLINEで「フォーム自動化」とメッセージを送るだけです。
大げさなコンサルティングではなく、明日から試せる具体的な一歩をお伝えするのが私たちのスタイルです。
フォーム管理の手間を仕組みで解決する第一歩を、今日ここから踏み出しませんか。
次の一歩として、まずは「今どんな問い合わせフォームや申請フォームを使っているか」を一つ教えてください。その現状を、具体的に改善するプランをお伝えします。


コメント