2014-10-01 25 views
12

Warum wird die Split-Formel nicht über die gesamte Spalte erweitert, wenn ich =arrayformula(split(input!G2:G, ",")) verwende?ARRAYFORMULA() funktioniert nicht mit SPLIT()

Ich bekomme nur Ergebnis für die Eingabe! G2-Zelle, aber nicht den Rest in der G-Spalte. Andere Formeln wie =arrayformula(find(",", input!G2:G)) scheinen zu funktionieren und werden ohne Probleme erweitert.

Antwort

15

SPLIT angewendet auf ein vertikales Array funktioniert jetzt. (Jan 4 2017)

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

oder Fehlerverschleierungs

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

Anmerkung: Die sich ergebende Anordnung ist so breit wie die maximale Anzahl von Elementen, gespaltet.


(Der Rest der Antwort nicht mehr gilt, behielt aber für ... historische Zwecke?)

Dies wird als eine wirklich schlechte Antwort angesehen werden, aber: es funktioniert einfach nicht .

Ich vermute, es könnte sein, weil es möglicherweise ein gezacktes Array (unterschiedliche Anzahl von Elementen in jeder Zeile), die als problematisch angesehen werden kann. Ein "array SPLIT" funktionierte jedoch in der vorherigen Version von Sheets (wenn auch mit einem Fehler, bei dem es auf dem ersten Element des Arrays nicht ordnungsgemäß funktionierte).

SPLIT ist nicht allein eine Funktion, die nicht über ein Array iteriert werden kann (z. B. INDIREKT, INDEX, SUMME).


Eine Abhilfe (herausgegeben 4. Januar 2017):

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

Die 6 in der OFFSET (A1 ,,, 1,6) und die REPT Funktionen bestimmt die maximale Anzahl von Elementen in der SPLIT. Sie könnten einen Ausdruck injizieren, der die maximale Anzahl von Elementen aus der Datenspalte berechnet, aber dann würde die Leistung noch mehr leiden.

Auch hier ist eine Einschränkung, dass es nur die Aufspaltung durch ein einzelnes Zeichen (in diesem Fall ein Komma) unterstützt.

Alternativ können Sie sich auch eine benutzerdefinierte Google Apps Script-Funktion ansehen.


Diese vorherige Problemumgehung funktioniert nicht mehr, wie REGEXEXTRACT erscheint nun nicht mehr ein Array für das zweite Argument zu unterstützen - wie im Januar 2017 steht jedenfalls.

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

+0

Danke für die Antwort. Gibt es eine Problemumgehung? Wenn es da ist und du es hier schreibst, werde ich es als eine außergewöhnlich gute Antwort betrachten! :) – jakub

+2

Ich denke, dass die Art von "es tut einfach nicht" (aus einer zuverlässigen Quelle!) Ist eigentlich eine ** wirklich gute ** Antwort. Spart viel Zeit beim Suchen/Versuchen, was nicht existiert/nicht möglich ist - aber die Leute sind zu verschwiegen. – pnuts

+1

Ich stimme @pnuts zu - und akzeptiere daher die Antwort. – jakub

6

Sie dieses Skript verwenden:

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

es so (aus Leistungsgründen) verwenden wie:

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

Angesichts der ursprünglichen Formulierung der Frage, gehe ich immer noch mit @AdamL Antwort. Aber das ist eine ausgezeichnete Alternative! Würden Sie nicht in Erwägung ziehen, eine Frage zu stellen und sie dann selbst zu beantworten? Ich bin sicher, dass viele Leute es nützlich finden würden. Ich habe mindestens upvote. – jakub

+0

@jakub ist es erlaubt Fragen selbst zu beantworten? In jedem Fall werde ich auf diese Frage achten und dann auf diesen Thread verweisen, wenn ich einen finde. Danke übrigens für die Abstimmung. – Mario

0

Eine andere Lösung wäre, zuerst Ihre G2 JOIN: G Spalte mit Kommata mit ARRAYFORMULA. Dann können Sie es split. Schließlich können Sie optional es zurück in eine Spalte TRANSPOSE (sonst wird es als Zeile ausgeben).

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