【GASで自動化】Googleスプレッドシートの定型レポート作成を効率化!日報・週報の手間をゼロにする方法

自動化事例

「毎日の売上報告、毎週の進捗確認…」
同じような数字を転記するだけのレポート作成に、貴重な時間を奪われていませんか?

手作業でのレポート作成は、時間がかかるだけでなく、コピー&ペーストのミスや計算間違いといったヒューマンエラーの温床にもなりがちです。また、作成方法が担当者しか分からない「属人化」に陥ってしまうケースも少なくありません。

もし、これらの定型レポートが ”何もしなくても、毎朝グラフ付きで自動作成され、関係者にメールで届く” としたら、どうでしょうか。

この記事では、多くの企業で利用されているGoogleスプレッドシートと、その機能を拡張するGAS(Google Apps Script)を使って、日々のレポート作成を自動化する具体的な手順を解説します。

プログラミングの経験がない方でも、コピー&ペーストで実践できるように説明しますので、ぜひ最後までご覧ください。

なぜ今、レポート作成の自動化が必要なのか?

そもそも、なぜ手作業のレポート作成が問題なのでしょうか。改めて整理してみましょう。

  • 時間の浪費: 毎日30分かけていたレポート作成は、1ヶ月(20営業日)で10時間、年間では120時間にも及びます。この時間を他の業務に充てられれば、大きな成果を生み出せる可能性があります。
  • ミスの発生: 手作業である以上、入力ミスや計算式の参照ズレなどのヒューマンエラーを完全になくすことは困難です。誤った数値に基づいた意思決定は、ビジネスに深刻な影響を与えかねません。
  • 属人化のリスク: 特定の担当者しかレポートの作成方法を知らない場合、その担当者が不在の際に業務が滞ってしまいます。作成プロセスがブラックボックス化し、改善も進みません。

これらの課題は、レポート作成を「自動化」することで一挙に解決できます。自動化によって得られるメリットは計り知れません。

  • 業務効率化による生産性向上: 担当者は単純作業から解放され、分析や改善提案といった付加価値の高い業務に集中できます。
  • ヒューマンエラーの撲滅: 機械的に処理されるため、人為的なミスがなくなり、レポートの正確性が飛躍的に向上します。
  • 迅速な情報共有: 必要な情報を、決まった時間に、決まったフォーマットで関係者に届けることができ、組織全体の意思決定をスピードアップさせます。

では、具体的にどのように自動化を進めていくのでしょうか。

レポート自動化の全体像

今回は、GoogleスプレッドシートとGAS(Google Apps Scriptという、Googleアカウントさえあれば誰でも無料で使えるツールを活用します。

全体の流れは非常にシンプルです。

  1. データの入力: 日々の受注記録などをスプレッドシートに蓄積します。
  2. データの集計と可視化: 入力されたデータを関数で集計し、比較分析やグラフ作成を自動で行います。
  3. GASの実行: あらかじめ設定した時刻になると、GAS(プログラム)が自動で動き出します。
  4. メールの送信: 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: レポート用のグラフを作成する

    次に、数値だけでは分かりづらい「売上の推移」を視覚的に表現するグラフを作成します。

    1. 「日次レポート」シートで、QUERY関数で出力された日付の列(D列)と、合計金額を計算する列(J列)を選択します。
    2. メニューの「挿入」>「グラフ」をクリックします。
    3. グラフエディタが表示されたら、「グラフの種類」で「折れ線グラフ」を選択します。
    4. グラフのタイトルを「日別売上推移」などに変更し、見やすい位置に配置します。

    このグラフを、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を使って、定型レポートの作成と配信を自動化する方法を、より実践的な「比較分析」と「グラフの可視化」まで含めて解説しました。

    1. QUERY関数で集計表を作成し、さらに前日比を計算して分析要素を追加
    2. シート上に売上推移のグラフを自動描画させる
    3. GASでサマリーデータとグラフ画像をHTMLメールに埋め込んで送信
    4. トリガー機能で、毎日決まった時間にプログラムを自動実行

    この仕組みを一度構築するだけで、あなたは日々の面倒なレポート作成業務から永久に解放されます。創出された時間で、データの分析や次のアクションの検討など、本来あなたがやるべき、より付加価値の高い仕事に集中できるようになるでしょう。

    「プログラミングは難しそう…」と感じていた方も、まずはこの記事を真似て、身近な日報作成から自動化を試してみてはいかがでしょうか。その小さな一歩が、あなたの仕事のスタイルを大きく変えるきっかけになるはずです。

    ※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。

    テンプレートDL用フォーム