GASで日報を自動集計する仕組みの作り方

GASで日報を自動集計する仕組みの作り方

この記事の要点

  • 集計のしやすさは「入力を1行1レコードに揃える設計」でほぼ決まる
  • フォーム蓄積・日次集計・自動送信をGASの3スクリプトで実装。コード掲載
  • 実行停止やデータ破損を防ぐ設定を4つの失敗例で解説

毎日集まる日報を、担当者が手作業で表に転記して集計していませんか。この記事は、日報を毎日出しているのに集計だけが手作業で残っている、月末に転記でまとまった時間を取られている、という中小企業の管理者・情シス担当の方に向けた記事です。

Googleスプレッドシートとレゴブロックのように組み合わせられるGAS(Google Apps Script)を使えば、この転記と集計を丸ごと自動化できます。GASとは、Googleのサービスを自動で動かすための無料の仕組みのことです。

Googleアカウントがあれば誰でも無料で利用でき、Google Workspaceの統合、自動化、拡張のためのローコードプラットフォームです。読み終わる頃には、コピペで動くコードをもとに「入力が集まる→毎朝集計される→関係者にメールが届く」という流れを自分で組める状態を目指します。

日報のテンプレート設計そのものはAI日報を自動化するプロンプトと運用術で扱っているので、入力項目づくりから始めたい方は先にそちらを見てください。

GASで日報を自動集計する仕組みの作り方
Contents / 目次
  1. 結論。日報の自動集計は3つの部品でできている
  2. 作り方の手順。フォームから自動送信までを5ステップで
  3. どう変わるか。手作業の集計がゼロになる
  4. よくある失敗と回避法。動かなくなる原因は決まっている
  5. 現場で見えた妥協点。GASが向く仕事と向かない仕事
  6. よくある質問

結論。日報の自動集計は3つの部品でできている

日報の自動集計は、突き詰めると3つの部品の組み合わせです。難しいプログラムを一から書く必要はなく、この3つを順番につなぐだけで動きます。

  • 集める部品:Googleフォームで入力を受け取り、スプレッドシートに1行ずつ自動でためる
  • 計算する部品:ためたデータをGASが毎日決まった時刻に読み込み、担当者別・日別に合計する
  • 届ける部品:集計結果をメールやチャットに自動で送り、誰も開かなくても数字が回る状態にする

この3部品のうち、成否を大きく左右するのは実は1つ目の「集める部品」です。もう少し詳しく言うと、データが「1行に1件、1セルに1情報」というきれいな形でたまっていれば、計算も送信もあっけないほど簡単になります。逆にここが崩れると、どんなにコードを頑張っても集計はうまくいきません。

ポイント。コードを書く前に「集計できる形」でデータをためる設計をする。ここを飛ばすと、あとから何倍もの手間がかかります。

まず、日報を「どこに書いてもらうか」で3つの選択肢があります。自社に合うものを最初に決めておきましょう。

入力方法向いている場面集計しやすさ注意点
Googleフォーム項目が決まっている日報。現場・営業とても高い(自動で1行1件になる)自由記述が多いと集計に使えない
スプレッドシート直接入力PC作業が中心。少人数中(入力ルールを守らせる必要)セル結合や書式崩れが起きやすい
チャット(LINE・Slack等)すでにチャットで報告する習慣がある低〜中(連携の作り込みが要る)初期構築の難易度が上がる

非エンジニアの方が最初に作るなら、迷わずGoogleフォームをおすすめします。入力が自動で1行ずつスプレッドシートにたまり、データがきれいな形に整うからです。

この記事も、フォームを使う前提で手順を進めていきます。

作り方の手順。フォームから自動送信までを5ステップで

ここからが記事の本体です。フォーム入力を受け取り、毎朝集計し、メールで送るところまでを5つのステップに分けて、コピペで動くコード付きで解説します。

GASで日報を自動集計する仕組みの作り方

ステップ1。集計できる日報の項目を設計する

