XLCS房产项目全成本测算模版 — 销售动态分析模块介绍

销售动态分析模块是 XLCS 房产项目全成本测算模板中的销售去化类敏感性分析工具,主要用于围绕项目销售节奏相关参数,批量模拟不同变化情景下项目核心财务指标的变化情况。

该模块与 GenerateSalesPlan 销售去化计划生成模块联动,但不再粗暴切换全局去化模式,而是尊重 02基本指标录入 中每行产品自身配置的独立去化模式,仅调整对应模式下的参数单元格,从而实现更加稳定、真实、可控的销售动态分析。

当前版本为 v7.0 优化重构版


📌 核心功能一览

功能 说明
支持销售动态敏感性分析 对销售节奏相关变量进行批量情景测算
尊重产品独立去化模式 不再强制切换所有产品模式,保留 D137:D160 每行配置
五类变量批量分析 支持开盘时间、去化率、住宅套数、商业套数、销售月数等变量
每个变量最多 10 组变化 自动读取 D4:M8 的变化区间
最多生成 50 条结果 5 个变量 × 10 个变化值
模式基准独立缓存 按“按去化率 / 按套数 / 按月数”等模式分别缓存基准结果
0%变化复用基准 避免重复计算,提高运行效率
自动调用销售计划生成 每次调整后自动运行 GenerateSalesPlan 刷新模型
自动抓取财务指标 从第11行 F:M 获取资金峰值、IRR、NPV 等核心指标
输入数据自动备份恢复 分析完成或报错后恢复原始参数和公式
支持取消分析 提供取消按钮,运行中可发送取消请求
第11行公式保护 防止分析过程中指标公式被覆盖
状态栏进度提示 实时显示变量、次数、进度和耗时
调试工具完善 提供基准值检查、公式检查、财务指标调试等工具

⚙️ 模块基本信息

项目 内容
模块名称 销售动态分析模块
作者 XLCS-Jgwy
日期 2026-06-04
当前版本 v7.0 优化重构
主过程 SalesDynamicAnalysis
快捷入口 RunSalesDynamicAnalysis_Final
取消入口 CancelSalesAnalysis_Final
分析表 Sheet80
参数输入表 02基本指标录入 / Sheet9
依赖模块 GenerateSalesPlan
最大结果数 50 条
输出区域 B12:M500
指标来源 第11行 F:M

🚀 适用场景

销售动态分析模块适用于以下典型场景:

  1. 销售节奏敏感性分析

    • 分析开盘时间提前或延后、去化率变化、销售月数变化等对现金流和收益指标的影响。
  2. 现金流压力测试

    • 模拟销售放缓、开盘推迟、月销套数下降等不利情形下项目资金峰值和回正期变化。
  3. 销售策略比选

    • 对比快销、稳销、慢销等不同销售策略对 IRR、NPV、资金峰值的影响。
  4. 投资决策支持

    • 在拿地测算或项目立项阶段,快速判断销售节奏对项目投资价值的影响。
  5. 敏感性分析批量输出

    • 自动生成多变量、多情景测算结果,可用于图表展示和汇报材料。

🧩 功能入口说明

宏名称 功能 说明
SalesDynamicAnalysis 主分析程序 执行完整销售动态分析
RunSalesDynamicAnalysis_Final 快捷运行入口 按钮推荐绑定该宏
CancelSalesAnalysis_Final 取消分析 运行中发送取消请求
CheckBaseValue 检查基准值 调试变量基准值和格式
CheckRow11Formulas 检查第11行公式 在即时窗口输出 F:M 公式状态
DebugFinancialMetrics 调试财务指标 弹窗查看第10、11、12行指标信息
AddSalesAnalysisButtons_Final 添加按钮 自动添加运行、取消、检查按钮

🧭 操作流程

第一步:准备分析工作表

销售动态分析模块运行在 Sheet80 对应的分析表中。

分析表中需要设置:

区域 内容
B4:B8 分析变量名称
C4:C8 各变量基准值
D4:M8 各变量变化范围
F11:M11 当前方案核心财务指标公式
B12:M500 分析结果输出区

第二步:设置变量名称

B4:B8 中设置 5 个销售动态分析变量。

常见变量示例:

变量名称示例 对应参数
B4 开盘时间 K128
B5 月去化率 I131
B6 住宅月去化套数 K131
B7 商业月去化套数 M131
B8 销售去化月数 O131

