谷歌表格中如何将数组内逗号分隔值转置到单列?
问题描述
我的数据库中,ShotLISTbase表的V列存储参考值,部分单元格是单个值(如0001),部分是逗号分隔的多值(如0001, 0002, 0003)。我需要将符合条件的数据提取到单列,但现有公式只能把多值输出到不同列,无法转置成单列。
现有可运行但不转置的公式:
=ARRAYFORMULA(SPLIT(QUERY(ShotLISTbase!A:V, "SELECT V WHERE A = '"&ShotLIST_Print!J1&"' AND V is not null"), ", "))
尝试过带IF条件的公式但未成功:
=ARRAYFORMULA(IFERROR(IF(SEARCH(",", QUERY(ShotLISTbase!A:V, "SELECT V WHERE A = '"&ShotLIST_Print!J1&"' AND V is not null"))>1,TRANSPOSE(SPLIT(QUERY(ShotLISTbase!A:V, "SELECT V WHERE A = '"&ShotLIST_Print!J1&"' AND V is not null"), ", "))),SPLIT(QUERY(ShotLISTbase!A:V, "SELECT V WHERE A = '"&ShotLIST_Print!J1&"' AND V is not null"), ", ")))
解决方案
要把所有拆分后的结果转置到单列,直接用FLATTEN函数配合原有逻辑即可,公式如下:
=ARRAYFORMULA(FLATTEN(SPLIT(QUERY(ShotLISTbase!A:V, "SELECT V WHERE A = '"&ShotLIST_Print!J1&"' AND V is not null"), ", ")))
公式说明
QUERY:筛选ShotLISTbase表中A列匹配ShotLIST_Print!J1、且V列非空的V列数据SPLIT:将逗号分隔的多值拆分为横向单元格FLATTEN:将横向结果转置合并为单列,单个值和多值拆分后的内容都会自动排列到第一列的连续行中
如果你的表格版本不支持FLATTEN,可以用以下替代公式:
=ARRAYFORMULA(TRANSPOSE(SPLIT(TEXTJOIN(", ", TRUE, QUERY(ShotLISTbase!A:V, "SELECT V WHERE A = '"&ShotLIST_Print!J1&"' AND V is not null")), ", ")))
替代公式说明
TEXTJOIN:将所有筛选到的V列内容用逗号+空格拼接成一个完整字符串SPLIT:拆分该字符串为横向单元格TRANSPOSE:将横向结果转置为单列
内容的提问来源于stack exchange,提问作者Pavel_dp
相关产品推荐
相关产品推荐