最初にやるのは、日報の入力項目を「あとで集計できる形」に決めることです。集計したい数字(訪問件数、作業時間など)は、必ず自由記述ではなく数値専用の項目に分けます。

Googleフォームで、次のような項目を作ります。日付は自動で記録されるので、フォームには入れなくて構いません。

  • 氏名:プルダウンで選ばせる(手入力させると表記揺れが起きる)
  • 部署:プルダウンで選ばせる
  • 訪問件数:数値のみ(記述式で「数値」の入力チェックをかける)
  • 作業時間(時間):数値のみ
  • 今日の業務内容:自由記述(集計対象にはしない、共有用)
  • 課題・気づき:自由記述

氏名を毎回手入力させると「山田」「山田太郎」「ヤマダ」が別人として集計されます。集計に使う項目は、必ずプルダウンなど選択式にして表記を固定してください。

フォームを作ったら、回答をスプレッドシートに出力する設定にします。これでフォーム送信のたびに、1行1件でデータが自動でたまっていきます。この「1行1件」の形が、あとの集計をラクにする土台です。

ステップ2。スクリプトエディタを開いて置き場所を用意する

次に、集計を動かすGASの置き場所を用意します。回答がたまるスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」を選択してエディタを開きます。画面の表記や位置は変わることがあるため、最新の操作はGoogle Apps Script公式ドキュメントで確認してください。

エディタが開くと、白紙のコードを書く画面が出ます。ここに、これから紹介するコードを貼り付けていきます。プログラムを書いた経験がなくても、コピペして必要な箇所だけ書き換えれば動きます。

ステップ3。日次集計のコードを貼り付ける

担当者別に「訪問件数」「作業時間」を合計するコードです。回答シートの名前と集計シートの名前を、自社のものに書き換えて使ってください。動く形の完結したコードなので、そのまま貼り付けられます。

// ▼ 前提:フォーム回答がたまるシートと、集計結果を書き出すシートを
//   同じスプレッドシート内に用意しておく(集計シートは空でOK)
// ▼ 列の順番は「タイムスタンプ / 氏名 / 部署 / 訪問件数 / 作業時間 / ...」を想定

function aggregateDailyReports() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const srcSheet = ss.getSheetByName('フォームの回答 1'); // [自社の回答シート名に変更]
  const outSheet = ss.getSheetByName('集計');            // [自社の集計シート名に変更]

  const data = srcSheet.getDataRange().getValues();
  data.shift(); // 1行目の見出しを除外

  // 今日の日付(0時0分)を用意して、当日分だけを対象にする
  const today = new Date();
  today.setHours(0, 0, 0, 0);

  const totals = {}; // 氏名ごとの合計を入れる箱

  for (const row of data) {
    const timestamp = new Date(row[0]);
    if (timestamp < today) continue; // 今日より前の行は集計しない

    const name = row[1];          // 氏名
    const visits = Number(row[3]) || 0; // 訪問件数(数値でなければ0扱い)
    const hours  = Number(row[4]) || 0; // 作業時間

    if (!totals[name]) {
      totals[name] = { visits: 0, hours: 0, count: 0 };
    }
    totals[name].visits += visits;
    totals[name].hours  += hours;
    totals[name].count  += 1; // 日報の提出件数
  }

  // 集計シートを一度きれいにして、見出しを書く
  outSheet.clear();
  outSheet.appendRow(['集計日', '氏名', '提出件数', '訪問件数合計', '作業時間合計']);

  const dateStr = Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy/MM/dd');
  for (const name in totals) {
    const t = totals[name];
    outSheet.appendRow([dateStr, name, t.count, t.visits, t.hours]);
  }
}

