Подтвердить что ты не робот

ARRAYFORMULA() не работает с SPLIT()

Почему формула split не распространяется на весь столбец, когда я использую =arrayformula(split(input!G2:G, ","))?

Я получаю результат только для ввода! G2-ячейки, но не для остальных в столбце G. Другие формулы, такие как =arrayformula(find(",", input!G2:G)), как представляется, функционируют и расширяются без проблем.

4b9b3361

Ответ 1

SPLIT применяется к вертикальному массиву, теперь работает. (4 января 2017 года)

=ArrayFormula(SPLIT(input!G2:G,","))

или для маскировки ошибок

=ArrayFormula(IFERROR(SPLIT(input!G2:G,",")))

Примечание: результирующий массив будет таким же широким, как максимальное количество SPLITted элементов.


(Остальная часть ответа больше не применяется, но сохраняется для... исторических целей?)

Это будет считаться действительно плохим ответом, но: это просто не так.

Я подозреваю, что это может быть связано с тем, что он потенциально может создать зубчатый массив (разное количество элементов в каждой строке), что может считаться проблематичным. Тем не менее, "массив SPLIT" используется для "работы" в предыдущей версии таблиц (хотя и с ошибкой, где он не работал должным образом в первом элементе массива).

SPLIT не является единственным как функция, которая не может быть повторена по массиву (например, INDIRECT, INDEX, SUMIFS).


Обходной путь (отредактированный 4 января 2017 года):

=ArrayFormula(REGEXREPLACE(input!G2:G&REPT(",",6),REPT("([^,]*),",6)&",*","$"&COLUMN(OFFSET(A1,,,1,6))))

6 в функциях OFFSET (A1,, 1,6) и REPT определяет максимальное количество элементов в SPLIT. Вы могли бы добавить выражение, которое вычисляло бы максимальное количество элементов из столбца данных, но тогда производительность пострадает еще больше.

Кроме того, здесь предостережение состоит в том, что он будет поддерживать только разделение на один символ (в данном случае запятую).

Кроме того, вы можете посмотреть пользовательскую функцию Google Apps Script.


Этот предыдущий обход больше не работает, так как REGEXEXTRACT больше не поддерживает массив для второго аргумента - как и в январе 2017 года. В любом случае.

=ArrayFormula(IFERROR(REGEXEXTRACT(","&input!G2:G,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,6))-1)&",+([^,]+)")))

Ответ 2

Вы можете использовать этот script:

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), "/")

Ответ 3

Другим обходным решением было бы сначала подключиться к столбцу G2: G запятыми, используя ARRAYFORMULA. Тогда вы можете РАЗБЕЛИТЬ его. Наконец, вы можете по желанию ТРАНСПОРТИРОВАТЬ его обратно в столбец (иначе он будет выводиться как строка).

=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),","))