ARRAYFORMULA()不适用于SPLIT()

时间:2014-10-01 08:24:28

标签: split google-sheets array-formulas

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

我只得到输入!G2单元格的结果,而不是G列中的其余单元格。像=arrayformula(find(",", input!G2:G))这样的其他公式似乎可以正常运行并且可以毫无问题地扩展。

5 个答案:

答案 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中的值。错,我认为这将避免它们被修剪和破坏阵列。可能没有必要,我没有测试。