Google Sheets 如何让ARRAYFORMULA返回地址对应单元格值填充整列
解答
你原公式里ADDRESS()返回的是文本类型的单元格地址,要读取该地址对应的实际值,只需把ADDRESS()的计算结果套入INDIRECT()函数即可。
但直接套入后无法得到你示例中的正确结果,因为原公式有两处逻辑问题:
FIND("",A2:O99999)用空文本作为查找值,会把所有单元格(包括空单元格)判定为匹配,根本无法识别非空单元格,正确的非空判断写法为范围<>""- 统计范围从A列(id列)开始,id列始终有值会干扰列号计算,统计范围应该从第一个status列(statusA)开始
可直接使用的最终公式
按照你给出的表格结构(A列id、B列laststatus、C列是省略列、D列起依次为statusA/statusB/statusC),把公式粘贴到B2单元格即可自动适配整列,无需下拉:
适配你原有MMULT逻辑的版本(适合status从左到右连续填写、中间无空值的场景,和你给出的示例规则完全匹配)
=ARRAYFORMULA(IF(A2:A="","",IFERROR(INDEX(D1:1,,MMULT(--(D2:O<>""),SIGN(ROW(1:12)))))))
逻辑说明:
--(D2:O<>"")把status区域的非空单元格转为1、空单元格转为0MMULT逐行统计非空单元格数量,得到最后一个非空列相对于D列的偏移量INDEX直接读取第1行(表头行)对应偏移位置的列名,比ADDRESS()+INDIRECT()的组合运算效率更高
通用版本(不管status列是否连续填写,都能精准定位每行最右侧非空单元格对应的表头)
=BYROW(D2:O,LAMBDA(x,IF(COUNTA(x)=0,"",TAKE(TOCOL(IF(x<>"",D$1:O$1,""),1),-1))))
内容的提问来源于stack exchange,提问作者Aoki SJ Seonok Yang
相关产品推荐
相关产品推荐

