2014-10-01 12 views
12

Dlaczego formuła podziału nie jest rozszerzana na całą kolumnę, gdy używam =arrayformula(split(input!G2:G, ","))?Funkcja ARRAYFORMULA() nie działa z funkcją SPLIT()

Otrzymuję wynik tylko dla komórki wejściowej! G2, ale nie resztę w kolumnie G. Inne formuły, takie jak =arrayformula(find(",", input!G2:G)) wydają się funkcjonować i rozszerzać bez problemów.

Odpowiedz

15

SPLIT zastosowany do tablicy pionowej działa teraz. (Sty 4 2017)

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

lub do maskowania błędu

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

Uwaga: Otrzymany macierzy jest tak szeroka jak największej liczby podzielony elementów.


(Pozostała część odpowiedzi już nie obowiązuje, ale zachowane dla celów historycznych ...?)

ten będzie traktowany jako bardzo złą odpowiedź, ale: po prostu nie .

Podejrzewam, że może to być spowodowane tym, że potencjalnie wygeneruje poszarpaną tablicę (różną liczbę elementów w każdym rzędzie), co może być uznane za problematyczne. Jednak "tablica SPLIT" używana do "pracy" w poprzedniej wersji Arkuszy (aczkolwiek z błędem, który nie działał poprawnie na pierwszym elemencie tablicy).

SPLIT nie jest sam jako funkcja, która nie może być iterowana przez macierz (np. INDIRECT, INDEX, SUMIFS).


Rozwiązaniem (red 04 styczeń 2017):

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

W 6 w przesunięcie (A1 ,,, 1,6) i funkcje REPT określa maksymalną liczbę elementów SPLIT. Można wstawić wyrażenie, które obliczy maksymalną liczbę elementów z kolumny danych, ale wydajność będzie jeszcze większa.

Należy również zauważyć, że obsługuje on dzielenie tylko przez pojedynczy znak (w tym przypadku przecinek).

Możesz również spojrzeć na niestandardową funkcję Google Apps Script.


Ten poprzedni obejście już nie działa, jak REGEXEXTRACT nie pojawia się już do wsparcia tablicę dla drugiego argumentu - jak to stoi w styczniu 2017 roku, w każdym razie.

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

+0

Dzięki za odpowiedź. Czy jest w pobliżu praca? Jeśli istnieje i umieścisz to tutaj, uznaję to za wyjątkowo wspaniałą odpowiedź! :) – jakub

+2

Myślę, że "po prostu nie" (z wiarygodnego źródła!) Jest tak naprawdę ** naprawdę dobrą ** odpowiedzią. Oszczędza mnóstwo czasu na wyszukiwanie/próbowanie tego, co nie istnieje/nie jest możliwe - ale ludzie są zbyt nieśmiali, by o tym wspomnieć. – pnuts

+1

Zgadzam się z @pnuts - i dlatego akceptuję odpowiedź. – jakub

6

Można użyć tego skryptu:

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; 
} 

używać go jak tak (ze względu na wydajność):

=better_split(filter(A2:A, len(A2:A)>0), "/") 
+0

Biorąc pod uwagę oryginalne sformułowanie pytania, nadal idę z odpowiedzią @AdamL. Ale to doskonała alternatywa! Czy nie zastanawiałbyś się nad tworzeniem pytania, a następnie samodzielnym odpowiadaniem? Jestem pewien, że wielu ludzi uznałoby to za użyteczne. Przegrałem przynajmniej. – jakub

+0

@jakub Czy wolno ci samodzielnie odpowiedzieć na pytania? W każdym razie będę uważać na to pytanie, a następnie odnieś się do tego wątku, jeśli go znajdę. Dzięki za głosowanie, nawiasem mówiąc. – Mario

0

Innym Rozwiązaniem byłoby najpierw dołączyć do G2: G kolumna z przecinkami za pomocą ARRAYFORMULA. Następnie można SPLIT go. Na koniec możesz opcjonalnie PRZEPEŁNĄĆ go z powrotem do kolumny (w przeciwnym razie będzie on wyprowadzany jako wiersz).

=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),",")) 
Powiązane problemy