MENU

業務集計PRJー見積り管理表スプレッドシートーサマリ作成

目次

全クライアント見積り自動集計スクリプト


1️⃣ 概要

本スクリプトは、全クライアントの見積りデータを自動で集約し、1つのスプレッドシートにまとめるための
Google Apps Script(GAS)です。

各クライアントごとに存在する「管理表一覧シート」から最新データを取得し、
1枚の集計シート(QuotationTaskList)に統合します。

これにより、複数スプレッドシートに分散しているデータを 手作業でまとめる必要がなくなり、 作業時間の削減とデータ整合性の向上になります。

データについては、図のように欲しい情報のみを各クライアントシートから取得しています。

🗂 実行先スプレッドシート(見積り管理表)

https://docs.google.com/spreadsheets/d/14UJrmnMljZXWA8hJdRSDq17GJRRhWF_ov9lxwBf–MA/edit?gid=274564611#gid=274564611


2️⃣ 主な特徴

機能内容
✅ 一括集計全クライアント分の見積りを自動取得・統合
✅ スキップ処理URL空欄・連続重複URL・必須キー(見積管理No./サイト・プロジェクト名)を欠くシートや行はスキップ
✅ 安定設計処理中にエラーが出ても他URLの処理を継続
✅ UI付き「見積り集計 → スプレッドシート取り込み」メニューを自動追加
✅ 処理表示実行中に「見積り取り込み中です…」を表示し、完了後に自動で閉じる
✅ 手動・自動両対応手動実行も、トリガーによる深夜自動実行も対応可

3️⃣ 処理の流れ

1️⃣ スクリプトを実行する

  • メニュー「見積り集計 → スプレッドシート取り込み」をクリック
  • または、トリガーにより自動実行

2️⃣ 管理表一覧からURLを読み取る

  • 3行目のヘッダーから「見積もり管理表URLサマリ取得用」列を動的検出。URL空欄や直前重複はスキップ。
  • URLが空欄または前の行と同じURLはスキップ

3️⃣ 各クライアントの見積りを取得・集計

  • URL先のスプレッドシートを開く
  • クライアント名一致のシート(なければ先頭)を選択
  • D列(案件名など)が空の行は除外
  • 4行目の英語ヘッダーをキーに列をマッピングし、6行目以降〜最終行を取得。
  • 行採用条件は見積管理No.( EstimateManagementNo) とサイト・プロジェクト名( SiteProjectNameAndDetails )の両方が存在していれば取得
  • 必要な列のみを抽出して QuotationTaskList に転記

4️⃣ 処理が完了する

  • 取り込んだ件数と所要時間を表示
  • 完了後、完了メッセージのポップアップを表示

4️⃣ ロジック概要(技術者よりの詳細)


🧩 全体構成

関数役割
① UI層onOpen(), importAndSummarize()メニュー生成とUI制御(ポップアップなど)
② 処理層runImport_()データ取得・集計・出力を行うメイン処理
③ 補助層openSpreadsheetBySmartUrl_(), extractSpreadsheetId_(), prepareOutputSheet_(), buildHeaderIndexMap_()URL解析・出力準備・列番号変換などの共通処理、英語ヘッダー→列インデックスのマップ生成

⚙️ 技術的処理フロー

ステップ処理内容
「管理表一覧」シートを開き、3行目の見出しからURL列(D列)とクライアント列を特定
4行目以降のURLを順に取得。空欄・直前URL重複はスキップ
「QuotationTaskList」シートを開き、2行目以降のデータを削除
各URLのスプレッドシートを開き、対象シートを選定(クライアント名一致または先頭)
D列が全て空のシートはスキップ。各クライアントの見積り管理シートから 特定の英語ヘッダー項目 を基準にデータを取得
すべてのデータを一括 setValues() で出力
処理時間と行数を算出し、完了アラートを表示後にポップアップを閉じる

🧠 技術上のポイント

特徴説明
冪等性設計毎回クリア → 最新データ再構築のため、常に正しい状態で保持
重複回避連続した同一URLはスキップし、処理時間を短縮
汎用対応クライアント名列がなくても処理継続可能
高速化データをまとめて配列転送 (setValues()) することでセル操作を最小化
安全処理try...catch によりアクセス不能シートを自動スキップ
保護設計QuotationTaskListの出力シート1行目(ヘッダ部分)はヘッダー保護の為、上書きしない

📊取得データ項目一覧

項目カテゴリ代表例説明
基本情報EstimateManagementNo / ReleaseDate / SiteProjectNameAndDetails / DeliverableType / BillingMonth案件の基本識別情報、制作物の分類、請求月などを管理します
金額情報ClientProposedAmount / EstimateCalculation / ExternalCostExcluded / ExternalCostIncluded / AdditionalCostTaxIncluded / AdditionalCostTaxExcluded見積金額、外注費、追加費用などの算出に関わる数値です
工数合計TotalWorkHours / DirectorWorkTotal / DesignerWorkTotal / EngineerWorkTotal工数集計および作業負荷や原価算出に利用します
詳細作業項目Direction / Writing / Design / Coding / Staging / Release / Product Registration / Shooting など多数制作進行における各作業ステップの履歴管理・進捗把握に使用します

