連結会計シミュレーターの結果をExcelの連結精算表ブックに書き出す計画:13年つなぐとエンジンは2年目で止まった

開発mdx-playground

連結会計シミュレーターの結果をExcelの連結精算表ブックに書き出す計画:13年つなぐとエンジンは2年目で止まった

前日に不具合を16件直した連結会計シミュレーターは、持分の取引を1回ずつなら計算できる。 これを13年分つないで、S社1社の持分を 0% から 100% まで上げ、5% まで下げるストーリーにする。 そのストーリーを Excel のブックに書き出し、数字の出どころを辿れるようにしたい。 10時25分に始めたセッションは、その計画書づくりだった。

計画の要は、エンジンの executeCapitalTransitionnextState で年度をつなげるかどうかにあった。 前の年度の期末状態を、そのまま次の年度の期首に渡せるのか。

参考Excelとキャッシュフロー側の前例

最初に、既存の計画書、参考にする Excel(シート構成、数式、色)、シミュレーターの関数とテストを Claude Code に読ませた。 参考 Excel は連結精算表の演習ブックで、8枚のシートが左から「出力 → 入力」の順に並んでいる。 連結精算表は、個別TB(P社とS社の個別の試算表)を INDEX/MATCH で、修正仕訳を SUMIFS で拾う作りである。

リポジトリの中には、キャッシュフロー側で Excel を出力する前例 cashflow-excel-export.ts があった。 ただ、これは ExcelJS でブラウザからダウンロードさせる方式である。 今回ほしいのは画面のボタンではなくレビュー用に生成するブックなので、計画ではこの方式を採らなかった。

13区間をつなぐと、どこまで進むか

次に、年度をつなげるかどうかをエンジンの API で確かめさせた。 13区間は、どれも単発なら計算できる。 ところが前の年度の nextState を次の年度の期首に渡すと、2区間目(10% → 15%)で拒否された。

『その他』の期首状態の引継ぎには対応していません

引き継げるのは「連結している子会社」の状態だけで、「その他」や「持分法」の状態は引き継げない作りだった。 計画は、エンジンの手直しから始めることになった。

あわせて、エンジンの精算表が実際に返す列と行を1回だけ実測させ、Excel の行ラベルとの対応表を計画書に載せた。 並びはおおむね対応していた。 違いは、土地の評価差額を「S社修正」の列に出すか修正仕訳の1項目に置くかと、開始仕訳を1本の複合仕訳で持つか項目別に分けるかの2点だった。 どちらも Excel 側の形に寄せることにした。

Excel化の既存スキルと再利用の範囲

計画書を書き始める前に、Excel 化のスキルを探すよう指示した。 eurekapu-nuxt4 とこのリポジトリ、ユーザーレベルの3か所を Claude Code に見てもらうと、検証と差分とスタイルのスクリプトが実在した。 eurekapu-nuxt4 には、キャッシュフロー精算表を多年度で生成するスキルがあり、Excel 生成の規約がすでに固まっていた。

再利用の範囲を決めるため、xlsx_helpers.pyverify_cfws_excel.py の中身まで読ませた。 決めたのは次の3点である。

  • 書式の共通関数は xlsx_helpers.py と同じ作り(直書きの値は青、同じシートの数式は黒、他シートの参照は緑)にして、必要な分だけをこのリポジトリに持つ。別リポジトリのファイルをパスで import すると、Windows と macOS でパスが違って壊れるためである
  • 手直しした版との差分を取るスクリプトは、コピーせずパス指定で使う
  • 検証は、生成時の数値検証と、Excel 本体(COM)で開いて再計算させる検証の2段構えにする

図2枚と実行環境の実測

計画書には図を2枚入れた。 13年のストーリーの全体像と、ブックの中の参照構造である。 2枚とも lint を通った。

本文を書く前に、Python の実行環境も実測させた。 uv 0.6.2、Python 3.11.9、pywin32、Excel 本体がそろっていた。 COM による検証は Windows 機でしか動かないので、macOS では生成と数値検証までにとどめると計画に書いた。

Codexのレビューで増えた手当て

書き上げた計画書を Codex のレビューに出した。 初回はファイルの読み取りが14回成功し、判定は「要修正」、指摘は3件だった。 Claude Code には指摘を鵜呑みにさせず、該当コードを読んで判定し直してもらった。 3件とも採用になった。

3件のうち1件は、計画書の書き方そのものが誤っていた。 持分法の中での一部売却について、当初は「期首の値の読み先だけを差し替える」と書いていた。 しかし算式は「当期の投資利益 − 当期ののれん償却」に売却した割合を掛ける形で、当期分しか見ていない。 期首に累積額を持たせても、算式がそれを使わない。 計画書は、算式ごと直す形に書き換えさせた。

前の文脈を引き継ぐ resume --last で再レビューに出すと、追加の指摘が1件来た。 持分法を適用し始める X3(3年目)の利益の取込みも、単年度の式になっていた。 X3 の既存持分は X1 末の 10% と X2 末の 5% の2層で、保有した年数が違う。 計画書の前提の数字なら、層ごとに取り込むと 20,000 × 10% + 10,000 × 5% = 2,500 になる。 いまの式では 10,000 × 15% = 1,500 にしかならない。

3回目のレビューで、判定は「計画として妥当」に変わった。 年度をつなぐためにエンジンに入れる手当ては、合わせて4つになった。

決裁フォームの5項目

