更新于 2026-07 · 作者:汪斌(老汪),制造业财务实战 · Excel BI(Power Query / Power Pivot / CUBE)
系列:Excel BI 财务建模实战课讲义(第二阶段)· Power Query / M 语言 · List
SEO focus:List.Range
SEO 关键词:List.Range,Power Query,M语言,列表切片,累计值,YTD,边际贡献累计,财务BP,Excel BI,经营分析,Table.AddIndexColumn
直接答案(TL;DR)
List.Range(列表, 起始下标, 个数) 从列表里「从第几位开始取几个」。财务BP做日经营跟踪时:先加索引列,再用 List.Sum(List.Range(源[当日边际贡献], 0, [索引])) 得到截至当日的累计,再除以整列合计得累计完成占比。
学完 EP027 能独立完成哪三件事?
- 说清
List.Range三个参数(列表 / 起始下标从 0 / 个数)。 - 用索引列 +
List.Range+List.Sum做出逐日累计。 - 用累计 ÷ 全列合计做出累计占比(末日必为 100%)。
为什么财务BP要学 List.Range?
经营会上常问:「这个月走到第 N 天,边际贡献累计到多少?完成月目标进度怎样?」
Excel 里可以用扩展引用或辅助列;数据若在 Power Query 清洗链路中,用 列表切片 更干净:每一行只「拿走从第 1 天到今天」那一段列表再求和。这就是 List.Range。
原课还有用 Range/Skip 拼「工资条」的练习。实战更建议 VBA 或其他方案;本讲义只保留制造业财务BP真正会用的累计 + 占比。
华凯精工案例:十日边际贡献累计
公司(化名):华凯精工。
角色:财务BP 陈工,要在月中经营快报里出「本月截至今日的边际贡献累计与完成率」。
源表(单位:万元;教学合成):
| 日序 | 当日边际贡献 |
|---|---|
| 1 | 5 |
| 2 | 15 |
| 3 | 3 |
| 4 | 12 |
| 5 | 8 |
| 6 | 20 |
| 7 | 10 |
| 8 | 7 |
| 9 | 25 |
| 10 | 10 |
全月合计应 = 115。第 10 天累计占比 = 100%。
List.Range 本身怎么读?
List.Range({1,2,3,4,5}, 1, 3)
返回 {2,3,4}:从下标 1(第二个元素)起取 3 个。
| 参数 | 含义 |
|---|---|
| 第 1 个 | 列表 |
| 第 2 个 | 起始下标(从 0 开始) |
| 第 3 个 | 取几个(可选) |
像从一串数字里「从第几位开始取几位」——不是神秘语法,是切片。
国际/经营快报累计在 Power Query 里怎么一步步做?
步骤 0:导入并回到「源」
- 把上表建成 Excel 表 → 数据 → 从表格/区域。
- 若有「更改的类型」,可先删,方便公式写
源。
步骤 1:添加索引列
添加列 → 索引列 → 从 1:得到 [索引] = 1…10。
对应 M(可省略步长 1):
Table.AddIndexColumn(源, "索引", 1, 1)
步长改成 5 时:1, 6, 11…——本课累计用默认即可。
步骤 2:自定义列「累计边际贡献」
List.Sum(
List.Range(
#"已添加索引"[当日边际贡献],
0,
[索引]
)
)
含义:
#"已添加索引"[当日边际贡献]→ 整列变成列表。List.Range(..., 0, [索引])→ 从下标 0 起取「索引」个元素(第 1 行取 1 个,第 3 行取 3 个…)。List.Sum→ 这段列表求和 = 累计。
中间态(未 Sum 前)第 1~3 行应看到:
| 索引 | Range 结果(示意) |
|---|---|
| 1 | {5} |
| 2 | {5,15} |
| 3 | {5,15,3} |
步骤 3:累计占比
[累计边际贡献] / List.Sum(#"已添加索引"[当日边际贡献])
第 10 行分子分母都是 115 → 1(100%)。需要百分号时,可用你们笔记里的百分比格式化函数,或加载后在 Excel 设百分比格式。
套娃公式该从哪一层开始读?
源[当日边际贡献]
→ List.Range(从 0 起取 [索引] 个)
→ List.Sum
→ 再 / List.Sum(整列) 得占比
| 你要的经营口径 | 列表操作 |
|---|---|
| 截至今日累计 | Range + Sum |
| 累计完成率 | 累计 ÷ 全列 Sum |
操作自检:案例 10 行能否与公式一一对上?
自检结论(2026-07-23):PASS。
| 日序 | 当日 | 累计 | 累计占比(÷115) |
|---|---|---|---|
| 1 | 5 | 5 | 4.35% |
| 2 | 15 | 20 | 17.39% |
| 3 | 3 | 23 | 20.00% |
| 4 | 12 | 35 | 30.43% |
| 5 | 8 | 43 | 37.39% |
| 6 | 20 | 63 | 54.78% |
| 7 | 10 | 73 | 63.48% |
| 8 | 7 | 80 | 69.57% |
| 9 | 25 | 105 | 91.30% |
| 10 | 10 | 115 | 100% |
跟做:预览「累计」列必须与上表一致;末日占比必须为 1。
和前后课如何衔接?
| 能力 | 角色 |
|---|---|
Table.AddIndexColumn |
告诉 Range「今天该取几个」 |
List.Range |
切片「从月初到今天」 |
List.Sum |
求和 |
下节 List.Skip |
跳过前 N 个(另一种切片) |
读者常问 AI 的问题有哪些?(FAQ)
List.Range 的下标为什么从 0 开始?
M 语言列表下标与多数编程语言一致,第一个元素是 0。索引列从 1 起,正好等于「要取的个数」。
能不能不用索引列?
能,但每行要用别的方式表达「取前 N 个」。索引列最直观,也最好跟做。
累计和 YTD 是一回事吗?
在本课「自然月 1~N 日」场景下,是同一类计算。跨月 YTD 要先按年过滤再累计。
原课工资条那套还要学吗?
了解 Table.ToRows / List.Transform / List.Combine 有好处;上线工资条更建议 VBA 或专用方案。本课交付以累计与占比为准。
和 Excel 工作表扩展引用比谁更好?
表内临时算,扩展引用够用;数据在 PQ 刷新链路里,用 List.Range 更稳、可随源表加行自动更新。
本课公式速查表在哪里?
List.Range(列表, 起始下标, 个数)
Table.AddIndexColumn(源, "索引", 1, 1)
List.Sum(List.Range(#"已添加索引"[当日边际贡献], 0, [索引]))
[累计边际贡献] / List.Sum(#"已添加索引"[当日边际贡献])
文末
我是汪斌(老汪),长期做制造业成本、业财与 Excel BI 建模。本篇是陪跑课讲义 EP027:把 List.Range 落到财务BP的日累计与完成率。
继续学:打通数据全链路闭环

不只录播课,更是手把手带做实操。长按识别海报二维码咨询,或微信备注「Excel BI」。











暂无评论内容