2014-10-01 12 views
12

Perché la formula di divisione non viene espansa sull'intera colonna quando utilizzo =arrayformula(split(input!G2:G, ","))?ARRAYFORMULA() non funziona con SPLIT()

Ottengo risultato solo per l'input! G2 cella, ma non il resto nella colonna G. Altre formule come =arrayformula(find(",", input!G2:G)) sembrano funzionare e si espandono senza problemi.

risposta

15

SPLIT applicato a un array verticale ora funziona. (Jan 4 2017)

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

o per mascherare errore

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

Nota: la matrice risultante è largo quanto il numero massimo di elementi di spacco.


(Il resto della risposta non si applica più, ma conservati per scopi storici ...?)

Questo sarà considerato come una risposta davvero male, ma: semplicemente non lo fa .

Ho il sospetto che potrebbe essere perché potenzialmente produrrà una matrice seghettata (numero diverso di elementi in ogni riga), che può essere considerato problematico. Tuttavia, un "array SPLIT" usato per "funzionare" nella versione precedente di Sheets (anche se con un bug in cui non funzionava correttamente sul primo elemento dell'array).

SPLIT non è solo una funzione che non può essere iterata su un array (ad esempio INDIRETTO, INDICE, SOMMA).


Una soluzione (modificato 4 gen 2017):

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

Il 6 nel OFFSET (A1 ,,, 1,6) e le funzioni rept determina il numero massimo di elementi in lo SPLIT. È possibile iniettare un'espressione che calcoli il numero massimo di elementi dalla colonna di dati, ma le prestazioni ne risentirebbero ancora di più.

Inoltre, un avvertimento qui è che supporta solo la divisione di un singolo carattere (in questo caso una virgola).

In alternativa, è possibile visualizzare una funzione personalizzata di Google Apps Script.


Questa soluzione precedente non funziona più, come REGEXEXTRACT non sembra sostenere una matrice per il secondo argomento - così com'è, nel gennaio 2017, in ogni caso.

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

+0

Grazie per la risposta. C'è una soluzione? Se c'è e lo metti qui, lo considererò una risposta eccezionalmente grande! :) – jakub

+2

Penso che il "non funziona" (da una fonte affidabile!) Sia in realtà una ** risposta veramente buona **. Risparmia un sacco di tempo a cercare/tentare ciò che non esiste/non è possibile - ma le persone sono troppo timide per parlare. – pnuts

+1

Sono d'accordo con @pnuts - e quindi accetto la risposta. – jakub

6

È possibile utilizzare questo 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; 
} 

lo usano in questo modo (per motivi di prestazioni):

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

Data la formulazione originale della domanda, ho ancora risposta @AdamL. Ma questa è un'alternativa eccellente! Non considereresti la creazione di una domanda e poi la risposta a se stessa? Sono sicuro che molte persone lo troverebbero utile. Mi alzo almeno. – jakub

+0

@jakub è consentito alle domande di auto-risposta? In ogni caso cercherò questa domanda e quindi mi riferirò a questo thread se trovo uno. Grazie per il voto, a proposito. – Mario

0

Un'altra soluzione potrebbe essere quella di JOIN prima il vostro G2: G colonna con virgole usando ARRAYFORMULA. Quindi puoi SPLITarlo. Infine puoi facoltativamente TRASPORTARLO in una colonna (altrimenti verrà visualizzato come una riga).

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