You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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))存在两个核心问题:

  1. 用文本字符串匹配日期,极易因单元格格式差异导致匹配失败,应该直接使用日期值(如DATE(2022,7,1))而非文本
  2. CONCAT仅生成单元格地址文本,需配合INDIRECT才能取值,但INDIRECT是易失性函数,且固定范围$C1:$C100无法自动适配表格增长,远不如上述方案高效可靠

内容的提问来源于stack exchange,提问作者Dušan Stokić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:00:52