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

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

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

4 ответов


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

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

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

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

Примечание: результирующий массив имеет ширину максимального числа расщепленных элементов.


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

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

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

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


временное решение (отредактировано 4 января 2017):

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

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

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

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


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

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


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

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

другим обходным путем было бы сначала присоединиться к столбцу G2:G с запятыми, используя ARRAYFORMULA. Тогда вы можете разделить его. Наконец, вы можете при необходимости транспонировать его обратно в столбец (в противном случае он будет выводиться как строка).

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

формула массива не требуется, так как данные > разделить текст на столбцы... работает без какой-либо функции или формулы.