「ちょっと聞いてみたい」だけでもOK! ツールや業務効率化についての相談をすべて1対1で丁寧にお答えします。 まずはお気軽にメッセージをどうぞ!LINE公式アカウントはこちら!
「タスクの完了状況をスプレッドシートで管理しているが、どれが終わったか一目でわからない」「進捗を確認するたびにスクロールして目で追っている」——こうした悩みは、チェックボックスの使い方を少し工夫するだけで解消できます。
- チェックボックスを使っているが、集計は手動でカウントしている
- 完了した行を色分けしたいが、毎回手で塗っている
- 担当者が対応完了したら自動で通知が来るようにしたい
本記事では、Googleスプレッドシートのチェックボックスを使った進捗管理ボードの作り方を、集計・色分け・通知(GAS)まで一通り解説します。「チェックを入れたら行が変わる」仕組みを一度作ると、繰り返しの確認作業が大きく減ります。
進捗管理ボード全体の設計から始める
進捗ボードは「設計段階でどんな情報を管理するか」を決めておくことが重要です。後から列を追加すると、条件付き書式やGASコードの修正が必要になり手間が増えます。
最初に以下の列構成を作っておくと、この記事で紹介する機能をすべてそのまま活用できます。
| 列 | 内容 | 役割・ポイント |
|---|---|---|
| A列 | タスク名 | 「請求書送付」「在庫確認」など。明確に書く |
| B列 | 担当者名 | 名前で担当者別集計や通知の宛先に使う |
| C列 | 期限日 | 日付型で入力。期限超過の色付けに使う |
| D列 | 完了チェック | チェックボックスを設置。TRUE/FALSEが後続処理の出発点 |
| E列 | 完了日時 | GASがチェック時に自動記録する。手入力不要 |
| F列 | 備考 | メモ・特記事項など |
チェックボックスの設置方法は、D2セル以降を選択して「挿入」→「チェックボックス」を選ぶだけです。一括設置したい場合はD2からD200などの広い範囲を先に選択してから挿入すると、まとめて配置できます。
チェックボックスは選択すると `TRUE`、外すと `FALSE` の値を持ちます。これが集計・色分け・通知のすべての出発点になります。
進捗管理の自動化は、チェックボックスの「TRUE/FALSE」という単純な値を起点にすべてが展開されます。この仕組みさえ理解すれば、複雑な設定は何もありません。
チェックボックスを一括で設置したい場合、D2からD200などの範囲を選択してから「挿入」→「チェックボックス」を選ぶと、一度に大量のチェックボックスを配置できます。後から行を追加するたびにチェックボックスを設定し直す必要がなくなります。
COUNTIF・COUNTIFS関数で集計を完全に自動化する
チェックボックスの集計には `COUNTIF` 関数と `COUNTIFS` 関数を使います。スプレッドシートの上部(G列あたり)にダッシュボードを作ると、進捗状況がリアルタイムで確認できるようになります。

基本の集計4パターン
① 合計タスク数: =COUNTA(A2:A)
② 完了数: =COUNTIF(D2:D, TRUE)
③ 未完了数: =COUNTIF(D2:D, FALSE)
④ 完了率(%): =G3/G2 ※セルの書式設定でパーセント表示にする
`D2:D` のように列全体を指定しておくと、100行・200行に増えても数式を修正する必要がありません。新しいタスクを下に追加するだけで、自動的に集計に反映されます。
担当者別の集計(COUNTIFSの活用)
担当者ごとの完了数・未完了数を集計したい場合は `COUNTIFS` を使います。第1条件・第2条件と複数の絞り込みを同時に指定できます。
① 山田さんの完了数: =COUNTIFS(B2:B, "山田", D2:D, TRUE)
② 山田さんの未完了数:=COUNTIFS(B2:B, "山田", D2:D, FALSE)
③ 山田さんの合計数: =COUNTIF(B2:B, "山田")
これを担当者ごとに並べると「誰が何件抱えていて、何件終わっているか」が一目でわかる担当者別進捗表になります。
期限超過タスクの集計
期限切れのタスク数を把握するには、C列(期限日)とD列(完了チェック)を組み合わせた `COUNTIFS` を使います。
① 期限超過かつ未完了のタスク数:=COUNTIFS(C2:C, "<"&TODAY(), D2:D, FALSE)
② 今日が期限のタスク数: =COUNTIFS(C2:C, "="&TODAY(), D2:D, FALSE)
`TODAY()` を使うことで、今日の日付を基準にした動的な集計が常に最新状態で表示されます。毎朝このダッシュボードを確認するだけで、その日のアクションが明確になります。
COUNTIF の範囲を `D2:D` と列全体にしておくと、行が増えても数式を修正しなくて済みます。100行・200行に増えても自動で追いかけてくれます。また、完了率をグラフで見える化したい場合は、完了数と未完了数を使ってドーナツグラフを作ると、視覚的な進捗ダッシュボードになります。
条件付き書式で完了行・期限超過行を自動色分けする
視覚的な進捗管理のために、条件付き書式を設定します。完了行をグレーにし、期限超過の行を赤くするだけで、管理表の「読みやすさ」が劇的に変わります。

