如何简洁拼接多列中最后一个非空单元格的值
如何简洁拼接多列中最后一个非空单元格的值
嗨,我懂你想要的是更清爽的解决方案——不用先给每列单独写公式计算最后非空值,再去拼接,对吧?其实完全可以把这两步合并成一个公式,一步到位搞定!
针对单一行的简洁公式(适用于所有Excel版本)
如果你只是想处理某一行(比如第4行),直接用这个公式就能得到A到L列每列到当前行的最后非空值拼接结果:
=TEXTJOIN("",TRUE,LOOKUP(2,1/(INDIRECT(CHAR(64+COLUMN(A:L))&"1:"&CHAR(64+COLUMN(A:L))&ROW())<>""),INDIRECT(CHAR(64+COLUMN(A:L))&"1:"&CHAR(64+COLUMN(A:L))&ROW())))
简单拆解下逻辑:
CHAR(64+COLUMN(A:L))自动生成A到L的列标,不用手动挨个列出来INDIRECT(...)拼接成每一列从第1行到当前行的完整范围LOOKUP(2,1/(范围<>""),范围)精准定位每个列范围里的最后非空值TEXTJOIN("",TRUE,...)把所有列的结果拼接起来,自动忽略空值
一次性处理所有行(Excel 365/2021以上版本)
如果用的是支持动态数组和LAMBDA的新版本Excel,还能直接生成所有行的结果,不用逐行复制公式:
=LAMBDA(rng,BYROW(rng,LAMBDA(row,TEXTJOIN("",TRUE,BYCOL(row,LAMBDA(col,LOOKUP(2,1/(INDIRECT(LEFT(ADDRESS(1,COLUMN(col),4),1)&"1:"&LEFT(ADDRESS(1,COLUMN(col),4),1)&ROW(row))<>""),INDIRECT(LEFT(ADDRESS(1,COLUMN(col),4),1)&"1:"&LEFT(ADDRESS(1,COLUMN(col),4),1)&ROW(row)))))))(A:L)
这个公式会自动遍历每一行,对每行的所有列计算最后非空值并拼接,直接输出整列的结果,超级省心!
其实你之前想到的「按行循环」「数组操作」的思路完全正确,上面的公式就是把这些思路用Excel原生函数落地了,省去了中间列的繁琐步骤。
备注:内容来源于stack exchange,提问作者8平民
相关产品推荐
相关产品推荐

