

スプレッドシートに、またチームメンバーの入力漏れがある…

指摘するのは手間だし、何度も言うのは気が引けるし、もう疲れた……
日々の業務で、このようなお悩みはありませんか?
スプレッドシートでのタスク管理において、入力漏れの確認と催促は、時間・手間・そして何より精神的なストレスがかかる作業です。
そこで今回は、GAS(Google Apps Script)を使って、入力漏れがあるメンバーへ自動でメールやチャットに通知を送る仕組みをご紹介します!
まずは、実際にどのような動きになるのか、こちらのデモ動画をご覧ください。
(※動画時間約30秒)
動画のように、入力漏れを自動検知して、誰がどこに入力が漏れているかをピンポイントで通知します。
入力漏れの確認と共有を自動化出来れば、こんなメリットがあります。
- 入力漏れがないか確認する時間を0に出来る
- ミスの指摘という精神的負担を0に出来る
- 入力待ちの時間を0にできる
無駄な確認時間がなくなれば、もっと生産的な仕事に時間を使えるはずです。
MASAこの記事を参考に、自動通知システムを構築して、ストレスフリーな管理体制を整えましょう!
仕組みを解説
ここでは、動画では何が起きてるのか分からなかったという方向けに、詳しい仕組みを解説します。
この自動化ツールは、大きく分けて4つのステップで動作しています。
メインで使うのは、GAS(Google Apps Script)です。
GASとは一言で言うと、単純作業を自動化して人件費を大幅に削減できるツールです。
GASを使えば、あなたがメンバーの入力漏れを確認するという単純作業を自動化することができます。
このGASを使ってどういう動きをしてるのか解説していきます。
① 担当者名とその連絡先情報を別のシートに作る
まずは、誰がどの連絡先を持っているのかを管理するシートを作成します。

- A列: 担当者名
- B列: メールアドレス or チャットID
このシートの役割は、入力漏れしてる担当者の連絡先を登録しておくことです。
例えば、田中さんが入力漏れしてても通知する先が分からなかったら通知も送れないですよね。
このシートがあるおかげで、GASは誰にメッセージを飛ばせばいいかを正しく判断できるようになります。
② 通知する内容を作る
次に、送付するメッセージのテンプレートを用意します。
例えば、
「〇〇さん、スプレッドシートの〇〇行目の入力が漏れています。至急ご確認をお願いします。」
といった具合です。
名前や行番号の部分だけを、GASがその都度書き換えて送ってくれるイメージです。
③ GASのトリガーを使って、いつ入力漏れをチェックするか設定
動画内では分かりやすくするために、ボタンをクリックしたら入力漏れをチェックする仕様になっていました。
しかしGASのトリガーという機能を使えば、何時に入力漏れをチェックして自動で通知するかを細かく設定できます。
- 毎朝8時に入力漏れがないかをチェックする
- 毎週金曜日の夕方17時に確認する
こう設定しておけば、人間がパソコンを開いていない時間でも、勝手に仕事をしてくれます。
④ 入力漏れの行があったら自動でメール・チャット通知
設定した時間が来ると、GASが自動で上から順番に入力漏れがないかチェックします。
もし入力漏れを見つけたら、該当する行に記載されている担当者名を①で作ったシートから検索し、②のメッセージを自動で送信します。
注意点として、担当者名自体が空欄の場合は、通知が送れません
理由は、担当者名が空欄だと、誰が入力漏れしてるのかGASにも分からないからです。
ここも完全自動化したい場合は、担当者ごとのシートを新たに作り直すなど、大幅なシートの作り直しが必要です。
MASA以上が、入力漏れのあるメンバーに自動でメール・チャット通知を送る方法です!
具体的なGASのコード
ここでは実際のコードが気になる方向けにコードの紹介します。
以下のコードをコピーして、スプレッドシートの「拡張機能」>「Apps Script」からエディタを開き、以下のコードを貼り付けください。
MASAGASの詳しい設定方法は以下の記事を参照してください!