模块会根据变量名称自动判断其对应的去化模式和输入单元格。


第三步:设置基准值

C4:C8 中填写对应变量的基准值。

变量类型 基准值要求
开盘时间 有效日期
去化率 数值或百分比
住宅月去化套数 数值
商业月去化套数 数值
销售去化月数 数值

模块会自动校验基准值是否合法。


第四步:设置变化范围

D4:M8 中填写每个变量的 10 组变化值。

例如:

去化率 / 套数类变量

使用百分比变化:

变化值 含义
-20% 基准值下降 20%
-10% 基准值下降 10%
0% 使用基准值
10% 基准值上升 10%
20% 基准值上升 20%

计算逻辑:

调整后值 = 基准值 × (1 + 变化值)

开盘时间类变量

使用月份偏移:

变化值 含义
-2 开盘提前 2 个月
-1 开盘提前 1 个月
0 基准开盘时间
1 开盘延后 1 个月
2 开盘延后 2 个月

计算逻辑:

调整后日期 = 基准日期 + 变化月份

销售月数类变量

使用绝对增减月数:

调整后月数 = 基准月数 + 变化值

第五步:运行分析

推荐运行:

Call RunSalesDynamicAnalysis_Final

或直接运行主过程:

Call SalesDynamicAnalysis

系统会自动完成:

  1. 校验变量名称和基准值
  2. 备份输入参数、模式单元格和第11行公式
  3. 初始化输出区域
  4. 按变量识别对应销售去化模式
  5. 为每种涉及的模式预先计算基准指标
  6. 逐变量、逐变化值调整参数
  7. 调用 GenerateSalesPlan(True) 重新生成销售计划
  8. 等待模型计算完成
  9. 抓取 F11:M11 财务指标
  10. 写入 B12:M500 结果区域
  11. 恢复原始输入参数和公式
  12. 重新生成一次销售计划,恢复模型状态

📊 输入与输出区域

输入区域

区域 / 单元格 内容 说明
B4:B8 变量名称 模块根据名称识别变量类型
C4:C8 基准值 各变量初始参数
D4:M8 变化范围 每个变量最多 10 组变化
F11:M11 财务指标公式 用于抓取每次测算结果

被调整的目标参数

模块不会直接批量修改产品行去化模式,而是仅修改对应参数单元格。

变量类型 对应单元格 所属工作表
开盘时间 K128 02基本指标录入
去化率 I131 02基本指标录入
住宅月去化套数 K131 02基本指标录入
商业月去化套数 M131 02基本指标录入
销售去化月数 O131 02基本指标录入
当前模式输入 E131 02基本指标录入

输出区域

分析结果从第12行开始输出。

字段 说明
A列 序号 自动生成
B列 变量 当前分析变量
C列 基准值 当前变量原始值
D列 变化范围 当前情景变化值
E列 调整后值 应用变化后的参数
F列 资金峰值(万元) 来自 F11
G列 峰值时间 来自 G11
H列 IRR(税前) 来自 H11
I列 IRR(税后) 来自 I11
J列 折现率(不含融资)NPV(万元) 来自 J11
K列 折现率(含融资)NPV(万元) 来自 K11
L列 现金流回正期(含融资,月) 来自 L11
M列 年自有资金投资回报率 来自 M11

🔍 功能详解

1. 不再全局切换产品去化模式

旧版分析可能通过修改全局模式影响所有产品,容易破坏不同产品行的个性化设置。

v7.0 重构后,模块说明中明确:

不再切换全局去化模式
尊重 GenerateSalesPlan 中每行产品的独立模式配置(D137:D160)

也就是说,产品行自身设置为:

  • 按默认
  • 按去化率
  • 按月数
  • 按套数

都会被保留。

模块只调整与分析变量对应的参数单元格,使分析结果更贴合真实模型配置。


2. 按变量名称自动识别模式

模块通过变量名称判断目标模式。

核心逻辑:

If InStr(cleanName, "去化率") > 0 Then
    GetModeByVariableName = "按去化率"
ElseIf ... "住宅/商业" And "套数/套" Then
    GetModeByVariableName = "按套数"
ElseIf InStr(cleanName, "月数") > 0 Then
    GetModeByVariableName = "按月数"
Else
    GetModeByVariableName = "按去化率"
End If

识别规则如下:

