Excel 2021:如何用单个公式向下填充数组中的空白元素
Excel 2021:如何用单个公式向下填充数组中的空白元素
嗨,我来帮你解决这个问题!你想要用单个公式把数组里的空值自动填充为上一个非空元素的需求,在Excel 2021里完全可以实现,下面给你两个实用的方案:
方案一:用SCAN函数(最简洁)
Excel 2021支持动态数组函数,SCAN就是专门用来逐元素遍历并保留状态的函数,非常适合这个场景。直接用下面的公式就能得到你想要的结果:
=TRANSPOSE(SCAN("", TRANSPOSE({"A","","","B","","","C","D"}), LAMBDA(a,b, IF(b<>"", b, a))))
公式解释:
SCAN("", ...):初始值设为空字符串,用来记录上一个非空的元素值TRANSPOSE({"A","","","B","","","C","D"}):先把你的横向数组转成纵向,方便SCAN逐行处理LAMBDA(a,b, IF(b<>"", b, a)):这是SCAN的核心逻辑,a是上一次的结果(也就是最近的非空值),b是当前元素:如果b非空就保留b,否则沿用a的值- 最后再用
TRANSPOSE转回来,就得到了填充后的横向数组
方案二:构建索引数组(对应你之前的思路)
如果你想实现你提到的「生成{1,1,1,4,4,4,7,8}这类索引数组」的思路,可以用FILTER+MATCH组合来实现:
=TRANSPOSE(INDEX(TRANSPOSE({"A","","","B","","","C","D"}), MATCH(ROW(1:8), FILTER(ROW(1:8), TRANSPOSE({"A","","","B","","","C","D"})<>""), 1)))
公式解释:
FILTER(ROW(1:8), TRANSPOSE({"A","","","B","","","C","D"})<>""):先筛选出数组中非空元素的行号,得到{1,4,7,8}MATCH(ROW(1:8), ..., 1):对每个元素的行号(1到8),用近似匹配(第三个参数设为1)找到小于等于当前行号的最大非空行号,这样就自动生成了{1,1,1,4,4,4,7,8}这个索引数组- 最后用
INDEX提取对应位置的元素,再转置回来就完成了填充
这两个方法都能完美得到你想要的TRANSPOSE({"A","A","A","B","B","B","C","D"})结果,你可以根据自己的习惯选择使用~
备注:内容来源于stack exchange,提问作者8平民
相关产品推荐
相关产品推荐