function onOpen() {
try {
const ui = SpreadsheetApp.getUi();
// 「自動化メニュー」という親メニューを作り、その下に実行ボタンを追加
ui.createMenu('入力漏れチェック')
.addItem('記入漏れチェック&通知を実行', 'sendReminders')
.addToUi();
console.log('カスタムメニューが正常に追加されました。');
} catch (error) {
console.error(`メニューの追加中にエラーが発生しました: ${error.message}`);
console.error(`スタックトレース: ${error.stack}`);
}
}
const CONFIG = {
SHEET_TASK: 'タスク管理',
SHEET_MASTER: '担当者マスタ',
MAIL_SUBJECT: '【自動通知】スプレッドシートの入力漏れがあります',
};
function sendReminders() {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const taskSheet = ss.getSheetByName(CONFIG.SHEET_TASK);
const masterSheet = ss.getSheetByName(CONFIG.SHEET_MASTER);
if (!taskSheet || !masterSheet) {
throw new Error(`必要なシート(${CONFIG.SHEET_TASK} または ${CONFIG.SHEET_MASTER})が見つかりません。`);
}
// 1. マスタデータの一括取得とメールアドレスの紐付け(API呼び出しは最小限に)
const masterData = masterSheet.getDataRange().getValues();
const emailMap = {};
// 見出し行(インデックス0)をスキップしてループ
for (let i = 1; i < masterData.length; i++) {
const [name, email] = masterData[i];
if (name && email) {
emailMap[name] = email;
}
}
// 2. タスク管理シートのデータを一括取得
const taskData = taskSheet.getDataRange().getValues();
const reminders = {};
// 見出し行(インデックス0)をスキップしてループ
for (let i = 1; i < taskData.length; i++) {
const rowNum = i + 1;
const rowData = taskData[i];
const assignee = rowData[0]; // A列: 担当者名
// A列(担当者名)が空欄の行はチェック対象外としてスキップ
if (!assignee) continue;
// 【重要ロジック】A列より右側(インデックス1以降)の全セルを配列として抽出
const otherColumns = rowData.slice(1);
// someメソッドを使用して、抽出したセルの中に1つでも空文字("")があるか判定
const hasEmpty = otherColumns.some(cell => cell === "");
if (hasEmpty) {
if (!reminders[assignee]) {
reminders[assignee] = [];
}
// B列(インデックス1)をタスク名として扱う(存在しない場合は代替テキスト)
const taskName = rowData[1] ? rowData[1] : 'タスク名未入力';
reminders[assignee].push(`${rowNum}行目 (${taskName})`);
}
}
// 3. 担当者ごとにまとめてメールを送信
for (const [assignee, tasks] of Object.entries(reminders)) {
const email = emailMap[assignee];
if (!email) {
console.error(`警告: ${assignee} のメールアドレスがマスタに登録されていません。`);
continue;
}
const missingList = tasks.join('\n・');
const body = `${assignee} さん\n\nお疲れ様です。\n以下の行において、必須項目の入力漏れが検知されました。\n\n・${missingList}\n\nお手数ですが、スプレッドシートをご確認の上、空欄を埋めていただきますようお願いいたします。`;
// メール送信実行
GmailApp.sendEmail(email, CONFIG.MAIL_SUBJECT, body);
console.log(`${assignee} 宛にリマインドメールを送信しました。`);
}
console.log('すべての処理が正常に完了しました。');
} catch (error) {
// 予期せぬエラーが発生した場合はStackdriver Loggingに詳細を出力
console.error(`エラーが発生しました: ${error.message}`);
console.error(`スタックトレース: ${error.stack}`);
}
}JavaScript導入する際の注意点
GASを使った自動化は非常に便利ですが、運用していく上でいくつか気をつけておくべきポイントがあります。
少しシートをいじっただけでGASが動かなくなる
「見やすいように1列追加した」
「管理しやすいようにシート名を変えた」
など、ちょっとした親切心でシートをいじると、GASは全く動かなくなります。
GASは、すごく微妙なバランスで動いてるので、少しシートの構造をいじっただけで急にGASが止まる可能性があります。
昨日まで動いていたのに突然のエラーで動かなくなる
先ほどの例は、自分がシートをいじったからという理由でわかりやすいですが、
「何も変えていないのに、急に通知が来なくなった」
という現象もよく起こります。
これにはさまざまな理由がありますが、一番多いのはGASの利用制限です。
GASの利用制限は設計次第で防ぐことが出来るので、利用制限も考慮した設計にすることが求められます。
自分で実装することに不安の方はご連絡ください
今回はコピペで使えるコードをご紹介しましたが、実際の業務で使っているシートは、もっと複雑なことが多いですよね。

記事を読んでみたけど、自分にできるか不安…

エラーが出て業務が止まってしまったらどうしよう…
そんな方は、ぜひ私にお任せください!
以下のようなご要望にも柔軟に対応いたします。
- うちの会社に合わせてカスタマイズしてほしい
- メールではなくLINEやChatWorkに通知を飛ばしたい
- もっと複雑な条件で動かしたい
あなたの具体的な悩みをヒアリングしながら、あなたに独自のシートをオーダーメイドでカスタマイズします。
まだボンヤリとした悩みでも問題ございません。
まずはお気軽にご連絡ください!
まとめ:自動化で確認と催促のストレスから解放されよう!
今回は、GASを活用してスプレッドシートの入力漏れを自動で検知し、メンバーへ通知する仕組みについて解説しました。
誰かが入力し忘れるたびに、シートを目視で隅々まで確認し、気を遣いながら個別に催促のメッセージを送る…。
そんな、時間も掛かればストレスもかかる仕事とは、今日でおさらばしましょう。
GASを使ってこの仕組みを構築してしまえば、システムがあなたの代わりに24時間・文句も言わずに入力漏れのチェックとリマインドを行ってくれます。
- 入力漏れを確認する時間を0に
- ミスの指摘という精神的負担を0に
- 入力待ちによる業務の停滞を0に
これらを手にできれば、あなたは本来注力すべき業務にもっと集中できるようになるはずです。
今回ご紹介した仕組みを参考に、ぜひご自身のチームでも業務の自動化の第一歩を踏み出してみてください。
また、
「自分で設定するのが不安」
「もっと自社の形にカスタマイズしたい」
という方は、一度私にご相談ください
どうすればあなたの業務がもっと楽になるか具体的なアドバイスをさせていただきます!