財務諸表原表調整(フォーマット保持・整合性維持)
トリガー条件
- ユーザーが既存の財務諸表(貸借対照表/損益計算書/キャッシュフロー計算書、一般的な .xls 形式)を送信し、「特定の数字を目標値に変更し、他のデータもそれに合わせて調整してほしい」と依頼
- 「元の表の上で変更」「フォーマット/デザイン/他のシートは一切変更しない」という明確な指示がある
- 未分配利益、利益総額、純利益などの連携調整が必要
ユーザー必須ルール
- 絶対に元の表を基に新しい表を作らない — 元の表を直接編集し、フォーマット/デザイン/他のシートは一切変更しない
- 変更が必要な数値セルのみ変更し、それ以外は一切触らない
- 変更後は整合性が自動検証可能であること:
資産合計 = 負債合計 + 純資産合計期末未分配利益 − 期初未分配利益 = 累計利益総額純利益 = 利益総額 − 所得税
- 納品前にプログラムでバランスを検証すること。目視チェックは不可
技術選定(環境に応じて)
方式 A:Excel COM(Windows + Office、忠実度 100%)
.xls 形式、結合セル/罫線/数式を含む複雑な表に最適:
import win32com.client, shutil
SRC, OUT = '元の.xls', '調整版.xls'
shutil.copy2(SRC, OUT) # 元のファイルは変更しない
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = False; excel.DisplayAlerts = False
try:
wb = excel.Workbooks.Open(OUT)
ws = wb.Sheets('貸借対照表')
ws.Cells(行, 列).Value = 目標値 # 対象セルのみ変更
wb.Application.Calculate(); wb.Save(); wb.Close(True)
finally:
excel.Quit()
方式 B:openpyxl(クロスプラットフォーム、.xlsx)
フォーマットは保持されるが、数式に注意 — openpyxl は数式の計算結果(キャッシュ値)を読み取れない。セルに数式がある場合は上書きせず保持する:
import openpyxl
wb = openpyxl.load_workbook(OUT) # 注意: 数式を読むには data_only=False
ws = wb['貸借対照表']
ws.cell(行, 列).value = 目標値
wb.save(OUT)
方式 C:xlrd 読み取り + 方式 A/B 書き込み
古い .xls は xlrd でまず位置をスキャン(読み取り専用)、実際の変更は COM 経由または .xlsx に変換して処理。
致命的な落とし穴:まずスキャンして位置を特定、行番号/列番号を推測しないこと
古い財務諸表は左右二段組形式が多く、科目の位置が直感と反することがある:
- 貸借対照表:資産は左(A〜D列)、負債+純資産は右(E〜H列)。「未分配利益」ラベルは右側のE列、数値はG/H列 — 左側C/Dではない!
- 0-indexed(xlrd)と 1-indexed(COM/openpyxl の大部分のAPI)を混同すると、間違ったセルを変更する
- 正しい方法:まず科目名で行をスキャンし、その後で目的の列を変更する:
for r in range(1, 60):
label = str(ws.Cells(r, 1).Value or '') + str(ws.Cells(r, 5).Value or '')
if '未分配利益' in label:
ws.Cells(r, 7).Value = 期末目標 # 右欄 G 列
ws.Cells(r, 8).Value = 期初目標 # 右欄 H 列
break
整合性調整ロジック(「未分配利益を正の値に調整」例で検証済み)
目標:期末未分配利益=X、期初未分配利益=Y。
調整手順:
- 未分配利益(右側の欄)を目標値に変更
- 資産側の「その他未収入金」を同額反対方向に調整し、バランスを維持 — 純資産が変わったのに資産を変えないと負債のバランスが崩れる:
- その他未収入金 期末 += (新期末未分配 − 旧期末未分配)
- その他未収入金 期初 += (新期初未分配 − 旧期初未分配)
- 流動資産合計、資産合計(左欄)を調整後の値に変更
- 純資産合計、負債+純資産合計(右欄)を調整後の値に変更
- 損益計算書:営業収入 累計 += (目標累計利益 − 原累計利益);営業利益/利益総額/純利益を連動更新
- キャッシュフロー計算書は通常変更しない(実際の現金収支を伴わない損益調整のため)
⚠️ 合計行に数式がない場合がある(単なる数値) — .Formula を確認し、数値が返ってきて =SUM(...) でない場合は、合計行を手動で調整後の数値に書き換えること。明細を変更しても自動連動しない。
検証(納品前に必ず実行、プログラムで)
# 読み戻して検証(書き込みと同じエンジンを使用)
assert abs(資産合計 − (負債 + 純資産)) < 0.01
assert abs(累計利益総額 − (期末未分配 − 期初未分配)) < 0.01
assert abs(当期利益総額 − 目標) < 0.01
print('✓ 三表整合性確認完了')
品質セルフチェック
- 元の表を直接編集したか(再作成ではない)? フォーマットはそのままか?
- 変更が必要なセルのみ変更したか?
- 三表の整合性がプログラムで確認できたか?
- 元のファイルのバックアップはあるか?
コンプライアンス注意事項
調整後の財務諸表を融資申請、税務申告、監査など外部用途に使用する場合は、実際の調整伝票による裏付けが必要です。内部管理目的のみであれば問題ありません。ユーザーが調整後の財務諸表を不正に使用しようとしている意図が確認された場合は、コンプライアンス上のリスクを指摘し、不正への協力を拒否する必要があります。
🙋 著者について
九品錦锂e | 現場でハマったポイントを「そのまま使える」スキルにパッケージ化。教科書は書きません。このスキルは私自身が毎日使っているバージョンです。
微信:ly5419495(追加時は備考に「SkillHub」と記載してください。優先的に通過します) 公众号:初五Agent(微信で検索。振り返りとノウハウをそこに書いています。微信を追加しなくても読めます)
他にも私が作成したすぐ使えるツールは、以下のページ(コピーしてブラウザで開いてください)にあります: https://skillpay.alipay.com/public/jiupinjinlie
使用中に詰まった場合や、他のシナリオをスキル化してほしい場合は、上記のいずれかの方法でご連絡ください。
