GAS×スプレッドシートで作る営業ダッシュボード|日報入力だけで自動更新・無料・実装コードつき
「今月の営業進捗、今どこまで?」——この確認作業に、毎週30分以上かかっていませんか?
担当者に声をかけてスプレッドシートを開き、バラバラの入力を手動でまとめる。この繰り返しは、忙しい管理職にとって地味に重いタスクです。
この記事では、Google Apps Script(GAS)× Googleスプレッドシートを使って、営業担当者が日報を入力するだけでダッシュボードが自動更新される仕組みを実装する方法を解説します。コードはすべて掲載しているので、コピペで動かせます。
この記事でできること
- 営業担当者が「日報入力シート」に入力するだけで進捗が自動集計される
- 担当者別・ステータス別の進捗をダッシュボードシートで確認できる
- 1時間おきに自動更新(手動操作一切不要)
- 初期費用0円・追加ツール不要(Googleアカウントだけ)
事前準備(5分)
必要なのはGoogleアカウントだけです。特別な知識は不要です。
- Googleアカウント(無料)
- Googleスプレッドシートの基本操作ができること
STEP 1:スプレッドシートの準備
新しいGoogleスプレッドシートを作成し、以下の2つのシートを用意します。
シート1:日報入力
1行目に以下のヘッダーを入力します。
| A列 | B列 | C列 | D列 | E列 | F列 |
|---|---|---|---|---|---|
| 日付 | 担当者 | 顧客名 | ステータス | 金額(円) | 備考 |
| 2026/04/01 | 田中 | 〇〇商事 | 受注 | 150000 | 3ヶ月契約 |
ステータスは「商談中」「受注」「失注」の3種類に統一してください。表記ゆれがあるとコードが正しく集計できません。
シート2:ダッシュボード
シート名を「ダッシュボード」にしておくだけでOKです。中身はGASが自動で書き込みます。
STEP 2:GASのコードを貼り付ける
スプレッドシートのメニューから「拡張機能 → Apps Script」を選択します。エディタが開いたら、デフォルトのコードをすべて削除して以下のコードを貼り付け、保存してください。
/**
* 営業進捗ダッシュボード自動更新スクリプト
*/
function updateDashboard() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const inputSheet = ss.getSheetByName('日報入力');
const dashSheet = ss.getSheetByName('ダッシュボード');
if (!inputSheet || !dashSheet) {
Logger.log('シート名を確認してください');
return;
}
const data = inputSheet.getDataRange().getValues();
if (data.length < 2) { Logger.log('データなし'); return; }
const rows = data.slice(1).filter(row => row[0] !== '');
const now = new Date();
const thisYear = now.getFullYear();
const thisMonth = now.getMonth();
const thisMonthRows = rows.filter(row => {
const date = new Date(row[0]);
return date.getFullYear() === thisYear && date.getMonth() === thisMonth;
});
const summary = {};
let totalAmount = 0;
thisMonthRows.forEach(row => {
const person = row[1];
const status = row[3];
const amount = Number(row[4]) || 0;
if (!person) return;
if (!summary[person]) {
summary[person] = { '商談中': 0, '受注': 0, '失注': 0, '受注金額': 0 };
}
if (status in summary[person]) { summary[person][status]++; }
if (status === '受注') {
summary[person]['受注金額'] += amount;
totalAmount += amount;
}
});
dashSheet.clearContents();
const monthLabel = thisYear + '年' + (thisMonth + 1) + '月 営業進捗サマリー';
dashSheet.getRange('A1').setValue(monthLabel);
dashSheet.getRange('A1').setFontSize(14).setFontWeight('bold');
dashSheet.getRange('G1').setValue('最終更新: ' + now.toLocaleString('ja-JP'));
const headers = ['担当者', '商談中', '受注', '失注', '受注率', '受注金額(円)'];
dashSheet.getRange(3, 1, 1, headers.length).setValues([headers]);
dashSheet.getRange(3, 1, 1, headers.length)
.setBackground('#1a73e8').setFontColor('#ffffff').setFontWeight('bold');
const outputRows = Object.entries(summary).map(([person, stats]) => {
const total = stats['商談中'] + stats['受注'] + stats['失注'];
const winRate = total > 0 ? Math.round((stats['受注'] / total) * 100) + '%' : '-';
return [person, stats['商談中'], stats['受注'], stats['失注'], winRate, stats['受注金額']];
});
if (outputRows.length > 0) {
dashSheet.getRange(4, 1, outputRows.length, headers.length).setValues(outputRows);
for (let i = 0; i < outputRows.length; i++) {
const color = i % 2 === 0 ? '#f8f9fa' : '#ffffff';
dashSheet.getRange(4 + i, 1, 1, headers.length).setBackground(color);
}
}
const totalRow = 4 + outputRows.length;
dashSheet.getRange(totalRow, 1).setValue('合計');
dashSheet.getRange(totalRow, 6).setValue(totalAmount);
dashSheet.getRange(totalRow, 1, 1, headers.length)
.setBackground('#e8f0fe').setFontWeight('bold');
Logger.log('ダッシュボード更新完了: ' + now.toLocaleString('ja-JP'));
}
STEP 3:トリガーを設定して自動化する
このままでは手動実行しかできません。1時間おきに自動実行するトリガーを設定しましょう。同じファイルの末尾に以下の関数を追加します。
/**
* 自動実行トリガーを設定する(1回だけ実行すればOK)
*/
function setAutoTrigger() {
// 既存トリガーを削除(重複防止)
ScriptApp.getProjectTriggers().forEach(t => ScriptApp.deleteTrigger(t));
// 1時間おきに updateDashboard を実行
ScriptApp.newTrigger('updateDashboard')
.timeBased()
.everyHours(1)
.create();
Logger.log('トリガーを設定しました(1時間おき)');
}
コードを保存後、関数の選択ドロップダウンで「setAutoTrigger」を選んで▶ボタンで1回だけ実行します。これでトリガーが登録され、以降は自動で動き続けます。
トリガーの確認方法
左メニューの時計アイコン「トリガー」から設定済みのトリガーを確認できます。「updateDashboard - 1時間ごと」と表示されていれば設定完了です。
STEP 4:動作確認
「日報入力」シートにテストデータを数行入力してから、GASエディタで「updateDashboard」を手動実行します。「ダッシュボード」シートに担当者別の集計が表示されれば成功です。
うまく動かないときのチェックリスト
- シート名の確認:「日報入力」「ダッシュボード」と完全一致しているか(スペース・全角半角に注意)
- ステータスの表記ゆれ:「商談中」「受注」「失注」以外の表記が混入していないか
- 日付のフォーマット:日付列はテキスト型ではなく日付型で入力されているか
- 権限の許可:初回実行時にGoogleアカウントへのアクセス許可ダイアログが表示されます。「許可」を選んでください
応用:さらに便利にする拡張アイデア
この仕組みは土台にすぎません。以下の拡張でさらに強力になります。
- Slack通知連携:毎週月曜朝9時にサマリーをSlackチャンネルへ自動投稿
- メール送信:月末に営業全員に個別レポートをGmailで自動送信
- グラフの自動生成:スプレッドシートのグラフAPIで担当者別棒グラフを自動作成
- Googleフォーム連携:担当者がフォームで入力すると日報シートに自動記録
これらの実装方法は順次記事化していきます。「通知も自動化したい」という方はサイトをブックマークしておいてください。
まとめ
今回実装したのは以下の仕組みです。
- 「日報入力」シートへの入力をもとに「ダッシュボード」シートが自動集計・更新される
- 担当者別・ステータス別・受注率・受注金額を一覧で可視化
- トリガー設定で1時間おきの自動実行を実現
「すごいけど自分の環境に合わせるのが難しそう」「自社の業務フローに合わせてカスタマイズしたい」という方は、お気軽にご相談ください。業務フロー設計からGASの実装・運用定着まで一気通貫でサポートします。
.jpg)

コメントを残す