如何仅对可见单元格应用指定的多列合并公式?
问题描述
原使用公式将多列内容合并为单列:
=SORT(UNIQUE(FILTERXML("<t><s>"&TEXTJOIN("</s><s>",TRUE,A2:J6)&"</s></t>","//s")))
但在A列筛选掉“d”后,结果中仍出现“d”,需要让公式仅作用于可见单元格。
解决方案
原公式的TEXTJOIN会包含筛选隐藏的单元格内容,因此需要先筛选出可见行,再进行合并处理。以下提供两种适用于Google Sheets的方案:
方案1:结合BYROW、SUBTOTAL与FILTERXML
=SORT(UNIQUE(FILTERXML("<t><s>"&TEXTJOIN("</s><s>", TRUE, BYROW(A2:J6, LAMBDA(row, IF(SUBTOTAL(103, OFFSET(INDEX(row,1),0,0,1,1))=1, TEXTJOIN("</s><s>", TRUE, row), "")))&"</s></t>", "//s")))
- 原理:用
BYROW遍历每一行,通过SUBTOTAL(103,...)判断当前行是否可见(103为忽略隐藏单元格的非空计数,返回1则表示行可见),仅将可见行的内容加入合并字符串,再通过FILTERXML拆分、去重排序。
方案2:用TOCOL简化操作(更简洁)
=SORT(UNIQUE(TOCOL(FILTER(A2:J6, BYROW(A2:J6, LAMBDA(r, SUBTOTAL(103, INDEX(r,1))=1)), 1))))
- 原理:
BYROW+SUBTOTAL筛选出所有可见行,FILTER保留这些行的内容,TOCOL将多列数据转换为单列,最后完成去重与排序。
内容的提问来源于stack exchange,提问作者Abdolrasoul shafiey
相关产品推荐
相关产品推荐

