如何用Excel函数提取每月1日对应的最后一笔Running Total值?
提取每月1日最后一笔Running Total的Excel函数方案
假设你的数据源满足:
- Date列(日期值,由
DATE()生成)位于Sheet1!$C:$C - Running Total列位于
Sheet1!$B:$B - 日期已按升序排列
- 新表中需提取对应月份1日的Running Total值
方案1:Excel 365/2021 动态数组版(自动适配表格增长)
如果需要自动生成所有存在的「每月1日+对应Running Total」组合,直接在新表的空白单元格输入:
=LET( 源日期列, Sheet1!$C:$C, 累计值列, Sheet1!$B:$B, 所有当月1日, UNIQUE(EOMONTH(源日期列,-1)+1), 最后匹配值, XLOOKUP(所有当月1日, 源日期列, 累计值列, "", -1), FILTER(HSTACK(所有当月1日, 最后匹配值), 最后匹配值<>"") )
- 逻辑:先提取每个日期对应的当月1日,去重后用
XLOOKUP的反向匹配(参数-1)找到该日期最后一次出现时的Running Total,最后过滤掉无数据的日期。
如果是新表中手动指定要查询的日期(比如新表A2为DATE(2022,7,1)),单个单元格公式:
=XLOOKUP(A2, Sheet1!$C:$C, Sheet1!$B:$B, "", -1)
- 优势:整列引用自动包含新增数据,
-1参数直接匹配最后一行符合条件的记录,无需额外判断。
方案2:旧版Excel兼容方案(无XLOOKUP)
如果你的Excel版本不支持动态数组,用INDEX+MATCH组合公式(新表A2为目标日期):
=IFERROR(INDEX(Sheet1!$B:$B, MATCH(A2+1, Sheet1!$C:$C, 1)), "")
- 逻辑:
MATCH(A2+1, Sheet1!$C:$C, 1)会找到第一个大于当月1日的日期的前一个位置,也就是当月1日最后一行的行号,再用INDEX提取对应累计值;无数据时返回空。
关于你之前尝试的公式问题
你写的=CONCAT("$B",MATCH("Jul 01, 22",$C1:$C100,1))存在两个核心问题:
- 用文本字符串匹配日期,极易因单元格格式差异导致匹配失败,应该直接使用日期值(如
DATE(2022,7,1))而非文本 CONCAT仅生成单元格地址文本,需配合INDIRECT才能取值,但INDIRECT是易失性函数,且固定范围$C1:$C100无法自动适配表格增长,远不如上述方案高效可靠
内容的提问来源于stack exchange,提问作者Dušan Stokić
相关产品推荐
相关产品推荐