变量名称关键词 识别模式
去化率 按去化率
住宅 + 套数 / 套 按套数
商业 + 套数 / 套 按套数
月数 按月数
其他 默认按去化率

3. 按变量名称自动映射输入单元格

模块根据变量名称自动找到需要调整的参数位置。

变量关键词 输入单元格
开盘 K128
去化率 I131
住宅 + 套数 / 套 K131
商业 + 套数 / 套 M131
销售 / 去化 + 月数 / 月 O131

对应函数:

GetInputCell(varName)

这样用户只需在 B4:B8 设置变量名称,模块即可自动完成参数映射。


4. 模式基准独立缓存

模块会先扫描 5 个变量涉及哪些去化模式,然后分别计算一次基准结果并缓存。

例如:

变量 对应模式
去化率 按去化率
住宅月去化套数 按套数
销售去化月数 按月数

模块会分别缓存:

按去化率 基准指标
按套数 基准指标
按月数 基准指标

缓存结构:

m_BaselineCache = CreateObject("Scripting.Dictionary")

键值:

模式名 -> 指标数组(1~8)

这样不同变量在 0% 变化时,可以复用对应模式下的基准指标。


5. 0% 变化复用基准结果

当变化值为 0 时,模块不会重复运行销售计划,而是直接复用当前模式基准结果。

核心逻辑:

If changeValues(j) = 0 And Not IsEmpty(baselineMetrics(1)) Then
    For col = 1 To 8
        results(currentRecord, col + 4) = baselineMetrics(col)
    Next col
    GoTo NextAdjustment
End If

优势:

  • 避免重复计算
  • 缩短运行时间
  • 保证基准结果一致
  • 降低大型模型批量分析压力

6. 自动调用 GenerateSalesPlan

每次非 0 变化值写入参数后,模块会调用:

Application.Run "GenerateSalesPlan", True

其中 True 表示以静默模式运行,避免弹窗打断批量分析。

调用过程封装在:

RunGenerateSalesPlanSafe

该函数还会:

  1. 临时解除 SuppressGenerateSalesPlan
  2. 调用 GenerateSalesPlan
  3. 主动执行 Application.Calculate
  4. 恢复第11行公式
  5. 等待计算完成
  6. 返回是否成功

7. 支持超时控制

模块内置两个超时时间:

Private Const GENERATE_TIMEOUT_SECONDS As Double = 120
Private Const CALC_TIMEOUT_SECONDS As Double = 60

含义:

常量 默认值 说明
GENERATE_TIMEOUT_SECONDS 120秒 生成销售计划最大等待时间
CALC_TIMEOUT_SECONDS 60秒 模型计算最大等待时间

如果模型过大或计算较慢,模块会尽量等待计算完成,避免抓取未更新的指标。


8. 输入和公式自动备份恢复

模块定义了轻量备份结构:

Private Type CellBackup
    Target As Range
    HasFormula As Boolean
    FormulaOrValue As Variant
End Type

运行时会备份:

  • 五个变量对应的输入单元格
  • 模式单元格 E131
  • 第11行 F:M 指标公式
  • 其他运行中可能被改写的单元格

分析完成或报错后统一执行:

RestoreAllBackups

保证模型恢复到分析前状态。


9. 第11行指标公式保护

第11行 F:M 是模块抓取财务指标的关键区域,因此提供双重保护:

  1. 使用通用备份系统备份单元格
  2. 使用专门数组备份公式状态

相关过程:

BackupRow11Formulas ws
RestoreRow11Formulas ws

GenerateSalesPlan 运行后,模块还会主动恢复第11行公式,防止被其他过程覆盖。


10. 支持取消分析

模块提供全局取消变量:

Public CancelAnalysis As Boolean

运行取消宏:

Call CancelSalesAnalysis_Final

会设置:

CancelAnalysis = True
Application.StatusBar = "已发送取消请求..."

主循环和等待计算过程中会检查该状态,尽量安全退出。


11. 防止重复运行

模块使用:

Public AnalysisStarted As Boolean

如果分析已经运行,再次启动时会提示:

分析已在运行中,是否重新开始?

避免重复点击按钮导致参数交叉修改或结果混乱。


12. 结果格式自动处理

模块会根据变量类型自动设置格式。

字段 格式
开盘时间 yyyy/m/d
去化率 0.00%
套数 / 月数 #,##0.0
变化范围(比例类) +0.00%;-0.00%
变化范围(月份类) 0
IRR 0.00%
NPV / 资金峰值 #,##0
峰值时间 yyyy/m/d

