当我使用=arrayformula(split(input!G2:G, ","))
时,为什么拆分公式不会在整个列上展开?
我只得到输入!G2单元格的结果,而不是G列中的其余单元格。像=arrayformula(find(",", input!G2:G))
这样的其他公式似乎可以正常运行并且可以毫无问题地扩展。
答案 0 :(得分:17)
应用于垂直阵列的SPLIT现在可以正常工作。 (2017年1月4日)
=ArrayFormula(SPLIT(input!G2:G,","))
或用于错误屏蔽
=ArrayFormula(IFERROR(SPLIT(input!G2:G,",")))
注意:结果数组与SPLITted元素的最大数量一样宽。
(答案的其余部分不再适用,但保留用于...历史目的?)
这将被视为一个非常糟糕的答案,但是:它只是没有。
我怀疑这可能是因为它可能会产生锯齿状阵列(每行中不同数量的元素),这可能会被认为是有问题的。但是,“阵列SPLIT”曾用于在Sheets的早期版本中“工作”(尽管有一个错误,它在数组的第一个元素上无法正常工作)。
SPLIT并不是唯一一个不能在数组上迭代的函数(例如INDIRECT,INDEX,SUMIFS)。
解决方法(2017年1月4日编辑):
=ArrayFormula(REGEXREPLACE(input!G2:G&REPT(",",6),REPT("([^,]*),",6)&",*","$"&COLUMN(OFFSET(A1,,,1,6))))
OFFSET中的6(A1 ,,, 1,6)和REPT函数确定SPLIT中的最大元素数。您可以注入一个表达式来计算数据列中的最大元素数,但是性能会受到更大的影响。
此外,这里需要注意的是它只支持单个字符(在本例中为逗号)分割。
或者,您可以查看Google Apps脚本自定义功能。
此前的解决方法不再有效,因为REGEXEXTRACT似乎不再支持第二个参数的数组 - 无论如何它仍然是2017年1月。
=ArrayFormula(IFERROR(REGEXEXTRACT(","&input!G2:G,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,6))-1)&",+([^,]+)")))
答案 1 :(得分:6)
您可以使用此脚本:
function better_split(col, separator) {
var new_col = [];
for (var r = 0; r < col.length; r++) {
if (col[r]) {
new_col.push(col[r][0].split(separator));
}
}
return new_col;
}
像这样使用它(出于性能原因):
=better_split(filter(A2:A, len(A2:A)>0), "/")
答案 2 :(得分:0)
另一种解决方法是首先用逗号使用ARRAYFORMULA加入你的G2:G列。 然后你可以拆分它。 最后,你可以选择将它移回一列(否则它将作为一行输出)。
=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),","))
答案 3 :(得分:0)
由于数据&gt;不需要数组公式。将文本拆分为列...无需任何功能或公式即可运行。
答案 4 :(得分:0)
它可以工作,但是您必须填充并约束以使其成为正方形结果。
获取此数据:
ColA COLB
Row1 Data ={"Head1","Head2","Head3","Head4","Head5","Head6","Head7";ARRAY_CONSTRAIN(ARRAYFORMULA(SPLIT(A$2:A&" , , , , , , ",",",FALSE,FALSE)),COUNTA(A2:A),7)}
Row2 1,2,3,4,5,6,7,a
Row3 1,2,3,5
给你这个:
ColA COLB
Row1 Data Head1 Head2 Head3 Head4 Head5 Head6 Head7
Row2 1,2,3,4,5,6,7,a 1 2 3 4 5 6 7
Row3 1,2,3,5 1 2 3 4 5
这是公式:
={"Head1","Head2","Head3","Head4","Head5","Head6","Head7";ARRAY_CONSTRAIN(ARRAYFORMULA(SPLIT(A$2:A&" , , , , , , ",",",FALSE,FALSE)),COUNTA(A2:A),10)}
首先,我们使用ARRAY_CONSTRAIN将结果限制为可接受的最大结果。您可以计算最大值或对其进行硬编码。我使用了7个列和行数。 ARRAYFORMULA过去经常用它。 用空值填充SPLIT文本值,以确保其超过约束值。这样可以容纳不同长度的ColA中的值。错,我认为这将避免它们被修剪和破坏阵列。可能没有必要,我没有测试。