コードの中の日本語コメント(先頭に // が付いた行)は、何をしている部分かの説明です。書き換えるのは「回答シート名」と「集計シート名」の2か所だけで、あとはそのまま動きます。まずはエディタ上でこの関数を手動実行し、集計シートに数字が並ぶかを確認してください。初回実行のときだけ、スプレッドシートを操作する許可を求める画面が出るので、承認します。

ステップ4。集計結果を自動でメール送信する

集計ができたら、その結果をメールで関係者に送るコードを足します。毎朝メールボックスに数字が届けば、誰もスプレッドシートを開かなくても状況が共有されます。

function sendReportMail() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const outSheet = ss.getSheetByName('集計');
  const rows = outSheet.getDataRange().getValues();

  // メール本文を組み立てる
  // rows の各行は[集計日 / 氏名 / 提出件数 / 訪問件数合計 / 作業時間合計]の順
  let body = '本日の日報集計です。\n\n';
  for (let i = 1; i < rows.length; i++) { // 1行目の見出しは飛ばす
    const r = rows[i];
    body += r[1] + ':提出' + r[2] + '件 / 訪問' + r[3] + '件 / 作業' + r[4] + '時間\n';
  }

  MailApp.sendEmail({
    to: 'manager@example.com',   // [送信先を自社のアドレスに変更]
    subject: '【日報集計】' + (rows[1] ? rows[1][0] : ''), // 件名に集計日を入れる
    body: body
  });
}

送信先アドレスだけ書き換えれば動きます。集計とメールを続けて動かしたいときは、集計する関数の最後に sendReportMail(); と1行足せば、集計のあとに自動でメールまで飛びます。チャットに流したい場合も、送信部分を各サービスのメッセージ送信に差し替える考え方は同じです。

ステップ5。毎朝決まった時刻に自動実行させる

最後に、このコードを毎朝自動で動かす設定をします。GASには「トリガー」という、決めた時刻やタイミングで自動実行する仕組みがあります。時間指定のトリガーを設定し、たとえば毎朝7時から8時の間に集計する関数を動かすよう指定します。

トリガーの設定は、スクリプトエディタの左側メニューにある「トリガー」(時計アイコン)から行えます。画面の表記や位置は変わることがあるため、最新の設定手順はGoogle Apps Script公式ドキュメントで確認してください。設定できれば、あとは人が何もしなくても、毎朝集計され、メールが届く状態が完成します。ここまでで「集める・計算する・届ける」の3部品がひとつながりになりました。

どう変わるか。手作業の集計がゼロになる

この仕組みを入れると、毎日の転記と月末のまとめ作業が、人の手からほぼ消えます。担当者はフォームに入力するだけ、管理者はメールを見るだけになります。

GASで日報を自動集計する仕組みの作り方

とくに効果が大きいのは、日報を出す人数が多い現場です。仮に15人が毎日日報を出していて、その転記と集計に管理者が1日15分かけているとします。月20営業日なら、それだけで月5時間が集計作業に消えている計算です。

この5時間が、仕組みを組んだあとはほぼゼロになります。数字はあくまで一例で、人数や項目数によって変わりますが、「毎日発生する転記」を消せる効果は共通です。

うまく回している会社に共通するのは、最初から完璧を狙わず、小さく始めている点です。まず「訪問件数の合計」など1〜2項目だけ自動集計し、動くことを全員で確認してから項目を増やしています。いきなり全項目を自動化しようとすると、設計もコードも複雑になり、途中で挫折しやすくなります。

成果を出すコツ。最初は集計項目を1つに絞る。動く実感を全員が持てると、その後の項目追加はスムーズに進みます。

さらに一歩進めたい場合は、集計後のデータをAIに読ませて「気になる点」を抽出させる使い方もあります。たとえば課題欄の自由記述をまとめて要約させれば、管理者が全文を読まなくても傾向をつかめます。集計だけでなく、集めたあとの分析まで自動化したい方はReplit Agentで毎朝のデータ集計を自動化する手順も参考になります。

よくある失敗と回避法。動かなくなる原因は決まっている

GASでの日報集計がうまくいかなくなる原因は、実はいくつかのパターンに集中しています。現場でよく見かける4つの失敗を、起きる状況と防ぎ方のセットで紹介します。

GASで日報を自動集計する仕組みの作り方