🧱 模块结构说明

主流程

过程 / 函数名 说明
SalesDynamicAnalysis 主程序,负责初始化、备份、分析、输出和恢复
RunSalesAnalysisFinal 核心分析循环,执行变量和变化值遍历
RunSalesDynamicAnalysis_Final 按钮快捷入口
CancelSalesAnalysis_Final 取消分析入口

变量识别与计算

函数名 说明
GetModeByVariableName 根据变量名称识别去化模式
GetInputCell 根据变量名称映射输入单元格
CalculateAdjustmentByName 根据变量类型计算调整后值
GetBaseValue 获取并处理基准值
ShouldSkipVariableByName 判断变量是否应跳过
NormalizeName 统一变量名称格式,兼容全角括号

备份与恢复

过程名 说明
InitBackupSystem 初始化备份系统
AddBackup 添加单元格备份
RestoreAllBackups 恢复全部备份
RestoreOneCellBackup 恢复指定单元格
BackupRow11Formulas 备份第11行公式
RestoreRow11Formulas 恢复第11行公式

计算与结果

过程 / 函数名 说明
RunGenerateSalesPlanSafe 安全调用销售计划生成模块
WaitUntilCalculationDone 等待模型计算完成
CaptureFinancialMetrics 抓取 F11:M11 财务指标
BuildOutputArray 裁剪输出数组
FormatResults 格式化输出结果
InitializeAnalysis 初始化标题和输出区域

调试工具

过程名 说明
CheckBaseValue 检查变量基准值、格式、公式等
CheckRow11Formulas 输出第11行 F:M 公式状态
DebugFinancialMetrics 查看财务指标当前值
AddSalesAnalysisButtons_Final 自动添加分析按钮
DebugLog 输出调试日志

⚙️ 关键参数说明

常量 / 变量 默认值 说明
DEBUG_MODE True 是否输出调试日志
SHOW_FINISH_MSG False 是否显示完成弹窗
MAX_RECORDS 50 最大输出记录数
GENERATE_TIMEOUT_SECONDS 120 销售计划生成超时
CALC_TIMEOUT_SECONDS 60 计算等待超时
CancelAnalysis False 是否取消分析
AnalysisStarted False 是否正在运行
SuppressGenerateSalesPlan True/False 外部销售计划调用抑制标志

🧪 使用示例

运行销售动态分析

Sub RunAnalysis()
    Call RunSalesDynamicAnalysis_Final
End Sub

取消销售动态分析

Sub CancelAnalysis()
    Call CancelSalesAnalysis_Final
End Sub

添加操作按钮

Sub AddButtons()
    Call AddSalesAnalysisButtons_Final
End Sub

执行后会在分析表上添加:

  • 运行销售动态分析
  • 取消
  • 检查基准值
  • 检查第11行公式

📅 版本说明

版本 核心改进
v7.0 优化重构,不再切换全局去化模式,尊重每行产品独立模式配置,增加按模式基准缓存
v6.x 增强 GenerateSalesPlan 联动与计算等待
v5.x 增加第11行公式保护和结果格式化
v4.x 增加取消分析与运行状态控制
v3.x 支持多变量批量动态分析
v1.x-v2.x 初始销售动态敏感性分析逻辑

当前版本:v7.0 优化重构版


🔧 调试与维护建议

1. 提示找不到 02基本指标录入

请检查:

  • 工作簿中是否存在 02基本指标录入
  • Sheet9 是否绑定到基础指标录入表
  • 工作表名称是否被修改

模块会先按名称查找:

ThisWorkbook.Worksheets("02基本指标录入")

如果找不到,再尝试使用:

Sheet9

2. 提示变量名称为空

请检查 B4:B8 是否完整填写变量名称。

每一行变量都必须有名称,否则验证不通过。


3. 提示基准值为空或格式错误

请检查 C4:C8

变量类型 要求
开盘时间 必须是有效日期或有效日期序列值
去化率 / 套数 / 月数 必须是数值

可以运行:

Call CheckBaseValue

查看详细单元格信息。


4. 变量无法映射输入单元格

说明变量名称中缺少模块可识别的关键词。

建议使用以下关键词:

变量类型 建议关键词
开盘时间 包含“开盘”
去化率 包含“去化率”
住宅套数 包含“住宅”和“套数”
商业套数 包含“商业”和“套数”
销售月数 包含“销售”或“去化”,并包含“月数”

