Excel从下往上查找空单元格并填充上方首个非空值求助
解决方案
1. 填充A列空值(从下往上匹配上方首个非空值)
要实现A1:A6区域中空单元格从下往上匹配上方最近的非空值,可使用BYROW+XLOOKUP组合公式,遍历每个单元格,为空时反向查找上方非空值:
=BYROW(A1:A6, LAMBDA(cell, IF(cell<>"", cell, XLOOKUP(TRUE, A1:INDEX(A:A, ROW()-1)<>"", A1:INDEX(A:A, ROW()-1),, 0, -1) ) ))
- 参数说明:
XLOOKUP的最后一个参数-1指定反向查找,确保从当前单元格的上一行开始,从下往上找到第一个非空值。
2. 结合FILTER输出到D1:E6
假设你需要将填充后的A列数据与对应B列数据(可替换为你的目标列)通过FILTER处理后输出到D:E区域,分两种情况:
情况1:无额外筛选条件,仅展示填充后的数据
直接用HSTACK将填充后的A列与目标列合并,输入到D1单元格:
=HSTACK( BYROW(A1:A6, LAMBDA(cell, IF(cell<>"", cell, XLOOKUP(TRUE, A1:INDEX(A:A, ROW()-1)<>"", A1:INDEX(A:A, ROW()-1),, 0, -1) ) )), B1:B6 )
该公式会自动将填充后的A列放入D列,B列数据放入E列,刚好覆盖D1:E6区域。
情况2:需要筛选特定行
比如只保留填充后A列包含某关键词的行,在FILTER中添加筛选条件即可:
=FILTER( HSTACK( BYROW(A1:A6, LAMBDA(cell, IF(cell<>"", cell, XLOOKUP(TRUE, A1:INDEX(A:A, ROW()-1)<>"", A1:INDEX(A:A, ROW()-1),, 0, -1) ) )), B1:B6 ), BYROW(A1:A6, LAMBDA(cell, IF(cell<>"", cell, XLOOKUP(TRUE, A1:INDEX(A:A, ROW()-1)<>"", A1:INDEX(A:A, ROW()-1),, 0, -1) ) ))="目标关键词" )
兼容性说明
上述公式仅支持Office 365/Excel 2021及以上版本,若使用旧版Excel,可改用数组公式实现反向填充,但效率会稍低。
内容的提问来源于stack exchange,提问作者M3gan3_sama
相关产品推荐
相关产品推荐

