経営ダッシュボード、まだ手作業で作ってるの?
ミドリ: タツヤさん、毎月の経営会議の前になるとExcelでレポート作るのに丸1日潰れるんですけど、これなんとかならないですか……。
タツヤ: あるあるだね。売上データをコピペして、グラフ作って、前月比を計算して、体裁を整えて……。しかも「数字合ってる?」って毎回聞かれるやつでしょ。
ミドリ: まさにそれです。で、指摘されて修正してまたPDF出し直して……。
タツヤ: その作業、Google Apps Script(GAS)で全部自動化できる。しかもBIツールにお金かけなくても、Googleスプレッドシート+GASで経営ダッシュボードが無料で作れるんだよ。
ミドリ: 無料!? TableauとかLooker Studioじゃなくて?
タツヤ: もちろんそれらも優秀だけど、中小企業にとっては「すでに使ってるGoogleスプレッドシートの延長で動く」のが最大のメリット。学習コストも導入コストもほぼゼロ。
経営ダッシュボードで可視化すべき5つのKPI
ミドリ: まずどんなデータを可視化すればいいんですか?
タツヤ: 業種によって多少変わるけど、中小企業なら最低限この5つは押さえたい。
| KPI | 意味 | 更新頻度 |
|---|---|---|
| 月次売上・粗利 | 収益の基本指標 | 日次 |
| キャッシュフロー | 手元資金の推移 | 日次 |
| 受注残・パイプライン | 将来の売上見込み | 週次 |
| 顧客獲得コスト(CAC) | 新規顧客1件あたりの獲得費用 | 月次 |
| 従業員1人あたり売上 | 生産性の指標 | 月次 |
ミドリ: これ全部、今はExcelの別々のファイルに散らばってます……。
タツヤ: そこが問題の根っこ。GASダッシュボードの最大の価値は、散在するデータを1つのシートに自動集約することなんだ。
GASダッシュボードのアーキテクチャ
ミドリ(thinking): 具体的にどういう仕組みで動くんですか?
タツヤ: 3層構造で考えるとわかりやすい。
第1層:データ収集
タツヤ(nodding): まずデータをどこから引っ張ってくるか。GASなら以下のデータソースに全部アクセスできる。
- Googleスプレッドシート — 売上管理表、経費管理表、勤怠データ
- Google Forms — 日報・週報の入力データ
- 外部API — freee会計、マネーフォワード、Stripe、Salesforceなど
- BigQuery — 大量のログデータや分析用データ
- Gmail — 受注通知メールの自動パース
ミドリ: freeeのAPIからデータ取れるんですか!?
タツヤ: もちろん。freeeのAPIはRESTfulで、GASのUrlFetchAppで簡単に叩ける。OAuth2の認証もライブラリがあるから、10行程度で接続できる。
第2層:データ加工
タツヤ: 集めたデータをそのまま表示しても意味がない。加工して初めてKPIになる。
- 前月比・前年同月比の自動計算
- 移動平均によるトレンド算出
- 部門別・プロジェクト別のクロス集計
- 異常値の自動検出(前月比±30%以上で赤字ハイライト)
ミドリ: 異常値の自動検出って便利ですね。数字がおかしかったらすぐ気づける。
タツヤ: 経営判断で一番怖いのは「気づかないこと」だからね。
第3層:可視化と配信
タツヤ: 最後に可視化。スプレッドシートの標準チャート機能で十分だけど、GASを使うともっと柔軟にできる。
| チャート種類 | 用途 | GASでの実装 |
|---|---|---|
| 折れ線グラフ | 売上推移、トレンド把握 | Charts.newLineChart() |
| 棒グラフ | 部門別比較、月別比較 | Charts.newBarChart() |
| 円グラフ | 構成比の把握 | Charts.newPieChart() |
| スコアカード | 単一KPIの強調表示 | セル書式+条件付き書式 |
| スパークライン | セル内ミニグラフ | SPARKLINE関数 |
ミドリ(thinking): スパークラインって何ですか?
タツヤ: セルの中に小さな折れ線グラフを埋め込める機能。数字の横にトレンドが見えるから、一覧表の情報密度が一気に上がる。経営者に大人気の機能だよ。
実装ステップ:売上ダッシュボードを作ってみよう
ミドリ: 実際にどう作るか教えてください!
タツヤ: よし、売上ダッシュボードを例に4ステップで作っていこう。
ステップ1:データ収集スクリプト
タツヤ(nodding): まず複数のスプレッドシートからデータを集めるスクリプト。こんな構成になる。
function collectSalesData() {
// 売上管理シートからデータ取得
const salesSheet = SpreadsheetApp.openById('シートID');
const salesData = salesSheet.getSheetByName('売上').getDataRange().getValues();
// freee APIから経費データ取得
const expenses = fetchFreeeExpenses();
// ダッシュボードシートに書き込み
const dashboard = SpreadsheetApp.getActiveSpreadsheet();
updateDashboardData(dashboard, salesData, expenses);
}
ミドリ: シートIDってどこで確認するんですか?
タツヤ: スプレッドシートのURLの/d/と/editの間の文字列がシートID。複数部門のシートから自動で引っ張ってこれるんだ。
ステップ2:KPI計算ロジック
タツヤ: 集めたデータからKPIを計算する関数を作る。
function calculateKPIs(salesData, expenseData) {
const currentMonth = getCurrentMonthData(salesData);
const previousMonth = getPreviousMonthData(salesData);
return {
revenue: sum(currentMonth.sales),
grossProfit: sum(currentMonth.sales) - sum(currentMonth.costs),
growthRate: (sum(currentMonth.sales) / sum(previousMonth.sales) - 1) * 100,
cac: sum(expenseData.marketing) / currentMonth.newCustomers
};
}
ミドリ: 前月比の計算まで自動でやってくれるのか……。
ステップ3:自動更新トリガーの設定
タツヤ: ここがGASの真骨頂。時間ベースのトリガーで、ダッシュボードを毎朝自動更新できる。
function createDailyTrigger() {
ScriptApp.newTrigger('updateDashboard')
.timeBased()
.everyDays(1)
.atHour(7) // 毎朝7時に実行
.create();
}
ミドリ: 毎朝7時に自動更新! 出社したらもう最新データが揃ってるってことですか?
タツヤ(nodding): その通り。経営者が朝スマホでスプレッドシートを開いたら、昨日までの数字が全部反映されてる。
ステップ4:通知の自動送信
タツヤ: さらにSlackやメールで自動通知も組める。
function sendDailyReport() {
const kpis = calculateKPIs();
const message = `📊 本日のKPIサマリー\n`
+ `売上: ¥${kpis.revenue.toLocaleString()}\n`
+ `粗利率: ${kpis.grossMargin}%\n`
+ `前月比: ${kpis.growthRate > 0 ? '+' : ''}${kpis.growthRate}%`;
// Slack通知
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
method: 'post',
payload: JSON.stringify({ text: message })
});
// メール通知
MailApp.sendEmail('[email protected]', '日次KPIレポート', message);
}
ミドリ: Slackに毎朝KPIが流れてくるの、めちゃくちゃ便利ですね。
タツヤ: 異常値があったときだけ通知する設定もできるよ。「売上が前日比20%以上減った場合だけアラート」みたいな。ノイズを減らして本当に重要な情報だけ届ける。
導入効果を数字で見る
ミドリ: 実際にGASダッシュボードを導入すると、どれくらい効果あるんですか?
タツヤ: 従業員30名規模の企業での実績データをまとめたよ。
| 指標 | 導入前 | 導入後 | 改善効果 |
|---|---|---|---|
| 月次レポート作成時間 | 8時間/月 | 0時間(自動生成) | 100%削減 |
| データ集計の手作業 | 週3時間 | 週0.5時間(確認のみ) | 83%削減 |
| 経営会議の準備時間 | 4時間/回 | 30分/回 | 87%削減 |
| データの鮮度 | 月1回更新 | 毎日自動更新 | リアルタイム化 |
| 数値の転記ミス | 月2〜3件 | 0件 | 100%削減 |
| 意思決定のスピード | 翌月判明 | 当日把握 | 30日→0日 |
ミドリ: レポート作成がゼロ時間って衝撃ですね……。
タツヤ: 年間で計算すると、レポート作成だけで年96時間の削減。時給3,000円として約29万円。しかもGASの開発コストは初期に20〜30時間程度だから、2〜3ヶ月で元が取れる計算になる。
運用の注意点
ミドリ: 気をつけるべきことはありますか?
タツヤ: 3つある。まず指標は最大10個に絞ること。50個も並べると誰も見なくなる。次にKPIの定義を明文化すること。「売上」が受注ベースなのか入金ベースなのか、部門で認識がズレてるとダッシュボードへの信頼が崩れる。最後にメンテナンス体制。作った人が退職してスクリプトが放置されるケースが多いから、最低2人がメンテできるようにしておくこと。
ミドリ: GASの実行制限も気になります。
タツヤ(smiling): 無料アカウントだと1回の実行が6分以内という制限がある。超えそうなら処理を分割して複数トリガーでリレーする方法があるけど、中小企業のダッシュボードなら大抵6分以内に収まるよ。
まとめ:経営判断のスピードを変える
ミドリ: 今日の話をまとめると、どうなりますか?
タツヤ: GASで経営ダッシュボードを作る意味は、レポート作成の自動化だけじゃない。本当の価値は経営判断のスピードが変わること。月に1回しか見えなかったデータが毎日見える。異常があれば即座にアラートが飛ぶ。
ミドリ: 「先月の数字が悪かった」じゃなくて、「今日の数字がおかしいから今すぐ対策しよう」になるってことですね。
タツヤ(nodding): その通り。しかもGoogleスプレッドシートだから、スマホでもタブレットでも見られる。経営者がいつでもどこでもリアルタイムの数字を確認できる環境が、追加コストゼロで手に入る。
ミドリ: BIツールに月額数万円払う前に、まずGASで試してみるのが正解ですね。
タツヤ: まさに。GASでやれることの限界が見えてから、Looker StudioやTableauに移行しても遅くない。スモールスタートが大事だよ。
次のアクション
GASダッシュボードの構築を始めてみましょう。
- 毎月のレポート作成にかかっている時間を計測する
- 経営会議で毎回議論する指標を5〜10個リストアップする
- 各指標のデータソース(どのシートのどの列にあるか)を洗い出す
- 具体的なGASダッシュボードの設計・構築支援は、Shimanto AI Solutionsの業務自動化コンサルティングへ