失敗1。氏名や数値の表記がバラバラで合計できない

いちばん多いのがこれです。氏名を手入力にしていて「田中」「田中一郎」が別集計になる、訪問件数の欄に「3件」と文字を入れてしまい数値として足せない、というケースです。集計が合わないと、仕組み全体が信用されなくなります。

防ぎ方は入力の入り口を固めることです。氏名・部署は必ずプルダウンで選ばせ、件数や時間は数値だけしか入らないよう入力チェックをかけます。コード側で頑張って表記を直そうとするより、入り口をそろえる方がはるかに確実です。

失敗2。データが多すぎて途中で実行が止まる

GASには1回あたりの実行時間や1日の合計実行時間に上限があり、超えると処理が途中で止まります。上限はアカウントの種類(無料かGoogle Workspaceか)によって異なるため、正確な値は各自でGoogle公式の制限を確認してください。日報が何千行もたまった状態で全行を毎回読み込むと、この上限に引っかかりやすくなります。

回避策は、毎回すべてを処理しないことです。先ほどのコードのように「今日の分だけ」に絞れば、読み込む量が一定に保たれ、行数が増えても止まりません。古いデータは別シートに移すか、月ごとにシートを分けるのも有効です。

失敗3。複数人が同時に触ってデータが壊れる

朝の同じ時間帯に複数の処理が重なると、集計シートへの書き込みがぶつかり、数字が二重になったり欠けたりすることがあります。とくに人数が多い会社で起きやすい失敗です。

これは「LockService」という、処理が重ならないよう順番待ちさせる仕組みで防げます。集計関数の先頭に次の数行を足すだけで、二重実行を防げます。

function aggregateDailyReports() {
  const lock = LockService.getScriptLock();
  if (!lock.tryLock(10000)) { // 10秒待って取れなければ中止
    return; // ほかの処理が動いている間は実行しない
  }
  try {
    // ここに集計の処理本体を書く(前のコードの中身)
  } finally {
    lock.releaseLock(); // 処理が終わったら必ずロックを外す
  }
}

失敗4。エラーに誰も気づかず集計が止まっていた

自動化の怖いところは、止まっても誰も気づかない点です。トリガーの実行がエラーで失敗しても画面には何も出ないため、「先月から集計が止まっていた」と月末に発覚する、というのが典型的な事故です。

防ぐには、エラーが起きたら自分に通知が飛ぶようにしておきます。処理をtry文で囲み、失敗したらエラー内容を自分宛にメールする一行を足すだけです。GAS側にも実行の失敗を通知する設定があるので、あわせて有効にしておくと安心です。打刻漏れのような「起きなかったこと」を検知する考え方は打刻漏れをAIで検知しTeamsに自動通知する作り方でも解説しています。

現場で見えた妥協点。GASが向く仕事と向かない仕事

正直にお伝えすると、GASでの自動化は万能ではありません。向いている仕事と、無理に使わない方がいい仕事があります。ここを理解しておくと、遠回りせずに済みます。

GASが得意なのは、項目が決まっていて、集計ルールがはっきりしている日報です。訪問件数を足す、作業時間を部署別に出す、といった「決まった計算を毎日繰り返す」仕事は、まさに得意分野です。

逆に苦手なのは、集計ルールが毎月のように変わる業務や、複雑な条件分岐が絡む処理です。こうしたものをGASで作り込むと、コードがどんどん膨れ上がり、作った人しか直せない「ブラックボックス」になりがちです。これは中小企業の自動化でいちばん多い落とし穴です。

「作った担当者が退職したら、誰も直せず運用が止まった」という相談は珍しくありません。属人化はGAS自動化の最大のリスクです。

この属人化を防ぐには、次の3点を最初から守るのがおすすめです。

  • コメントを残す:コードの各処理に、何をしているか日本語のコメントを付ける
  • 作りを説明した文書を1枚残す:どのシートをどう集計しているか、A4一枚で図解しておく
  • 複雑にしすぎない:1つのコードに機能を詰め込まず、集計と送信は分けておく

