この日やったこと
3級で完成したCF計算書Excel自動生成パイプラインを2級論点に拡張した。社債(201)を完成させ、固定資産応用(202)のPhase 1-2まで進め、サマリーCFWSシートを全8ライフサイクルに展開した。Python検証OKなのにExcel数式が合わない問題に半日格闘し、参考Excelの手動修正版からロジックを抽出して突破した。
社債(201)のExcel生成パイプライン完成
2本社債体制の設計
額面発行(額面=発行価額)と割引発行(額面 > 発行価額、償却原価法で差額を期間配分)の2本立てで設例を組んだ。教科書の典型パターンを両方カバーする構成になる。
社債利息の列は「クーポン利息(現金支出あり)」と「償却原価法による利息(非資金)」を分離する設計にした。中間テーブルの集約_社債シートでP列とQ列を分けることで、CFWSの調整列が現金ベースと非資金ベースを混同しなくなる。
check=0検証の列単位チェック追加
verify_checks関数を拡張し、行単位(BS増減 = 調整列合計)だけでなく列単位(各調整列のBS配分 + CF計上 = 0)でもチェックするようにした。これで「どの列が壊れているか」を即座に特定できる。
Python verify_checks=0なのにExcel数式でcheck!=0になる問題
発覚
社債のCFWSを生成し、Pythonのverify_checksは全年度check=0を返した。安心してExcelを開いたら、K列(社債利息・償却原価)のcheck行に数値が残っていた。
原因の深掘り
問題の根は、K列のRow 3ヘッダーとRow 14ラベルが異なる点にあった。
- Row 3: 「社債利息(償却原価)」 -- CFWSの調整列名
- Row 14: 「社債利息」 -- PL科目名
同じ列に2つの異なるMATCH条件が必要で、INDEX/MATCH数式が中間テーブルから値を引くとき、Row 3のヘッダーでMATCHしようとしてRow 14の値を取りこぼしていた。Pythonのverify_checksはINDEX/MATCHを経由せず直接計算するので、この不整合を検出できなかった。
参考Excel(KK版)からのロジック抽出
Excelを手動で開いて、セルの数式を一つずつ修正した版(KK版)を作成した。そこから全列の数式フローを数値で完全トレースし、数式仕様書(cfws-bond-formula-spec.md)としてドキュメント化した。
このドキュメントには、各列の上半分(BS行)・下半分(CF行)・PL計上額行・check行の数式を具体的な数値つきで記録している。次のセッションではこのドキュメントを渡すだけで、gen_cfws_multi_year.pyのcreate_cfws_sheet()を正確に修正できる。
教訓
Python検証とExcel数式は別物だと体感した。Pythonは「正しい値を計算できる」ことを証明するが、「Excelの数式が正しい値を返すか」は証明しない。教材としてINDEX/MATCH数式を残す以上、Excel側の数式動作を別途検証する工程が必須になる。
固定資産応用(202)の計画策定と実装
4論点の整理
教科書から2級の固定資産応用論点を4つ抽出した。
- 圧縮記帳(積立金方式) -- 補助金受領→資産取得→積立金計上/取崩
- 減損 -- 直接控除法。将来CFの割引現在価値まで帳簿価額を切り下げ
- 資産除去債務(ARO) -- 取得時にARO見積額を資産・負債に両建て。利息費用で負債を増やす
- 建設仮勘定 -- 手付金支出時に建設仮勘定計上、完成時に本勘定振替(非資金)
Codex(GPT-5.4)レビューとサンドボックス制限
実装計画をCodex CLIでレビューにかけた。しかしCodexのサンドボックス環境ではファイルシステムへのアクセスが制限されていて、スキルファイルやスクリプトを読めなかった。レビュー結果は「計画としては妥当だが、実コードを見ていないので確定的なことは言えない」という内容になった。
代わりに自前でコードを読み直し、3つの課題を洗い出した。
- 集約シートのハードコード問題(汎用中間テーブル検出ロジックが必要)
- 非資金取引の対消滅列の設計(BSは動くがCFは動かない取引をどう配分するか)
- 配当金のStep B反映(繰越利益剰余金の計算ロジック修正)
Phase 1: データ基盤
gen_annual_table_core.pyのACCOUNT_DBに4科目を追加した(資産除去債務、圧縮積立金、国庫補助金受贈益、利息費用)。圧縮積立金は繰越利益剰余金の内訳として統合する処理を入れた。cf-labels.jsonにPL→営業CF損益調整の2エントリを追加し、mf_journal.pyに仕訳ビルダー8関数を追加した。
Phase 2: 取引モジュール(Step a)
gen_fixed_asset_advanced_xlsx.pyを新規作成(約1,000行)。4論点の設例パラメータ・イベント生成・集約テーブル・MF仕訳を1スクリプトにまとめた。数値検算OK。
Phase 3-4: 年次推移表(Step b)とCFWS(Step c)
年次推移表は16科目+圧縮積立金で正常生成。BSバランスも一致した。
CFWSはPhase 4で壁にぶつかった。DUAL_ACCOUNTSの拡張と中間テーブル関数の追加まで完了し、Python verify_checksは全5年度check=0を返したが、またしてもExcel側のcheck行が0にならなかった。
社債のときと同じパターンが再現された。次セッション用にcf202-next-session-plan.mdを書き、参考Excelの各シート(建設仮勘定、圧縮記帳、減損、ARO)のCFWS構造を1:1で再現するアプローチを記録した。
非資金取引の対消滅列 -- 設計課題
固定資産応用で浮き上がった設計課題。建設仮勘定→本勘定振替や、ARO計上時の資産・負債の両建ては、BSが動くがCFは動かない。現行のverify_checksはBS増減を調整列で完全配分する前提なので、非資金取引があると未配分でcheck!=0になる。
DUAL_ACCOUNTSにnoncashフラグとnoncash_offset(相殺相手のBS科目)を追加する設計を検討した。実装は各論点のセッションで進める方針にした。
Excel→HTMLスクリーンショットスキルの構築と全論点展開
スキル作成の経緯
ドラフト原稿(Ch0〜Step 7)のレビューで「Excel設計の説明が足りない」「テキストとExcelの橋渡しがない」という指摘が出た。Excelのスクリーンショットを教材ドラフトに埋め込むことにした。
パイプライン
2つのPythonスクリプトを作成した。
gen_cfws_html.py-- CFWS精算表のHTML/PNG生成gen_excel_screenshots.py-- 取引モジュール/年次推移表のHTML/PNG生成
openpyxlは数式を評価できないので、各Stepの生成スクリプトから入力パラメータを読み取り、Pythonで値を計算してHTMLテーブルを組み立てる方式を採った。スキル定義(.claude/skills/excel-screenshot/skill.md)として手順を標準化した。
全7論点のCFWS画像生成
Step 1(株主資本、調整2列)からStep 7(総合演習、調整23列)まで、全7ステップのCFWS画像を生成した。各ステップで調整列数が増えていく過程が、教材として論点の積み上がりを視覚的に表現する。
サマリーCFWSシート -- 全年度横並びの年次推移
着想
CFWSは年度ごとに1シートずつ生成される(借入金なら2022〜2026の5シート)。年次推移表と同じ形式で、縦軸にCF調整項目、横軸に年度を並べたサマリーシートがあれば、複数年度の変化を一覧できる。
実装
gen_cfws_multi_year.pyにサマリーCFWSシート生成機能を追加した。各年度のCFWSシートからCF計算書セクション(営業CF・投資CF・財務CF)の値を集約し、一番左に「サマリーCFWS」シートとして挿入する。
借入金ライフサイクルで動作確認したあと、全8ライフサイクル(株主資本、運転資本、貸付金、借入金、固定資産、税金、総合演習、社債)に適用した。
セッション引き継ぎドキュメント
この日は8セッションにまたがって作業した。セッション間の引き継ぎに以下のドキュメントを残した。
| ドキュメント | 用途 |
|---|---|
cfws-bond-formula-spec.md | 社債CFWS数式のKK版準拠仕様。全列の数値トレース |
cfws-html-continuation-guide.md | Excel→HTMLスクリーンショットの残作業リスト |
cf202-session-log.md | 固定資産応用のセッションログ。完了/未完了の状態 |
cf202-next-session-plan.md | 固定資産応用のCFWS修正アプローチ |
cfws-input-parameters.md | 全Stepの入力パラメータ一覧(HTMLスクリーンショット用) |
セッションが切れても、次のセッションにドキュメントを渡せば作業を継続できる。この引き継ぎパターンが、長時間作業を複数セッションに分割するときの生命線になっている。