判断が要る項目は5件あった。 決裁フォームの選択肢を、3択で推奨を1つ付ける形で定義させた。 それを計画書の HTML に埋め込み、Chrome の前面タブに出させた。

たとえば依頼の中で、自分は「連結AJEのそれぞれの項目ごとのシートも作ってほしい」と伝えていた(連結AJE は連結修正仕訳のシート)。 これが1枚のシートの中の区切りを指すのか、項目ごとの別シートを指すのかで、SUMIFS の組み方が変わる。 そこで決裁の1項目にしてもらった。

描画の確認では、図1が画面外に流れた。 位置を合わせて撮り直させても、図1の位置へのスクロールがずれる。 ページ内で撮るのはやめ、SVG 単体を直接開いて、重なりや見切れがないことを見てもらった(ページ内の埋め込みサイズ 720×432 は実測済み)。

決裁サーバーが終了したあと、ディスク上の回答ファイルを調べさせると、10:57 に書かれていた。 5件とも推奨の A で、コメントは付けていない。 AJE シートは1枚にまとめて中を項目で区切る、持分計算表と仕訳の金額はまず値で置いてレビュー後に数式化する、などが決まった。

Phase 1で年度はつながったか

計画書に決裁を反映したあと、Phase 1(エンジンの手当て)の終わりを区切りにする点で、Claude Code と意見が一致した。 エンジンに触るのは Phase 1 だけなので、公開中のシミュレーターへの影響もそこで閉じる。

利益剰余金には、エンジンの中で別名が8種類ある。 当期仕訳のうち、どの仕訳がどの別名で利益剰余金を直接動かしているかを、全441組で実測させた。 変更前の結果を 2,205組のスナップショットに保存させてから、エンジンを編集させた。 編集後、簡易入力の結果は全2,205組で変わっていなかった。 画面の確認では、数値入力を直接書き換えても Vue に届かなかったので、E2E と同じくプリセットボタン経由で切り替えてもらった。

13区間は nextState で最後までつながり、年度のつなぎ目の食い違いは0件になった。

ブックの置き場所と命名の決まり

続けて、生成するブックの置き場所と、命名とアーカイブの決まりを伝えた。 Claude Code は最初に「Excel ファイルはまだ生成していません」と断った。 ここまでに作ったのはエンジンの改修と計画書で、ブックの生成は Phase 3 の作業だった。

決まりは、ファイル名に年月日と時刻を入れ、新しい版を書き出す前に過去の版を old へ移すというものである。 eurekapu-nuxt4 の既存スキルにある retire_old と同じ作法にした。

生成は、先に作業領域で試させてから、Excel 本体で検証させた。 壊れた版を指定のフォルダに置かないためである。 検証スクリプトが空振りしないことも確かめた。 連結AJE の金額を1か所だけ+123 に書き換えたブックで、NG が10件出た。 最初の版では、連結精算表の 8,736セル(13年度 × 42行 × 16列)がエンジンの精算表とすべて一致した。 2回目の生成では1回目の版が old へ移り、フォルダの直下には最新の1版だけが残った。

最初のブックへの3つの指摘

最初のブックを見て、3点を指摘した。 持分計算表に計算式が無いこと、罫線が無いこと、個別TBへのリンクが無いことである。 持分計算表はエンジンの計算結果を値で並べただけで、どの数字がどこから来たのかを Excel の中で辿れない状態だと、Claude Code も認めた。

決裁で「まず値で置き、レビュー後に数式化」としていた部分である。 この指摘をそのレビュー結果として扱い、数式化に進めてもらった。 直した版でも、連結AJE の仕訳の金額132個は直書きの値(青字)のまま残った。

シート間参照の式の並び順

次に、=G15-S社_TB!$F$20 という式を貼って伝えた。 Claude Code は、ルールを次のように復唱した。 他シートの参照と同じシートのセルが混ざる式では、必ず他シートの参照を先頭に置く。 Ctrl+[ で他シートのセルへ直接飛べるようにするためである。

Excel の Ctrl+[ は、式の先頭の参照へ飛ぶ。 確かめたいのは他シートのセルなので、同じシートの G15 が先頭にあると遠回りになる。 差が0かを見る照合の式は、引く向きを逆にしても判定が変わらない。 だから =S社_TB!$F$20-G15 の順にそろえる。

連結AJE の金額132個を、持分計算表と S社_TB を参照する数式に組み替えさせ、続けて Check の式の並びもこのルールで直させた。 最終版の …_20260921_122035.xlsx を置き、検証も通った。

明日に積んだもの

進捗を計画書に書き戻させ、続きは add-task で明日(2026-09-22)の Google タスクに登録した。 中身は、ブックのレビューと残り(開始仕訳の項目別の繰越し、コミット)である。 登録後にタスクを取り直させ、期日が入っていることと、メモにディレクトリ、計画書、プロンプト、参考の4項目がそろっていることも確かめた。 コミットはまだしていない。

学び

  • 単発では13区間とも通る計算が、前の年度の期末を次の年度の期首に渡すと2区間目で止まった。計画書を書く前にこの受け渡しを実測させたから、エンジンの手当てを Phase 1 として計画に組み込めた
  • 他シートの参照と同じシートのセルが混ざる式は、他シートの参照を先頭に置く。Ctrl+[ で飛んだ先が、確かめたいセルになる
#連結会計#Excel#openpyxl#計画書#Codex#Claude Code