Excel公式求助:如何将子项编号与对应父类编号匹配?
问题:将子项与最近的父类编号配对
需求:当Parent列存在非空父类编号时,对应行输出该编号;Parent列为空白时,输出最近的上方非空父类编号。
尝试过以下公式但无法正确处理子项数量不一致的情况,会出现空白忽略错位的问题:
=IF(D14="",XLOOKUP(TRUE,D13:D75544>0,D13:D75544,,-1,1),"WRONG")=INDEX(A2:A7,MATCH(TRUE,A2:A7<>"",0))
解决方案1:Excel 365/2021 版本(动态数组)
使用SCAN函数可以一次性生成所有结果,无需手动下拉填充。假设Parent列数据范围是D2:D75544,在目标列(比如E2)输入公式:
=SCAN("", D2:D75544, LAMBDA(acc, curr, IF(curr<>"", curr, acc)))
- 原理:
SCAN逐行遍历Parent列,用acc变量记录最近一次的非空父类编号。当前行Parent值非空时,更新acc为当前值;为空时则沿用acc的上一次值,完美匹配需求。
解决方案2:旧版Excel(无动态数组支持)
使用LOOKUP函数实现,在目标列第一行(比如E2)输入公式后下拉填充:
=LOOKUP(2,1/(D$2:D2<>""),D$2:D2)
- 原理:
1/(D$2:D2<>"")会生成一个由1和错误值组成的数组,非空行对应1,空行对应#DIV/0!。LOOKUP(2,1/...)会自动忽略错误值,找到最后一个等于1的位置,返回对应的Parent值——也就是最近的上方非空父类编号。如果当前行Parent非空,自然返回自身值。
内容的提问来源于stack exchange,提问作者Mars
相关产品推荐
相关产品推荐