※G〜N列は取得していません。下図参照

⚠️ スキップ・例外条件

状況動作
管理表一覧シートのD列URL空欄スキップ
同一URL(直前と同じ)スキップ
管理表一覧シートなし処理中止(エラー)
各クライアントスプレッドシートのD列(タスク)が全て空の場合スキップ
アクセス権なし(権限がない場合)スキップ
URL列が見つからない処理中止(エラー)

⏱ 実行性能(目安)

処理内容実際の継続時間(観測値)
軽処理(10件未満のURL読み込み)約1〜3分
中規模処理(20〜30件)約5〜10分
大規模処理(40〜50件)約12〜18分(まれに20分以上)
超過時(>20分)停止または Exceed maximum execution time エラー

手動実行と自動実行でも上限時間が異なる。上限時間が過ぎるとタイムアウトする可能性はあります。
上限実行時間はアカウント種別・エディションに依存します。値は実測の目安であり保証ではありません。

実行方法上限時間(目安)
手動実行10〜12分
自動実行(トリガー方式)30分

現在は、33URL、実測値 約172秒で取り込みが完了しています。


6️⃣ トリガー実行について

毎日午前0時から1時の間に、自動でGAS関数が実行され、サマリデータが更新されます。

項目内容
実行関数importAndSummarize
トリガー種別時間主導型
実行時刻午前0~1時に設定
頻度毎日
エラー発生した場合エラー時は自動でメール通知が届く
cynosura@cnsr.jp

7️⃣ 運用ルール・注意点

  • 「管理表一覧」シートの3行目に
    見積もり管理表URLサマリ取得用 の見出しが必ず存在していること。

クライアント名シート名は一致させる。【安易に変更しない】
クライアント名を含むシートがあれば優先、無い場合は先頭シートを使用するロジックとなっています。
名称変更時は想定シートの選択に影響する可能性があるため注意。

  • 各見積りシートの構造は統一フォーマットを維持。
  • 実行権限(参照先スプレッドシートのアクセス権)を持つユーザーでトリガーを設定。
  • 処理途中で停止しても他URLへの影響はなし。次回実行で最新データに上書きされる。

参考:仕様の要点

  • URL列検出:3行目ヘッダーから「見積もり管理表URLサマリ取得用」を含む列を動的検出。
  • 英語ヘッダ基準:参照元は4行目の英語ヘッダーをキーに REQUIRED_FIELDS の順で詰め替え。
  • データ範囲6行目〜最終行を処理(5行目は見出し想定でスキップ)。
  • 行採用条件:見積管理No.(EstimateManagementNo) とサイト・プロジェクト名( SiteProjectNameAndDetails )の両方に記載があれば取得。
  • スキップ:URL空欄/直前重複/必須ヘッダー欠落シート/上記採用条件を満たさない行。
  • 出力:QuotationTaskList の 2行目以降を毎回クリアし、配列一括 setValues。1行目(ヘッダー)は維持。
  • 未定義項目:REQUIRED_FIELDS に無い項目は取得しない(空で出力)。
  • シート選定:クライアント名を含むシートがあれば優先、無ければ先頭シート。

追加機能 サマリ手動作成(手動取得用)

「サマリ手動作成」は、
指定した業務報告スプレッドシートだけを手動でサマリ化するための機能 です。

通常の自動サマリ(全件/最新3ヶ月)とは異なり、
手動で URL を指定したファイルのみを対象にできます。

2. 使用するシート

手動取得用スプレッドシートリスト

このシートに、
サマリ化したい 業務報告スプレッドシートの URL を入力します。

  • シート名
    手動取得用スプレッドシートリスト
  • 必須ヘッダー(1行目)
    手動取得用業務報告スプレッドシートURL
  • 2行目以降
    対象とする業務報告の URL またはスプレッドシートIDを記載

3. 操作手順

  1. 管理用スプレッドシートを開く
  2. メニューから
    「サマリ手動作成」 → 「手動取得用リストから取り込む」
    を選択
  3. 実行が開始され、指定URLの業務報告ファイルのみがサマリ化されます

4. 出力ファイル

処理結果は BASE フォルダ内に以下の形式で生成されます:

  • 手動取得用業務報告スプレッドシート-1
  • 行数が上限に近い場合
    -2, -3 … と自動的に分割作成

出力内容は通常のサマリ作成と同じ形式です。
(業務範囲・対応者分類は自動で VLOOKUP により補完されます)

5. 利用シーン例

  • 特定クライアントの業務報告だけ先にサマリ化したい
  • テスト用に一部の月だけ取り込んで確認したい
  • 大量データの全件取り込みを避けたい場合

6. 注意点

  • ヘッダー名 「手動取得用業務報告スプレッドシートURL」 は変更しないでください
  • URL が不正・権限なしの場合、該当行はスキップされログに残ります
  • 業務報告スプレッドシート内に「サマリ」シートがない場合は処理対象外です

この記事を書いた人

目次