目次
DD ExcelをClaude Codeで自動生成する
M&Aや事業承継の財務デューデリジェンス(DD)で使うExcelは、シート数が多く、式や参照関係が複雑になりがちです。1案件ごとに手で作成していると、3〜5営業日がすぐに溶けます。
この記事では、DD ExcelをClaude Code+openpyxlで動的生成する設計と、実務運用での勘どころを整理します。コンサル・VC・中小企業診断士・認定支援機関業務を想定しています。
※係数変化の実施と守秘義務契約について先に顧客と合意形成し、クリアしている事を前提としています。
シート構成の設計思想
まず前提として、筆者が運用しているDDテンプレートの構成を示します。
- 表紙・前提条件:対象会社、評価基準日、情報源
- エグゼクティブサマリー:検出論点と重要度評価
- 財務三表(P/L):過去5期の損益推移
- 財務三表(B/S):過去5期の貸借対照表
- 財務三表(C/F):営業/投資/財務キャッシュフロー
- 売上分析:製品別・顧客別・地域別の分解
- 売上原価分析:変動費・固定費分解、粗利率推移
- 販管費分析:科目別内訳と増減要因
- 人件費分析:従業員数、1人あたり人件費、年齢構成
- 運転資本分析:売掛金・棚卸・買掛金の回転日数
- 固定資産・設備投資:償却負担、更新投資必要額
- 有利子負債:借入金明細、返済スケジュール
- 税務論点:繰越欠損金、税効果、税務リスク
- 関連当事者取引:役員貸付、関連会社間取引
- 簿外債務・偶発債務チェックリスト:項目ごとの確認結果
- 正常収益力(Normalized EBITDA):一時要因調整
- 純有利子負債(Net Debt)調整:企業価値→株主価値ブリッジ
- バリュエーション感度分析:EBITDA倍率×調整後EBITDA
- 論点一覧・SPA反映事項:契約書に反映すべき表明保証・補償事項
この19シートは、筆者がこれまでの関与案件で「毎回必ず作り、毎回調整が発生する」部分を抽出したものです。業種ごとに追加シートが要る場合(例:不動産保有会社なら個別物件明細)もありますが、19シートは中小M&Aのベースラインとして機能します。事業DDbなどでは税務は含まれません。
静的テンプレートから動的生成モデルへ
従来は、この19シートをxlsxファイルとして保存しておき、案件ごとにコピーして書き換えていました。問題は以下です。
- 案件によって不要シートが出る(例:関連当事者取引がない会社では14シート目が空)
- 勘定科目の粒度が案件で違う(販管費の科目が30個の会社と80個の会社)
- 参照式が壊れやすい(行追加・削除時に他シートの参照がずれる)
- テンプレ自体のバージョン管理が難しい(v4→v5の差分追跡)
そこで動的生成モデルに移行しました。シート構成・科目構成・参照式を全てPythonコードで定義し、案件ごとに必要な要素だけを組み上げて生成する設計です。
openpyxlによる実装の骨格
実装の核はopenpyxlです。概念的にはこのような構造になります。
python
# 概念コードfrom openpyxl import Workbookfrom openpyxl.styles import Font, PatternFill, Border, Sidefrom openpyxl.utils import get_column_letterdef build_dd_workbook(company_data: dict, config: dict) -> Workbook: wb = Workbook() wb.remove(wb.active) # 必要シートだけ動的に追加 if config["include_cover"]: build_cover_sheet(wb, company_data) if config["include_exec_summary"]: build_exec_summary(wb, company_data) build_pl_sheet(wb, company_data["pl"], config["pl_granularity"]) build_bs_sheet(wb, company_data["bs"]) # ... 以下各シート # 参照式はシート名+セル座標で動的に解決 apply_cross_sheet_references(wb, config) return wbポイントは、シート間の参照式を「ハードコードしない」ことです。シート名もセル座標も、生成時に決まった値を文字列結合で組み立てる。こうすると、シート構成や科目数が変わっても式が壊れません。
Claude Codeに任せる範囲
Claude Codeには以下の作業を担当させると効率がいい、という手応えがあります。
- 新規シートの追加実装:「当期製品別粗利シートを追加して、販管費分析シートから粗利率を参照する列を作って」と指示すれば、openpyxlコードを書き足してくれる
- 科目マッピングの調整:勘定科目コードと表示名のマッピング辞書を整備
- 参照式のデバッグ:「売上分析シートのF列がREF!エラーになる」を投げると、参照先の検証から修正まで提案してくる
- バリエーション展開:業種別カスタマイズ
一方で、DDの論点設計そのものは人間が決める。どの科目を深掘りすべきか、何をNormalized EBITDA調整に含めるかは、案件の性質・業種・買い手の関心で変わります。ここをAIに任せると、形式的には整うが実務的には浅いレポートになります。
プロジェクト指示書による制御
Claude Codeに「こういう構成で作って」と説明するのは非効率です。そこでプロジェクトごとに指示書(.md)を置きます。
筆者の場合、以下のような構成です。
00_project_overview.md:匿名化した案件概要、買い手の関心事項01_dd_structure.md:今回生成するシート一覧、科目粒度、特記事項02_coding_conventions.md:変数命名、コメント規約、セルスタイル03_output_spec.md:出力ファイル名、配置先、命名規則
Claude Code起動時にこれらを@で参照させると、一貫した出力が得られます。プロジェクト指示書の設計思想自体は別記事で詳述します。
実務運用で効いた設計判断
最後に、実際に複数案件で回してみて効いた設計判断を列挙します。
- セルスタイルはテーマ定義で一元管理:ヘッダー、数値、比率、エラーハイライトを辞書で持ち、全シートで参照
- 前期比・3期CAGRは生成時に計算済みで埋め込む:Excel式に頼らず、Python側で計算して固定値を置く。参照エラーが激減
- シート保護は最後に一括適用:編集可能セルだけ保護解除
- 差分検証用のスナップショット:生成結果をテキスト化(各シートの主要セル値)してGit管理。v5→v6の差分がレビュー可能
- 案件データはExcel別ファイル:テンプレ生成ロジックと案件データを分離
これらを揃えると、新規案件のDDテンプレ準備が半日以下に短縮されます。空いた時間は論点の深掘りに回せるため、アウトプット品質も上がります。
Cloudccodeを中心としたAI活用を実務に落とし込む研修をご提供しています。
法人向け(人材開発支援助成金活用・12時間コース):1名あたり定価40万円、助成金3/4利用で実質負担10万円/人。3〜4日に分けて実施、修了証発行。
個人向け(2時間パッケージ):士業・経営企画・コンサル向けに特化した実装ハンズオン。持ち帰り成果物1つを必ず作ります。1人あたり3万円