設定1:完了行を自動グレーアウトする
① A2〜F200(テーブル全体の範囲)を選択する
② 「表示形式」→「条件付き書式」を開く
③ 「+条件を追加」をクリック
④ 「カスタム数式」を選び、数式に `=$D2=TRUE` と入力する
⑤ 書式スタイルで背景色を薄いグレー(`#e0e0e0`)、文字色をグレー(`#9e9e9e`)に設定する
⑥ 「完了」をクリック
`=$D2=TRUE` のポイントは、`D` の前に `$` をつけて列を固定している点です。こうすることで、チェックボックスがD列にあるかを行ごとに判定し、その行全体のスタイルを変えてくれます。`$` を忘れると、D列の1セルだけが色付けの対象になってしまいます。
「完了した行が自動でトーンダウンする」だけで、残タスクへの集中度が大きく上がります。目が自然に未完了のタスクに向くようになるため、見落としが減ります。
設定2:期限超過行を赤くする
同じ手順で2つ目の条件付き書式を追加します。
① 再度「+条件を追加」をクリック
② カスタム数式に `=AND($C2 ③ 背景色を薄い赤(`#ffcccc`)、文字色を赤(`#cc0000`)に設定する ④ 「完了」をクリック この数式の意味は「期限日(C列)が今日より前、かつ、完了チェック(D列)がFALSE(未完了)の行」です。完了済みの行は赤くならないように `$D2=FALSE` の条件を加えています。 複数の条件付き書式を設定する順番にも注意が必要です。Googleスプレッドシートでは、条件付き書式は上から順に評価されます。「完了行グレー」が「期限超過赤」より上に設定されていると、完了済みかつ期限超過の行はグレーとして表示されます(完了済みを優先するため)。逆の順番にしたい場合は、条件付き書式の設定画面でドラッグして順番を入れ替えてください。 条件付き書式は「セルの値が”TRUE”のとき」ではなく「カスタム数式 =$D2=TRUE」で設定するのが正解です。「セルの値」で設定すると選択した列1列だけに適用されてしまうため、行全体の色を変えるにはカスタム数式が必要です。 チェックが入った瞬間に担当者や管理者に通知を送る仕組みをGASで作ります。まずメール通知の完全版コードから見ていきます。 スクリプトエディタ(スプレッドシートの「拡張機能」→「Apps Script」)に次のコードを貼り付けます。 このコードを設定後、トリガーを次のように設定します。 ① スクリプトエディタ左メニューの「トリガー」(時計アイコン)を開く ② 「トリガーを追加」をクリック ③ 実行する関数:`onCheckboxChange` ④ イベントのソース:「スプレッドシートから」 ⑤ イベントの種類:「変更時」 ⑥ 保存する `YOUR_SHEET_ID` の部分は、実際のスプレッドシートのURL(`/spreadsheets/d/` の直後の文字列)に置き換えてください。また、`notifyEmail` も実際の通知先アドレスに変更する必要があります。そのままでは動きません。 Slack通知への切り替えコード(完全版) メールではなくSlackに通知したい場合は、以下のコードを追加します。Slackの「Incoming Webhook」URLを事前に取得しておいてください。 `onCheckboxChange` 関数内の `GmailApp.sendEmail(…)` 行の代わりに以下を呼び出します。 Slack通知とメール通知を同時に使いたい場合は、両方の行を残せばどちらにも通知が飛びます。 上記のコードには完了日時の自動記録がすでに含まれていますが、通知なしで「日時記録だけ」を独立して設定したい場合は以下のコードが使いやすいです。 このコードを「変更時」トリガーに設定すると、D列のチェックボックスがONになった瞬間の日時がE列に自動入力されます。OFFに戻すとE列もクリアされるため、「やり直し」にも対応しています。 完了日時の記録が自動化されると、「いつ誰が対応したか」の履歴が自然に蓄積されます。後からの振り返りや引き継ぎに役立ちます。 基本の仕組みができたら、次の工夫を加えるとさらに使いやすくなります。 ① 担当者フィルタ:シート上部にドロップダウンリスト(B列の担当者名一覧から入力規則で作成)を作り、FILTER関数でその担当者のタスクだけを別エリアに抽出表示すると、個人の進捗確認が簡単になります ② 残日数の自動計算:G列に `=C2-TODAY()` を入力すると、今日から期限まで何日残っているかが常に表示されます。マイナスになった場合は赤字にする条件付き書式を追加するとさらに一目瞭然になります ③ 完了率の可視化:完了数と未完了数を集計したセルを使ってドーナツグラフを作ると、視覚的な進捗ダッシュボードが完成します。毎朝の確認・週次ミーティングの画面共有で威力を発揮します チェックボックス進捗管理の完成形:①COUNTIF/COUNTIFSで完了数・担当者別・期限超過数を自動集計、②条件付き書式で完了行グレー・期限超過行赤を自動色付け、③GASでチェック時に完了日時を自動記録、④GAS+トリガーでSlack/メール通知を自動送信。 スプレッドシートの進捗管理は、チェックボックスの真の使い方を知るだけで別物になります。今日のうちに一つ、手動でやっている集計作業をCOUNTIF関数に置き換えてみてください。 地道ラボでは、スプレッドシートを使った業務効率化の個別相談をLINEで実施しています。 申し込みはLINEで「シート相談」とメッセージを送るだけです。 大げさなコンサルティングではなく、明日から試せる具体的な一歩をお伝えするのが私たちのスタイルです。 「管理表は作ったけど、集計や通知まで自動化できていない」という状況を一緒に整理する一歩を、今日ここから踏み出しませんか。 次の一歩として、まずは「今使っている進捗管理の方法」を一つ教えてください。その現状を、具体的に改善するプランをお伝えします。
GASでSlack/メール通知を自動送信する(完全コード)
function onCheckboxChange(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
// D列(4列目)のチェックボックスが変更された場合のみ処理
if (range.getColumn() !== 4) return;
var row = range.getRow();
if (row === 1) return; // ヘッダー行は除外
var isCompleted = sheet.getRange(row, 4).getValue();
var taskName = sheet.getRange(row, 1).getValue();
var assignee = sheet.getRange(row, 2).getValue();
var deadline = sheet.getRange(row, 3).getValue();
if (isCompleted === true) {
// 完了日時をE列に記録
sheet.getRange(row, 5).setValue(new Date());
sheet.getRange(row, 5).setNumberFormat("yyyy/MM/dd HH:mm");
// 期限と完了日時を比較して遅延かどうか判定
var now = new Date();
var deadlineDate = new Date(deadline);
var isLate = now > deadlineDate;
var lateNote = isLate ? '(期限超過)' : '';
// 通知先メールアドレス(管理者)
var notifyEmail = "manager@example.com"; // ← 実際のアドレスに変更
var subject = "【完了通知" + lateNote + "】" + taskName;
var body = assignee + " さんがタスク「" + taskName + "」を完了しました。\n" +
"完了日時:" + Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm') + "\n" +
"期限:" + Utilities.formatDate(deadlineDate, 'Asia/Tokyo', 'yyyy/MM/dd') + "\n" +
lateNote + "\n\n" +
"スプレッドシートで確認してください。\n" +
"https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit";
GmailApp.sendEmail(notifyEmail, subject, body);
Logger.log("通知送信: " + taskName + " (" + assignee + ")");
} else {
// チェックを外したら完了日時をクリア
sheet.getRange(row, 5).clearContent();
}
}
function notifySlack(message, webhookUrl) {
var payload = {
"text": message,
"username": "スプレッドシート進捗Bot",
"icon_emoji": ":white_check_mark:"
};
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload),
"muteHttpExceptions": true // エラーでもスクリプトを止めない
};
var response = UrlFetchApp.fetch(webhookUrl, options);
Logger.log("Slack通知ステータス: " + response.getResponseCode());
}
var slackWebhookUrl = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";
var slackMessage = assignee + " さんが「" + taskName + "」を完了しました " + lateNote;
notifySlack(slackMessage, slackWebhookUrl);
チェックボックスで完了日時を自動記録する(応用技)
function recordCompletionTime(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;
// D列(4列目)以外は無視
if (range.getColumn() !== 4) return;
if (range.getRow() === 1) return;
var row = range.getRow();
var isCompleted = sheet.getRange(row, 4).getValue();
if (isCompleted === true) {
// E列にチェックした瞬間の日時を記録
var now = new Date();
sheet.getRange(row, 5).setValue(now);
sheet.getRange(row, 5).setNumberFormat("yyyy/MM/dd HH:mm");
} else {
// チェックを外したらE列をクリア(やり直し対応)
sheet.getRange(row, 5).clearContent();
}
}
進捗ボードをさらに実用的にする3つの工夫
=FILTER(A2:F, B2:B=G1) ← G1が担当者選択のドロップダウンセル

「ちょっと聞いてみたい」だけでもOK! ツールや業務効率化についての相談をすべて1対1で丁寧にお答えします。 まずはお気軽にメッセージをどうぞ!LINE公式アカウントはこちら!


コメント