「毎日の売上報告、毎週の進捗確認…」
同じような数字を転記するだけのレポート作成に、貴重な時間を奪われていませんか?
手作業でのレポート作成は、時間がかかるだけでなく、コピー&ペーストのミスや計算間違いといったヒューマンエラーの温床にもなりがちです。また、作成方法が担当者しか分からない「属人化」に陥ってしまうケースも少なくありません。
もし、これらの定型レポートが ”何もしなくても、毎朝グラフ付きで自動作成され、関係者にメールで届く” としたら、どうでしょうか。
この記事では、多くの企業で利用されているGoogleスプレッドシートと、その機能を拡張するGAS(Google Apps Script)を使って、日々のレポート作成を自動化する具体的な手順を解説します。
プログラミングの経験がない方でも、コピー&ペーストで実践できるように説明しますので、ぜひ最後までご覧ください。
なぜ今、レポート作成の自動化が必要なのか?
そもそも、なぜ手作業のレポート作成が問題なのでしょうか。改めて整理してみましょう。
- 時間の浪費: 毎日30分かけていたレポート作成は、1ヶ月(20営業日)で10時間、年間では120時間にも及びます。この時間を他の業務に充てられれば、大きな成果を生み出せる可能性があります。
- ミスの発生: 手作業である以上、入力ミスや計算式の参照ズレなどのヒューマンエラーを完全になくすことは困難です。誤った数値に基づいた意思決定は、ビジネスに深刻な影響を与えかねません。
- 属人化のリスク: 特定の担当者しかレポートの作成方法を知らない場合、その担当者が不在の際に業務が滞ってしまいます。作成プロセスがブラックボックス化し、改善も進みません。
これらの課題は、レポート作成を「自動化」することで一挙に解決できます。自動化によって得られるメリットは計り知れません。
- 業務効率化による生産性向上: 担当者は単純作業から解放され、分析や改善提案といった付加価値の高い業務に集中できます。
- ヒューマンエラーの撲滅: 機械的に処理されるため、人為的なミスがなくなり、レポートの正確性が飛躍的に向上します。
- 迅速な情報共有: 必要な情報を、決まった時間に、決まったフォーマットで関係者に届けることができ、組織全体の意思決定をスピードアップさせます。
では、具体的にどのように自動化を進めていくのでしょうか。
レポート自動化の全体像
今回は、GoogleスプレッドシートとGAS(Google Apps Script)という、Googleアカウントさえあれば誰でも無料で使えるツールを活用します。
全体の流れは非常にシンプルです。
- データの入力: 日々の受注記録などをスプレッドシートに蓄積します。
- データの集計と可視化: 入力されたデータを関数で集計し、比較分析やグラフ作成を自動で行います。
- GASの実行: あらかじめ設定した時刻になると、GAS(プログラム)が自動で動き出します。
- メールの送信: GASが集計結果とグラフをメール本文に埋め込み、自動で送信します。

一度この仕組みを構築してしまえば、あとは元となるデータを入力していくだけで、日々のレポート作成業務が完了します。
【実践】グラフ付き売上レポートを自動生成してみよう
ここからは、具体的な売上レポートを例に、自動化の仕組みを構築する手順を解説していきます。
ステップ1: データの準備と「比較・分析」できる集計シートの作成
まずは、元になるデータと、それを集計・分析するシートを用意します。
1. 元データシートの準備
日々の取引データを記録するためのシートを作成します。ここでは「受注台帳」というシート名で、以下のような表を用意しました。

2. 集計・分析用シートの作成
次に、この元データを集計し、さらに前日比の分析まで行うシートを「日次レポート」という名前で作成します。
① 日別・カテゴリ別売上の集計
集計にはQUERY(クエリ)関数を使用します。基本的な構文や使い方は、こちらの記事で詳しく解説しています。
「日次レポート」シートのD1セルに、以下の関数を入力してください。
=QUERY(
'受注台帳'!A:E,
"SELECT B, SUM(E) GROUP BY B PIVOT D",
1
)
② 前日比サマリーの作成
次に、メールに記載するサマリー(要約)部分を作成します。「日次レポート」シートのA2セルから以下のように入力します。
A列 | B列 | |
2 | 本日合計 | =SUM(E2:I2) |
3 | 昨日合計 | =SUM(E3:I3) |
4 | 前日比 | =B2-B3 |
5 | 前日比率 | =IFERROR(B4/B3, 0) |
B5セルのIFERRORは、昨日の売上が0円だった場合にエラーが出るのを防ぐためのものです。また、B5セルの表示形式を「書式」>「数字」>「パーセント」に変更しておきましょう。
③ グラフ用の日別合計列を追加する
後のステップでグラフを作成するために、日別の合計金額を計算する列を追加します。
QUERY関数の集計表がI列
まであると仮定し、J列に合計を計算します。
- J1セルに日別合計という見出しを入力します。
- J2セルに、以下の関数を入力します。
=ARRAYFORMULA(
IF(D2:D="", "",
E2:E+F2:F+G2:G+H2:H+I2:I
)
)

