模板要求
此技能使用 LBO
模型的模板。始终首先检查是否有附带的模板文件。
在开始任何 LBO 模型之前:
- 如果附带了/提供了模板文件:严格使用该模板的结构 —
复制它并用用户的数据填充
- 如果没有附带模板:询问用户:"您有想要我使用的特定
LBO
模板吗?如果没有,我可以使用包含来源与用途、运营模型、债务明细表和回报分析的标准模板。"
- 如果使用标准模板:复制
examples/LBO_Model.xlsx
作为您的起点,并用用户的假设填充
重要:当附加了像 LBO_Model.xlsx
这样的文件时,您必须将其用作模板 —
不要从头构建。即使模板看起来很复杂或具有超出需要的功能,也要复制它并根据用户的要求进行调整。永远不要在提供模板时决定"从头构建"。
Claude 的关键说明 — 先阅读
环境:Office JS vs Python
如果在 Excel 内部运行(Office 插件 / Office JS
环境):
- 直接使用 Office
JS(
Excel.run(async (context) => {...}))— 不要使用
Python/openpyxl
- 通过
range.formulas = [["=B5*B6"]] 编写公式 — Office JS
公式在实时工作簿中原生重新计算
- 同样的公式优先于硬编码规则适用:对于任何应该是计算的内容,设置
range.formulas,永远不要设置 range.values
- 使用
range.format.font.color /
range.format.fill.color 实现蓝色/黑色/紫色/绿色惯例
- 不需要单独的重新计算步骤 — Excel 原生处理计算
- 合并单元格陷阱: 不要先调用
.merge()
再在合并范围上设置 .values(抛出
InvalidArgument —
范围报告的是合并前的尺寸)。相反:单独写入左上角单元格的值(ws.getRange("A7").values = [["来源与用途"]]),然后合并
+
格式化整个范围(ws.getRange("A7:F7").merge(); ws.getRange("A7:F7").format.fill.color = "#1F4E79";)
如果生成独立的 .xlsx 文件(无实时 Excel 会话):
- 使用 Python/openpyxl 如下所述
- 写入公式字符串(
ws["D20"] = "=B5*B6"),然后在交付前运行
recalc.py
本技能的其余部分使用 openpyxl 示例编写,但相同的原则适用于 Office JS
— 只需转换 API 调用。
核心原则
- 每个计算必须是 Excel 公式 — 永远不要在 Python
中计算值并将结果硬编码到单元格中。使用 openpyxl 时,写入
cell.value = "=B5*B6"(公式字符串),而不是
cell.value = 1250(计算结果)。模型必须是动态的,在输入更改时更新。
- 使用模板结构 — 遵循
examples/LBO_Model.xlsx
或用户提供的模板的组织结构。不要发明自己的布局。
- 使用正确的单元格引用 —
所有公式应引用适当的单元格。永远不要输入应该来自其他单元格的数字。
- 保持符号惯例一致 —
遵循模板使用的任何符号惯例(有些用负数表示流出,有些用正数)。全程保持一致。
- 逐部分工作,每步与用户验证 —
完全完成一个部分,向用户展示构建的内容,运行该部分的验证检查,获得确认后再进入下一部分。不要端到端构建整个模型然后呈现
—
后面的部分依赖前面的部分,所以在来源与用途中发现错误而回报已经构建好后,意味着到处返工。
公式颜色惯例
- 蓝色(0000FF):硬编码输入 —
不引用其他单元格的键入数字
- 黑色(000000):带计算的公式 —
任何使用运算符或函数的公式(
=B4*B5、=SUM()、=-MAX(0,B4))
- 紫色(800080):链接到同一工作表上的单元格
— 无计算的直接引用(
=B9、=B45)
- 绿色(008000):链接到不同工作表上的单元格
—
跨表引用(
=Assumptions!B5、='Operating Model'!C10)
填充颜色配色 —
专业蓝与灰(默认,除非用户/模板另有指定)
- 保持最小 —
仅使用蓝色和灰色进行单元格填充。不要引入绿色、黄色、红色或多重强调色。专业的
LBO 模型使用克制的色彩。
- 默认填充配色:
- 部分标题(来源与用途、运营模型等):深蓝
#1F4E79 搭配白色加粗文本
- 列标题(第 1 年、第 2 年等):浅蓝
#D9E1F2 搭配黑色加粗文本
- 输入单元格:浅灰
#F2F2F2(或仅白色)—
蓝色字体是信号,填充是次要的
- 公式/计算单元格:白色,无填充
- 关键输出(IRR、MOIC、退出权益):中蓝
#BDD7EE 搭配黑色加粗文本
- 这就是整个配色。 3 种蓝色 + 1 种灰色 +
白色。如果模板使用自己的颜色,则遵循模板。
- 注意:上面的蓝色/黑色/紫色/绿色字体颜色用于区分输入
vs 公式 vs 链接。这些与这里的填充配色是分开的 —
两者协同工作。
数字格式标准
- 货币:
$#,##0;($#,##0);"-" 或
$#,##0.0 取决于模板
- 百分比:
0.0%(一位小数)
- 倍数:
0.0"x"(一位小数)
- MOIC/详细比率:
0.00"x"(两位小数以提高精度)
- 所有数字单元格:右对齐
首先明确要求
在填充任何公式之前:
- 检查模板结构 —
识别所有部分,理解时间线(哪些列对应哪些期间),注意任何现有公式
- 如果有任何不清楚的地方,询问用户 —
如果模板结构、计算方法或要求不明确,在继续之前询问
- 确认关键假设 —
任何关键输入、计算偏好或特定要求
- 仅在理解模板后,继续填充公式
模板分析阶段 — 首先执行此操作
在填充任何公式之前,彻底检查模板:
映射结构 —
识别每个部分的位置以及它们之间的相互关系。注意哪些部分为其他部分提供输入。
理解时间线 —
哪些列对应哪些期间?是否有"交割"或"备考"列?预测期从哪里开始?
识别输入单元格 vs 公式单元格 —
模板通常使用颜色编码、边框或底纹来指示哪些单元格需要输入 vs
公式。尊重这些惯例。
仔细阅读现有标签 —
行标签准确告诉您预期什么计算。不要假设 — 阅读模板在要求什么。
检查现有公式 —
有些模板是部分填充的。除非被特别要求,否则不要覆盖工作正常的公式。
注意模板特定的惯例 —
符号惯例、小计结构、各部分如何组织、是否有不同的组成部分使用单独的工作表等。
填充公式 — 通用方法
对于每个需要公式的单元格,遵循此层级:
步骤 1:检查模板
- 该单元格是否已有公式?如果有,验证其正确性并继续。
- 是否有注释或说明指示预期的计算?
- 行/列标签是否使计算显而易见?
- 相邻单元格是否显示您应该遵循的模式?
步骤 2:检查用户的说明
- 用户是否指定了特定的计算方法?
- 是否有影响此公式的已声明假设?
- 是否有任何特殊要求被提及?
步骤 3:应用标准实践
- 如果模板和用户都没有指定,使用标准的 LBO 建模惯例
- 记录您做出的任何假设
- 如果确实不确定,询问用户
常见问题领域
以下计算模式经常在 LBO
模型中引起问题。在遇到这些模式时要特别注意:
平衡部分
- 当两个部分必须相等时(例如,来源 =
用途),其中一个项目通常是"插值"(平衡数字)
- 识别哪个项目是插值,并将其计算为差额
税务计算
- 税务公式应仅引用相关的收入行和税率
- 不应引用无关部分(例如债务明细表)
- 考虑亏损是否创造税盾或只是被忽略
利息和循环引用
- 如果利息计算引用了受现金流影响的余额,可能会产生循环
- 使用期初余额(而非平均值或期末余额)来打破循环引用
- 模式:利息 → 现金流量 → 偿还 →
期末余额(如果利息使用期末余额,则会循环)
债务偿还 / 现金扫除
- 当存在多档债务时,通常有一个优先顺序
- 现金扫除应尊重优先顺序瀑布
- 余额不能为负 — 适当使用 MAX 或 MIN 函数
回报计算(IRR/MOIC)
- 现金流必须具有正确的符号:投资 = 负数,收益 = 正数
- 如果使用 XIRR,需要相应的日期
- 如果使用 IRR,现金流应在连续的期间内
- MOIC = 总收益 / 总投资
敏感性表格
- 使用奇数维度(5×5 或 7×7)— 永远不要用 4×4 或
6×6。奇数维度保证有真正的中心单元格。
- 中心单元格 = 基准情景。
围绕模型的实际假设对称构建行和列轴值(例如,如果基准进入倍数 = 10.0x,轴
=
[8.0x, 9.0x, 10.0x, 11.0x, 12.0x])。中心单元格的
IRR/MOIC 必须等于模型的实际 IRR/MOIC 输出 —
这是验证表格连接正确的证明。
- 高亮中心单元格 —
中蓝色填充(
#BDD7EE)+
加粗字体,以便基准情景在视觉上有锚点。
- Excel 的数据表功能可能无法与 openpyxl 一起使用 —
而是编写引用行/列标题的显式公式
- 每个单元格应显示不同值 —
如果全部相同,公式未正确变化
- 使用混合引用(例如,行输入用
$A5,列输入用
B$4)
验证检查清单 — 完成后运行
运行公式验证
python /mnt/skills/public/xlsx/recalc.py model.xlsx
必须返回成功且零错误。
部分平衡
收入/运营预测
资产负债表(如适用)
现金流量表(如适用)
辅助明细表
债务/融资明细表(如适用)
回报/输出分析
敏感性表格(如适用)
格式
逻辑合理性检查
要避免的常见错误
| 错误 |
出什么问题 |
如何修复 |
| 硬编码计算值 |
输入更改时模型不更新 |
始终使用引用源单元格的公式 |
| 复制后单元格引用错误 |
公式指向错误的单元格 |
验证所有链接,适当使用 $ 锚定 |
| 循环引用错误 |
模型无法计算 |
对利息类计算使用期初余额,打破循环 |
| 各部分不平衡 |
应匹配的合计不匹配 |
确保一个项目是插值(计算为差额) |
| 不可能出现的负余额 |
使用/支付超过可用量 |
适当使用 MAX(0, ...) 或 MIN 函数 |
| IRR/回报错误 |
符号错误或范围不完整 |
检查现金流符号并确保公式覆盖所有期间 |
| 敏感性表格显示相同值 |
公式未随输入变化 |
检查单元格引用 — 需要混合引用(A5、B4) |
| 滚动计算不一致 |
期初 ≠ 上期期末 |
验证期间之间的链接 |
| 符号惯例不一致 |
加项变成减项或反之 |
全程一致遵循模板的惯例 |
与用户协作 — 逐部分检查点
- 如果模板结构不明确,在继续之前询问
- 如果用户的要求与模板冲突,确认他们的偏好
- 完成每个主要部分后,暂停并与用户验证,然后再继续:
- 完成来源与用途后 →
展示平衡表,确认插值正确,获得批准后再构建运营模型
- 完成运营模型/预测后 →
展示预测的损益表,确认增长率和利润率看起来正确,获得批准后再处理债务明细表
- 完成债务明细表后 →
展示期初/期末余额和利息,确认瀑布逻辑,获得批准后再处理回报
- 完成回报(IRR/MOIC)后 →
展示现金流系列和输出,确认符号和范围,获得批准后再处理敏感性表格
- 完成敏感性表格后 →
展示每个单元格的变化,确认基准情景落在预期位置
- 如果在验证过程中发现错误,在进入下一部分之前修复它们
- 展示您的工作 —
在有助于理解时解释关键公式或假设
- 永远不要在未在每个部分进行检查的情况下提交完整的模型
— 在源头捕获错误的单元格引用比从断裂的 IRR 反向追踪要快得多
此技能通过用正确的公式、适当的格式和经过验证的计算填充模板,生成投资银行质量的
LBO
模型。该技能适应任何模板结构,同时确保财务准确性和专业呈现标准。