2014-10-01 6 views
12

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

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

ответ

15

SPLIT применяется к вертикальной решетке, теперь, работает. (Jan 4 2017)

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

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

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

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


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

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

Я подозреваю, что это может быть связано с тем, что он потенциально может создать зубчатый массив (различное количество элементов в каждой строке), что может считаться проблематичным. Тем не менее, «массив 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)&",+([^,]+)")))

+0

Спасибо за ответ. Есть ли обходной путь? Если есть, и вы выразились здесь, я буду считать это исключительно замечательным ответом! :) – jakub

+2

Я думаю, что подобные «это просто не» (из надежного источника!) На самом деле является ** действительно хорошим ** ответом. Экономит много времени на поиск/попытку того, чего не существует/невозможно, - но люди слишком склонны упоминать. – pnuts

+1

Я согласен с @pnuts - и поэтому принимаю ответ. – jakub

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

Учитывая исходную формулировку вопроса, я все еще собираюсь ответить на @AdamL. Но это отличная альтернатива! Разве вы не подумали бы о создании вопроса, а затем само-отвечать на него? Я уверен, что многие люди посчитают это полезным. По крайней мере, я продвигаюсь. – jakub

+0

@jakub разрешено ли отвечать на вопросы? В любом случае я буду искать этот вопрос, а затем обратиться к этой теме, если найду ее. Спасибо за голосование, кстати. – Mario

0

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

=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),",")) 
Смежные вопросы