[{"data":1,"prerenderedAt":476},["ShallowReactive",2],{"content-/cfws-excel-automation":3,"all-pages-for-dir":474,"og-image-/cfws-excel-automation":475},{"id":4,"title":5,"body":6,"category":453,"description":454,"extension":455,"meta":456,"navigation":403,"path":457,"project_name":458,"published":459,"publishedAt":460,"seo":461,"stem":462,"tags":463,"todo":471,"updatedAt":472,"__hash__":473},"pages/2026-04/2026-04-15/cfws-excel-automation.md","CF精算表の独立Excel自動生成 -- 42論点一括生成とTurso DB連携まで",{"type":7,"value":8,"toc":418},"minimark",[9,13,22,25,29,33,40,44,50,73,77,80,99,101,105,109,116,119,122,125,169,172,176,183,185,189,193,196,210,228,232,235,246,250,253,255,259,263,266,269,272,298,301,304,308,311,314,318,321,325,328,330,334,337,340,343,347,350,361,364,366,369,387,389,392],[10,11,12],"h2",{"id":12},"この日やったこと",[14,15,16,17,21],"p",{},"朝、有形固定資産（Q3-9）の仮説検証Excelを1ファイルだけパースするところから始めた。夜には42論点すべてのExcelが",[18,19,20],"code",{},"--all","モードで一括生成され、上半分check行が全て0を返していた。さらにTurso DBから書籍の解説テキストを引いてExcelに流し込むパイプラインまでつないだ。Phase 1のプロトタイプからPhase 4のDB連携まで、1日で駆け抜けた記録。",[23,24],"hr",{},[10,26,28],{"id":27},"phase-1-q3-9有形固定資産プロトタイプ","Phase 1: Q3-9（有形固定資産）プロトタイプ",[30,31,32],"h3",{"id":32},"仕訳パーサーの構築",[14,34,35,36,39],{},"仮説検証用のExcelファイルには、会計ソフトAの仕訳フォーマットでサンプル取引が入っている。",[18,37,38],{},"qa_journal_parser.py","でこのシートをパースし、日付・勘定科目・金額をPythonの辞書に変換する仕組みを組んだ。",[30,41,43],{"id":42},"_3シート構成excel生成","3シート構成Excel生成",[14,45,46,49],{},[18,47,48],{},"split_qa_to_cfws.py","が生成するExcelは3シート構成にした。",[51,52,53,61,67],"ol",{},[54,55,56,60],"li",{},[57,58,59],"strong",{},"MF仕訳シート",": パースした仕訳データを時系列で並べる",[54,62,63,66],{},[57,64,65],{},"年次推移表",": BS/PL科目の期首残高・当期増減・期末残高を年度別に集計",[54,68,69,72],{},[57,70,71],{},"CFWS",": 年次推移表のBS増減を営業・投資・財務の各CF区分に配賦する精算表",[30,74,76],{"id":75},"codexレビュー3回で叩き直す","Codexレビュー3回で叩き直す",[14,78,79],{},"Codex（GPT-5.4）にレビューを3回投げた。返ってきた指摘のうち致命的なもの:",[81,82,83,93],"ul",{},[54,84,85,88,89,92],{},[57,86,87],{},"ハードコード値を数式ベースに",": 年次推移表の期末残高を数値で埋めていた箇所を、",[18,90,91],{},"=期首+増減","の数式に切り替え",[54,94,95,98],{},[57,96,97],{},"開始残高のSUMIFS混入防止",": 期首残高をSUMIFSで集計すると、前年度の仕訳まで拾ってしまう。開始残高は前期末残高からのセル参照に固定した",[23,100],{},[10,102,104],{"id":103},"試行錯誤-sumifsと科目名の罠","試行錯誤: SUMIFSと科目名の罠",[30,106,108],{"id":107},"sumifsの日付テキスト問題","SUMIFSの日付テキスト問題",[14,110,111,112,115],{},"SUMIFSの条件列に日付を入れていたが、Excelのセルが文字列型の「2026/4/1」になっていて、date型の条件値とマッチしない。Python側で",[18,113,114],{},"datetime","オブジェクトをセルに書き込むように修正し、Excel側もdate型で統一して解決した。",[14,117,118],{},"ログを睨みながら「なぜ合計が0なのか」を追い続けて、セルの書式設定を開いた瞬間に「文字列」の表示を見つけた。地味だが30分持っていかれた。",[30,120,121],{"id":121},"科目名の不一致",[14,123,124],{},"教科書の科目名と会計ソフトAの科目名がずれている箇所が3つ見つかった。",[126,127,128,141],"table",{},[129,130,131],"thead",{},[132,133,134,138],"tr",{},[135,136,137],"th",{},"教科書",[135,139,140],{},"会計ソフトA",[142,143,144,153,161],"tbody",{},[132,145,146,150],{},[147,148,149],"td",{},"備品",[147,151,152],{},"工具器具備品",[132,154,155,158],{},[147,156,157],{},"有形固定資産売却益",[147,159,160],{},"固定資産売却益",[132,162,163,166],{},[147,164,165],{},"減価償却累計額",[147,167,168],{},"建物減価償却累計額 etc.",[14,170,171],{},"ACCOUNT_DBにエイリアスフィールドを追加し、どちらの名前で来てもマッチするようにした。",[30,173,175],{"id":174},"繰越利益剰余金にpl利益が反映されない","繰越利益剰余金にPL利益が反映されない",[14,177,178,179,182],{},"年次推移表で繰越利益剰余金の期末残高を計算すると、当期純利益が加算されていなかった。BS科目の増減だけを見ていて、PL利益の振替仕訳が抜けていた。繰越利益剰余金の行に",[18,180,181],{},"=前期末+当期純利益","の加算式を追加して解消。",[23,184],{},[10,186,188],{"id":187},"ibフォーマットとレイアウト調整","IBフォーマットとレイアウト調整",[30,190,192],{"id":191},"全セルmeiryo-ui統一","全セルMeiryo UI統一",[14,194,195],{},"IBスタイル（投資銀行モデル書式）のルール:",[81,197,198,204],{},[54,199,200,203],{},[57,201,202],{},"青",": ハードコード値（手入力の数値）",[54,205,206,209],{},[57,207,208],{},"黒",": 数式（他セル参照・計算式）",[14,211,212,213,216,217,216,220,223,224,227],{},"フォント定数を",[18,214,215],{},"F_BASE"," / ",[18,218,219],{},"F_BOLD",[18,221,222],{},"F_BLUE","等に一本化し、",[18,225,226],{},"xlsx_helpers","モジュールから呼び出す形にした。全シートのフォントがMeiryo UIに揃い、手動で個別設定する箇所がゼロになった。",[30,229,231],{"id":230},"ユーザーのexcel画像をもとにレイアウト修正","ユーザーのExcel画像をもとにレイアウト修正",[14,233,234],{},"参考Excel画像をもとに、CFWSの下半分（CF計算書エリア）のレイアウトを修正した。",[81,236,237,240,243],{},[54,238,239],{},"配賦ロジック: 上半分の調整列合計が下半分のCF区分に流れる導線を整理",[54,241,242],{},"PL検証エリア: 売上高〜当期純利益までの検算行を追加",[54,244,245],{},"日本基準様式（連結キャッシュフロー計算書の会計基準 注7）に準拠した科目順序",[30,247,249],{"id":248},"mf仕訳シートの日付表示","MF仕訳シートの日付表示",[14,251,252],{},"取引日のセル表示をISO形式（2026-04-01）からスラッシュ区切り（2026/4/1）に変更。会計ソフトAの画面表示と揃えることで、目視チェック時の認知負荷を下げた。",[23,254],{},[10,256,258],{"id":257},"phase-2-42論点を-allモードで一括生成","Phase 2: 42論点を--allモードで一括生成",[30,260,262],{"id":261},"account_dbの大量拡張","ACCOUNT_DBの大量拡張",[14,264,265],{},"残り36論点を通すと、未登録の勘定科目が次々にエラーを吐いた。ACCOUNT_DBに科目を大量追加し、エイリアスや特殊科目（建設仮勘定、のれん、社債発行費等）の分類を設定した。",[30,267,268],{"id":268},"マッピングテーブルの大幅拡張",[14,270,271],{},"一括生成を通すために拡張したテーブル群:",[81,273,274,280,286,292],{},[54,275,276,279],{},[18,277,278],{},"_PL_ADJ_MAP",": PL科目をCFWSのどの調整列にマッピングするか",[54,281,282,285],{},[18,283,284],{},"_TOPIC_CF_MAP",": 論点ごとのCF区分デフォルト",[54,287,288,291],{},[18,289,290],{},"_OP_SORT",": 営業CF内の科目並び順",[54,293,294,297],{},[18,295,296],{},"_classify_cf_label",": CF区分の自動分類関数",[30,299,300],{"id":300},"フォールバック列の自動生成",[14,302,303],{},"マッピングテーブルにない科目が来たとき、エラーで止めずにフォールバック列を自動生成するロジックを追加した。未知の科目は「その他」列に集約し、後から手動で正しい列に移せる。",[30,305,307],{"id":306},"上半分check-4242全ok","上半分check: 42/42全OK",[14,309,310],{},"42論点すべてでCFWSの上半分check行が0を返した。BS増減と調整列合計の整合が全論点で取れている。",[14,312,313],{},"下半分（CF計算書エリア）は5件WARNが残った。CF区分ラベルの正規化が追いついていない論点がある。",[30,315,317],{"id":316},"cfラベル正規化","CFラベル正規化",[14,319,320],{},"短縮ラベル（「有証売却」）と正式名（「有価証券の売却による収入」）の不一致を解消するため正規化関数を追加した。短縮ラベルが来たら正式名に変換してから、CF計算書の行にマッチさせる。",[30,322,324],{"id":323},"pl調整項目の符号修正","PL調整項目の符号修正",[14,326,327],{},"下半分CF値の計算で、PL調整項目の符号が逆になるケースがあった。上半分check行の符号反転ベースに変更し、「上半分でcheck=0ならば下半分も自動的に整合する」という設計に統一した。",[23,329],{},[10,331,333],{"id":332},"phase-4-turso-db連携","Phase 4: Turso DB連携",[30,335,336],{"id":336},"書籍解説テキストの自動挿入",[14,338,339],{},"book-knowledge-base DBに格納されている参考書の解説テキストをTursoのHTTP APIで取得し、生成Excelの追加シートに挿入するパイプラインを構築した。Q番号をキーにして対応する解説を引く。",[14,341,342],{},"Excelを開いた時点で仕訳データ・精算表・解説テキストが1ファイルに揃っている状態を作りたかった。「あのページの説明は何だっけ」とPDFを探しに行く手間が消えた。",[30,344,346],{"id":345},"cfws_registryテーブルコンテキストブリッジ","cfws_registryテーブル（コンテキストブリッジ）",[14,348,349],{},"TursoにCFWS管理テーブルを新設した。",[81,351,352,355,358],{},[54,353,354],{},"Q番号（論点ID）",[54,356,357],{},"生成Excelファイルパス",[54,359,360],{},"check状態（OK / WARN / ERROR）",[14,362,363],{},"別のセッションやエージェントが「Q3-9のCFWSはどこにある？checkは通っているか？」と問い合わせできるコンテキストブリッジとして機能する。Tursoスキルにローカルレプリカのパス情報も追記した。",[23,365],{},[10,367,368],{"id":368},"学んだこと",[81,370,371,378,381,384],{},[54,372,373,374,377],{},"SUMIFSは型に厳格で、文字列と日付が混在した瞬間に",[57,375,376],{},"黙って0を返す","。エラーを出さない分、発見に時間がかかる",[54,379,380],{},"科目名のエイリアスは最初から設計に入れておくべきだった。教科書と実務ソフトの命名規則は、ほぼ確実にずれる",[54,382,383],{},"Codexレビューを「致命的な指摘だけ」に絞るとノイズが減り、レビューサイクルが3回で収束した",[54,385,386],{},"check行の設計は「上半分が0なら下半分も自動で整合する」という単方向依存にすると、デバッグ対象が半減する",[23,388],{},[10,390,391],{"id":391},"明日やること",[81,393,396,406,412],{"className":394},[395],"contains-task-list",[54,397,400,405],{"className":398},[399],"task-list-item",[401,402],"input",{"disabled":403,"type":404},true,"checkbox"," 下半分WARNの残り5件を解消する（CFラベル正規化の追加パターン）",[54,407,409,411],{"className":408},[399],[401,410],{"disabled":403,"type":404}," 3600行のスクリプトをモジュール分割する（前日の計画書ベース）",[54,413,415,417],{"className":414},[399],[401,416],{"disabled":403,"type":404}," cfws_registryのcheck状態を生成スクリプト完了時に自動更新するフックを追加",{"title":419,"searchDepth":420,"depth":420,"links":421},"",2,[422,423,429,434,439,447,451,452],{"id":12,"depth":420,"text":12},{"id":27,"depth":420,"text":28,"children":424},[425,427,428],{"id":32,"depth":426,"text":32},3,{"id":42,"depth":426,"text":43},{"id":75,"depth":426,"text":76},{"id":103,"depth":420,"text":104,"children":430},[431,432,433],{"id":107,"depth":426,"text":108},{"id":121,"depth":426,"text":121},{"id":174,"depth":426,"text":175},{"id":187,"depth":420,"text":188,"children":435},[436,437,438],{"id":191,"depth":426,"text":192},{"id":230,"depth":426,"text":231},{"id":248,"depth":426,"text":249},{"id":257,"depth":420,"text":258,"children":440},[441,442,443,444,445,446],{"id":261,"depth":426,"text":262},{"id":268,"depth":426,"text":268},{"id":300,"depth":426,"text":300},{"id":306,"depth":426,"text":307},{"id":316,"depth":426,"text":317},{"id":323,"depth":426,"text":324},{"id":332,"depth":420,"text":333,"children":448},[449,450],{"id":336,"depth":426,"text":336},{"id":345,"depth":426,"text":346},{"id":368,"depth":420,"text":368},{"id":391,"depth":420,"text":391},"dev","有形固定資産のプロトタイプからスタートし、仕訳パーサー・3シート構成Excel生成・Codexレビュー3回を経て42論点の上半分check全OKを達成。Turso DBで書籍解説を自動挿入し、cfws_registryテーブルでコンテキストブリッジを構築した記録。","md",{},"/cfws-excel-automation","eurekapu-nuxt4",false,"2026-04-15T00:00:00.000Z",{"title":5,"description":454},"2026-04/2026-04-15/cfws-excel-automation",[464,465,466,467,468,469,470],"cashflow","excel","python","openpyxl","automation","turso","codex","memo",null,"-aEXnV_96cqBFZmjeBjP5RybGBuxa7kqwL7hfJPozqU",[],"https://log.eurekapu.com/favicon.svg",1776326292401]