5. 分析结果没有变化

可能原因:

  • 当前模型产品行未启用对应去化模式
  • 变量对应参数没有被销售计划使用
  • GenerateSalesPlan 未正常执行
  • 第11行指标公式未关联销售计划结果
  • 变化值均为 0
  • 基准值为 0 被模块跳过

建议检查:

Call CheckRow11Formulas
Call DebugFinancialMetrics

6. GenerateSalesPlan 执行失败或超时

请检查:

  • GenerateSalesPlan 宏是否存在
  • 销售去化模块是否可独立正常运行
  • GenerateSalesPlan 是否支持静默参数 True
  • 工作簿计算是否过慢
  • 是否存在其他宏锁定或弹窗

7. 为什么运行后模型参数会恢复?

这是模块设计目标。

销售动态分析属于情景模拟工具,不应永久修改基础模型。因此模块在运行前备份所有受影响单元格,运行结束后自动恢复。


💡 常见问题

Q:这个模块会改变产品行的去化模式吗?

A:不会。v7.0 明确不再切换全局去化模式,并尊重 D137:D160 中每行产品自己的模式配置。


Q:模块会修改哪些核心参数?

A:仅根据变量类型修改以下单元格:

K128、I131、K131、M131、O131、E131

并在分析完成后恢复。


Q:为什么 0% 变化不重新计算?

A:因为模块已经为对应模式预先计算并缓存了基准指标。0% 变化直接复用基准结果,可以减少重复计算并提高速度。


Q:最多可以分析多少条记录?

A:默认最多 50 条,即 5 个变量 × 每个变量 10 组变化值。

对应常量:

Private Const MAX_RECORDS As Long = 50

Q:如何中途取消分析?

A:运行:

Call CancelSalesAnalysis_Final

或点击模块添加的“取消”按钮。


Q:为什么有些变量会被跳过?

A:非开盘类变量如果基准值为空或为 0,会被模块跳过,避免无意义或错误计算。


Q:开盘时间的变化值如何填写?

A:填写月份偏移量。例如:

-2 表示提前2个月
0 表示不变
3 表示延后3个月

Q:去化率和套数的变化值如何填写?

A:填写比例变化,例如:

-10% 表示下降10%
0% 表示不变
20% 表示上升20%

计算公式:

调整后值 = 基准值 × (1 + 变化值)

Q:销售月数的变化值如何填写?

A:填写增减月数。例如:

-2 表示缩短2个月
3 表示增加3个月

计算公式:

调整后月数 = 基准月数 + 变化值

Q:支持 WPS 吗?

A:模块主要使用标准 VBA 对象和 Application.Run 调用方式,通常可在 WPS 中运行。但由于依赖 GenerateSalesPlan 和全模型计算,建议正式使用前先进行测试。


⚠️ 注意事项

  1. 使用前请确保已启用宏。
  2. 请确认 GenerateSalesPlan 销售去化模块可独立正常运行。
  3. 请确认分析表 Sheet80 绑定正确。
  4. 请确认 02基本指标录入Sheet9 存在。
  5. B4:B8 必须填写变量名称。
  6. C4:C8 必须填写有效基准值。
  7. D4:M8 建议填写数值型变化范围。
  8. 第11行 F:M 应保留财务指标公式。
  9. 分析运行期间不要手动修改工作簿。
  10. 如果模型较大,运行时间可能较长,请等待状态栏提示完成。
  11. 若需要中途停止,请使用取消按钮,不建议强制中断 Excel / WPS。
  12. 建议首次运行前保存并备份文件。

📞 技术支持

官网:

求助建议: http://xlcs.de/

邮件联系: admin@fdc.sd


📷 模块展示

销售动态分析模块界面1


✅ 总结

XLCS 销售动态分析模块通过批量调整开盘时间、去化率、月去化套数、销售月数等关键销售参数,自动生成多情景下的资金峰值、IRR、NPV、现金流回正期等核心指标结果。

v7.0 版本最大的改进是:不再强制切换全局去化模式,而是尊重产品行独立配置,仅调整对应参数,并通过模式基准缓存提升计算效率和结果稳定性。

对于房产项目投资测算、销售策略比选、现金流压力测试和汇报分析而言,该模块是 XLCS 全成本测算模板中重要的销售敏感性分析工具。
````