また、規模が大きくなってきたら、GASにこだわらずノーコードの連携ツールや業務アプリ作成ツールに切り替える判断も必要です。自社でどこまで内製し、どこからプロに任せるかの線引きは、担当者の時間と社内に残せる知識の量で決めるのが現実的です。エクセル集計をAIに任せる選択肢を比べたい方はCopilot in Excelで表を自動集計する手順も見比べてみてください。

よくある質問

プログラミングの知識がなくても本当に作れますか

はい、この記事のコードをコピペし、シート名や送信先など数か所を書き換えるだけで動きます。最初から自分でコードを書く必要はありません。ただし「なぜ動くか」を少し理解しておくと、あとで直せるようになり、属人化も防げます。

費用はかかりますか

GAS自体はGoogleアカウントがあれば無料で使えます。追加のツール契約なしで始められるのが大きな利点です。ただし1日あたりのメール送信数や実行時間には上限があり、無料アカウントとGoogle Workspaceアカウントで枠が異なります。具体的な上限はアカウントの種類によって変わるため、大量に送信する場合はGoogle公式の制限を確認してください。

日報にAIで要約や気づきの抽出もさせられますか

できます。集計後の自由記述をAIに渡して要約や課題の抽出をさせる連携が広がっています。まずは数値の集計から仕組みを作り、動きが安定してからAI連携を足すと、無理なく段階的に高度化できます。

Googleフォームを使わずスプレッドシート直接入力でもできますか

可能ですが、集計のしやすさはフォームに劣ります。直接入力はセル結合や書式崩れ、入力位置のズレが起きやすく、集計が合わなくなる原因になります。入力を標準化しやすいフォームから始めるのが失敗しにくい進め方です。

まずは今日、自社の日報でどの項目を数字として集計したいかを1つだけ紙に書き出してみてください。それが決まれば、この記事のコードにそのまま当てはめて動かせます。日報だけでなく社内の問い合わせや報告を見える化したい方は、社内問い合わせを集計フォームで見える化する自作6ステップもあわせてどうぞ。

ここまで読んで、仕組みは分かったけれど自社の業務に落とし込むのは不安、途中で属人化しそうで怖い、と感じた方もいると思います。コレットラボのAI業務システム化支援では、日報や集計のような身近な業務から、御社に合わせた形で内製化を並走します。いきなり契約ではなく、まずは現状を整理するだけの相談で構いません。AI業務システム化の詳細はこちらから、気軽にお話を聞かせてください。

30分の無料相談

現状をお聞きし、優先順位を一緒に整理します。

予約する →

Read Next / 次に読む

名刺をAIでデータ化する手順|顧客リスト自動化のやり方
AX

名刺をAIでデータ化する手順|顧客リスト自動化のやり方

2026.07.24 / 約 13 分

関連記事

AX

AIエージェントを自社業務用に作る手順|非エンジニアでも作れる

更新
AX

Notion AIでプレスリリースを自動生成する手順と失敗の防ぎ方

更新
AX

AI倫理ポリシーの作り方|4原則と6ステップで社内に定着

更新
AX

Apple Intelligenceで広報の要約・返信をiPhone1台で時短する方法

更新
AX

Claude CodeでSEO診断|メタタグを安全に直す3ステップ

更新
AX

登壇スピーチ原稿をAIで作る手順|社長らしい言葉に整えるコツ

更新
AX

Cursorでダークモードを後付けする方法|専門知識なしで実装

更新
AX

AI画像生成の著作権リスクを3点で管理|安全に作り続ける運用術

更新
AX

競合の新製品をAIで毎朝Slack通知する自動化手順|非エンジニア対応

更新
AX

AI広報の自動化で人に残る仕事|役割の仕分け手順と失敗回避

更新
AX

AI履歴書スクリーニングの進め方|工数を半減し公平性を保つ運用

更新
AX

AI導入の社内合意形成を進める5つの手順|広報が旗振り役になるコツ

更新