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

如何用Excel公式简洁合并连续列中每行的最后非空单元格值

如何用Excel公式简洁合并连续列中每行的最后非空单元格值

嗨,我来帮你搞定这个Excel公式的需求!从你的描述和示例来看,你想要先把每列空白单元格用上方最近的非空值填充,再合并每行的有效内容,对吧?下面分两种情况给你提供解决方案,适配不同版本的Excel:

一、Excel 365/2021(支持动态数组):简洁高效版

如果你用的是新版本Excel,直接用动态数组公式就能一步到位,完全符合你想要的“简洁”要求:

  1. 先实现列方向的非空值填充
    假设你的源数据在A1:C6区域,要把每列的空白单元格用上方最近的非空值填充,输入下面的公式:

    =BYCOL(A1:C6,LAMBDA(c,SCAN("",c,LAMBDA(a,v,IF(v<>"",v,a)))))
    

    这个公式会逐列处理:用SCAN函数遍历每一列,遇到非空值就更新“记忆值”,空白单元格就沿用之前的记忆值,正好得到你示例里的填充后数组:

    {1,0,0;1,2,0;1,2,3;4,0,0;4,5,0;4,5,6}
    

    (注:如果你的空白是用0表示的,把公式里的v<>""改成v<>0即可)

  2. 合并每行的内容
    要直接得到合并后的最终结果,把上面的公式嵌套进BYROW和TEXTJOIN里就行:

    =BYROW(BYCOL(A1:C6,LAMBDA(c,SCAN("",c,LAMBDA(a,v,IF(v<>"",v,a))))),LAMBDA(r,TEXTJOIN("",TRUE,r)))
    

    这个公式会自动遍历每行,把填充后的内容合并成连续的字符串,比如第三行得到123,第六行得到456,完美匹配你的预期。

二、旧版Excel(不支持动态数组):兼容版

如果你的Excel版本比较旧,没法用动态数组函数,可以用数组公式结合LOOKUP和TEXTJOIN来实现:
比如要获取第一行的合并结果,输入下面的公式后按Ctrl+Shift+Enter(数组公式专属输入方式):

=TEXTJOIN("",TRUE,IF(COLUMN(A1:C1)<=MAX(IF(A$1:A1<>"",COLUMN(A$1:A1),0)),INDEX(A$1:C1,MAX(IF(A$1:A1<>"",ROW(A$1:A1),0)),COLUMN(A1:C1)),""))

然后下拉填充到所有行即可。不过这个公式相对繁琐,还是更推荐用新版本的动态数组方案。

你之前想到的LOOKUP找单列最后非空、TEXTJOIN合并的思路完全正确,上面的公式就是把这些逻辑和列方向的遍历填充整合起来啦。

备注:内容来源于stack exchange,提问作者8平民

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:09:11