求替代BYROW公式的脚本,支持提取单元格批注及多重复值处理
Google Sheets 公式优化方案
需求回顾
原公式=BYROW (A1:A100, LAMBDA(each,IFNA( FILTER (INDEX(H2:AQ270, MATCH(each,H2:H270,0)), REGEXMATCH(INDEX(H2:AQ270, MATCH(each,H2:H270,0)),SUBSTITUTE(B1,".","\."))))))可通过A1:A100的名称提取含B1内容的数据,需优化以下几点:
- 新增提取对应单元格批注的功能
- 提取所有重复名称的对应数据(原公式仅返回首条匹配)
- 将重复值改为同行排列(避免按列排列打乱顺序)
- 适配目标数据分布在多列的场景
优化后公式
=BYROW(A1:A100, LAMBDA(each, IFNA( LET( match_rows, FILTER(H2:AQ270, H2:H270=each), filtered_vals, FILTER(match_rows, REGEXMATCH(match_rows, SUBSTITUTE(B1,".","\."))), filtered_notes, BYCOL(filtered_vals, LAMBDA(col, CELL("note", INDEX(match_rows, ROW(col)-ROW(filtered_vals)+1, COLUMN(col)-COLUMN(filtered_vals)+1)))), paired, BYROW(HSTACK(filtered_vals, filtered_notes), LAMBDA(row, TEXTJOIN("(批注:", TRUE, row) & ")")), TEXTJOIN(" | ", TRUE, paired) ), "" )))
公式说明
- 提取所有重复名称:用
FILTER(H2:AQ270, H2:H270=each)替代原公式的MATCH,获取H列等于当前名称的所有行,解决仅取首条的问题 - 提取单元格批注:通过
CELL("note", 单元格)提取对应位置的批注,利用INDEX定位到原匹配行的对应单元格 - 同行排列结果:用
TEXTJOIN将所有匹配结果(含批注)以指定分隔符拼接在同一行,避免按列排列打乱顺序 - 多列适配:公式基于整个H2:AQ270区域筛选,无论目标数据在J、K或其他列,只要在该区域内都会被匹配,无需额外调整(若需扩大范围,修改
H2:AQ270为对应区域即可)
自定义调整建议
- 若需修改结果分隔符,将
TEXTJOIN(" | ", TRUE, paired)中的" | "替换为所需符号(如", ") - 若不需要内容与批注绑定,可将
paired部分改为TOROW(filtered_vals)单独提取数据,或TOROW(filtered_notes)单独提取批注
内容的提问来源于stack exchange,提问作者Danel Lau
相关产品推荐
相关产品推荐