これで、レポートの元となる数値の準備ができました。
ステップ2: レポート用のグラフを作成する
次に、数値だけでは分かりづらい「売上の推移」を視覚的に表現するグラフを作成します。
- 「日次レポート」シートで、QUERY関数で出力された日付の列(D列)と、合計金額を計算する列(J列)を選択します。
- メニューの「挿入」>「グラフ」をクリックします。
- グラフエディタが表示されたら、「グラフの種類」で「折れ線グラフ」を選択します。
- グラフのタイトルを「日別売上推移」などに変更し、見やすい位置に配置します。

このグラフを、GASを使って画像としてメールに埋め込みます。
ステップ3: グラフ付きレポートメールを作成・送信するGASを書く
いよいよ、これまでの準備を繋ぎ合わせるGASを記述します。
GASの基本的な使い方やスクリプトエディタの開き方については、こちらの記事をご覧ください。
スクリプトエディタを開いたら、元々書かれているコードをすべて消し、以下のコードを貼り付けてください。
// ===============================================
// 設定項目:ご自身の環境に合わせて変更してください
// ===============================================
// 送信するメールの宛先(,区切りで複数指定可)
const TO_EMAIL = 'report@example.com';
// メールの件名
const MAIL_SUBJECT = '【日次】売上レポート';
// レポートが記載されているシート名
const REPORT_SHEET_NAME = '日次レポート';
// サマリーが記載されているセルの範囲
const SUMMARY_RANGE = 'B2:B5';
// ===============================================
// メイン処理:ここから下は変更不要です
// ===============================================
/**
* グラフ付きのレポートメールを送信する関数
*/
function sendReportWithChart() {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(REPORT_SHEET_NAME);
if (!sheet) {
console.error('シートが見つかりません: ' + REPORT_SHEET_NAME);
return;
}
// サマリーデータを取得
const summaryValues = sheet.getRange(SUMMARY_RANGE).getDisplayValues();
const todaysSales = summaryValues[0][0];
const yesterdaysSales = summaryValues[1][0];
const change = summaryValues[2][0];
const changePercent = summaryValues[3][0];
// シートの最初のグラフを画像として取得
const chart = sheet.getCharts()[0];
if (!chart) {
console.error('グラフが見つかりません。');
return;
}
const chartBlob = chart.getAs('image/png').setName('salesChart');
// 今日の日付をYYYY/MM/DD形式で取得
const today = new Date();
const formattedDate = Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy/MM/dd');
// HTML形式のメール本文を作成
const htmlBody = `
<html>
<body style="font-family: sans-serif;">
<p>${formattedDate} の売上レポートをお送りします。</p>
<hr>
<h2 style="color: #444;">サマリー</h2>
<table style="border-collapse: collapse;">
<tr><td style="padding: 5px; background-color: #f2f2f2; border: 1px solid #ddd;">本日合計</td><td style="padding: 5px; border: 1px solid #ddd; text-align: right;"><b>${todaysSales} 円</b></td></tr>
<tr><td style="padding: 5px; background-color: #f2f2f2; border: 1px solid #ddd;">前日比</td><td style="padding: 5px; border: 1px solid #ddd; text-align: right;">${change} 円 (${changePercent})</td></tr>
</table>
<h2 style="color: #444;">売上推移グラフ</h2>
<p><img src="cid:salesChart"></p>
<hr>
<p>詳細は以下のスプレッドシートをご確認ください。<br>
<a href="${ss.getUrl()}">スプレッドシートを開く</a>
</p>
</body>
</html>
`;
// メールを送信
MailApp.sendEmail({
to: TO_EMAIL,
subject: MAIL_SUBJECT + '(' + formattedDate + ')',
htmlBody: htmlBody,
inlineImages: {
salesChart: chartBlob
}
});
console.log('グラフ付きレポートメールを送信しました。');
} catch (e) {
console.error('エラーが発生しました: ' + e.toString());
}
}
ステップ4: 決まった時間に自動で実行する設定(トリガー)
最後に、作成したGASを毎日決まった時間に自動で実行するための「トリガー」を設定します。
詳しい設定方法は、こちらの記事を参考にしてください。
設定の際は、「実行する関数」として sendReportWithChart を選択してください。

これで全ての設定が完了です!設定した時間になると、スプレッドシートの集計結果からサマリーとグラフ付きのレポートメールが自動で送信されるようになります。

まとめ
今回は、GoogleスプレッドシートとGASを使って、定型レポートの作成と配信を自動化する方法を、より実践的な「比較分析」と「グラフの可視化」まで含めて解説しました。
- QUERY関数で集計表を作成し、さらに前日比を計算して分析要素を追加
- シート上に売上推移のグラフを自動描画させる
- GASでサマリーデータとグラフ画像をHTMLメールに埋め込んで送信
- トリガー機能で、毎日決まった時間にプログラムを自動実行
この仕組みを一度構築するだけで、あなたは日々の面倒なレポート作成業務から永久に解放されます。創出された時間で、データの分析や次のアクションの検討など、本来あなたがやるべき、より付加価値の高い仕事に集中できるようになるでしょう。
「プログラミングは難しそう…」と感じていた方も、まずはこの記事を真似て、身近な日報作成から自動化を試してみてはいかがでしょうか。その小さな一歩が、あなたの仕事のスタイルを大きく変えるきっかけになるはずです。
※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。