ARRAYFORMULA()不适用于SPLIT()

jak*_*kub 14 split google-sheets array-formulas

当我使用时,为什么拆分公式不会扩展到整个列=arrayformula(split(input!G2:G, ","))

我得到的结果只是输入!G2单元格,而不是G列中的其余单元格.其他公式=arrayformula(find(",", input!G2:G))似乎功能和扩展没有问题.

Ada*_*amL 18

现在,应用于垂直阵列的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)&",+([^,]+)")))


Mar*_*rio 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;
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它(出于性能原因):

=better_split(filter(A2:A, len(A2:A)>0), "/")
Run Code Online (Sandbox Code Playgroud)