Sommario
Un modo semplice per trasformare una matrice o un intervallo in una colonna con la funzione TOCOL.
La possibilità di trasporre i dati da colonne a righe e viceversa è presente in Excel da molto tempo, ma la conversione di un intervallo di celle in una singola colonna era un compito difficile da risolvere. Ora le cose stanno finalmente cambiando: Microsoft ha introdotto una nuova funzione, chiamata TOCOL, in grado di eseguire una trasformazione da matrice a colonna in un batter d'occhio. Di seguito è riportato un elenco di compiti che questa nuova funzione può facilmente risolvere.
Funzione TOCOL di Excel
La funzione TOCOL di Excel converte una matrice o un intervallo di celle in una singola colonna.
La funzione richiede tre argomenti, ma solo il primo è necessario.
TOCOL(array, [ignore], [scan_by_column])Dove:
Array (obbligatorio) - una matrice o un intervallo da trasformare in una colonna.
Ignorare (opzionale) - definisce se ignorare gli spazi vuoti e/o gli errori. Può essere uno di questi valori:
- 0 o omesso (impostazione predefinita) - mantiene tutti i valori
- 1 - ignora gli spazi vuoti
- 2 - ignorare gli errori
- 3 - ignorare gli spazi vuoti e gli errori
Scan_per_colonna (opzionale) - determina se eseguire la scansione della matrice in orizzontale o in verticale:
- FALSO o omesso (valore predefinito) - esegue la scansione della matrice per riga, da sinistra a destra.
- VERO - esegue la scansione dell'array per colonna, dall'alto verso il basso.
Suggerimenti:
- Per convertire una matrice in una singola riga, utilizzare la funzione TOROW.
- Per eseguire la trasformazione opposta da colonna ad array, utilizzare la funzione WRAPCOLS per avvolgere per colonna o la funzione WRAPROWS per avvolgere per riga.
- Per trasporre una matrice da orizzontale a verticale o viceversa, cioè per cambiare le righe in colonne, utilizzare la funzione TRANSPOSE.
Disponibilità TOCOL
TOCOL è una nuova funzione, supportata da Excel per Microsoft 365 (per Windows e Mac) e da Excel per il Web.
Formula TOCOL di base per trasformare l'intervallo in colonna
La formula TOCOL, nella sua forma più semplice, richiede solo un argomento - array Ad esempio, per collocare una matrice bidimensionale composta da 3 colonne e 4 righe in una singola colonna, la formula è:
=TOCOLLO(A2:C5)
La formula viene inserita solo in una cella (E2 in questo esempio) e si riversa automaticamente nelle celle sottostanti. In termini di Excel, il risultato si chiama intervallo di riversa.
Come funziona questa formula:
Tecnicamente, l'intervallo A2:C5 viene prima convertito in un array bidimensionale. Si noti che le righe sono separate da punto e virgola e le colonne da virgola:
{"Apple","Banana","Cherry";1,0,3;4,#N/A,6;7,8,9}
La funzione TOCOL analizza la matrice da sinistra a destra e la trasforma in una matrice verticale unidimensionale:
{"Apple";"Banana";"Cherry";1;0;3;4;#N/A;6;7;8;9}
Il risultato viene inserito nella cella E2, da cui si riversa nelle celle sottostanti.
Come utilizzare la funzione TOCOL in Excel - esempi di formule
Per comprendere meglio le possibilità della funzione TOCOL e i compiti che può svolgere, diamo un'occhiata ad alcuni esempi di formule.
Trasforma la matrice in colonna ignorando spazi vuoti ed errori
Come si può notare nell'esempio precedente, la formula TOCOL predefinita conserva tutti i valori della matrice di origine, comprese le celle vuote e gli errori.
Nell'array risultante, le celle vuote sono rappresentate da zeri, il che può creare confusione, soprattutto se l'array originale ha valori pari a 0. La soluzione consiste nel saltare gli spazi vuoti Per questo, si imposta il secondo argomento a 1:
= PROTOCOLLO(A2:C5, 1)
A ignorare gli errori , impostare il secondo argomento su 2:
=PROTOCOLLO(A2:C5, 2)
Per escludere entrambi, spazi vuoti ed errori , utilizzare 3 per il ignorare argomento:
=PROTOCOLLO(A2:C5, 3)
Scansione della matrice in orizzontale o in verticale
Con l'impostazione predefinita scan_by_colonna (FALSE o omesso), la funzione TOCOL esegue la scansione orizzontale della matrice per riga. Per elaborare i valori per colonna, impostare questo argomento su TRUE o 1. Ad esempio:
=PROTOCOLLO(A2:C5, ,TRUE)
Si noti che, in entrambi i casi, gli array restituiti hanno la stessa dimensione, ma i valori sono disposti in un ordine diverso.
Combinare più intervalli in una colonna
Se si ha a che fare con diversi intervalli non contigui, si possono prima combinare gli intervalli verticalmente in un'unica matrice con l'aiuto della funzione VSTACK e poi usare TOCOL per trasformare la matrice combinata in una colonna.
Supponendo che il primo intervallo sia A2:C4 e il secondo A8:C9, la formula assume questa forma:
=PROTOCOLLO(VSTACK(A2:C4, A8:C9))
Questa formula mostra il comportamento predefinito: legge gli array combinati orizzontalmente da sinistra a destra, come mostrato nella colonna E dell'immagine sottostante.
Per leggere i valori verticalmente dall'alto verso il basso, si imposta il terzo argomento di TOCOL su TRUE:
=PROTOCOLLO(VSTACK(A2:C4, A8:C9), ,TRUE)
Fate attenzione al fatto che, in questo caso, la formula restituisce prima i valori della colonna A di entrambi gli array, poi quelli della colonna B e così via. Il motivo è che TOCOL esegue la scansione di un singolo array impilato, non dei singoli intervalli originali.
Se la logica aziendale richiede di impilare gli intervalli originali in orizzontale anziché in verticale, utilizzare la funzione HSTACK anziché VSTACK.
Per aggiungere ogni matrice successiva alla destra della matrice precedente e leggere le matrici combinate in orizzontale, la formula è:
=PROTOCOLLO(HSTACK(A2:C4, A8:C10))
Per aggiungere ogni matrice successiva alla destra della matrice precedente e scansionare le matrici combinate verticalmente, la formula è:
=PROTOCOLLO(HSTACK(A2:C4, A8:C10), ,TRUE)
Estrazione di valori univoci da un intervallo di più colonne
La funzione UNIQUE di Excel è in grado di trovare facilmente valori univoci in una singola colonna o riga e di restituire righe univoche, ma non può estrarre valori univoci da una matrice a più colonne. La soluzione è utilizzarla insieme alla funzione TOCOL.
Ad esempio, per estrarre tutti i valori diversi (distinti) dall'intervallo A2:C7, la formula è:
=UNICO(TOCOL(A2:C7))
Inoltre, è possibile avvolgere la formula precedente nella funzione SORT per disporre l'array restituito in ordine alfabetico:
=SORT(UNIQUE(TOCOL(A2:C7))
Come convertire un intervallo in una colonna in Excel 365 - 2010
Nelle versioni di Excel in cui la funzione TOCOL non è supportata, esistono un paio di modi alternativi per trasformare un intervallo di celle in una colonna. Queste soluzioni sono piuttosto complicate, ma comunque funzionanti.
Per leggere l'intervallo per riga:
INDICE( gamma , QUOZIENTE(RIGA(A1)-1, COLONNE( gamma ))+1, MOD(RIGA(A1)-1, COLONNE( gamma ))+1)Per leggere l'intervallo per colonna:
INDICE( gamma , MOD(RIGA(A1)-1, RIGA( gamma ))+1, QUOZIENTE(RIGA(A1)-1, RIGHE( gamma ))+1)Per il nostro set di dati campione, le formule sono le seguenti:
Per eseguire la scansione dell'intervallo orizzontalmente da sinistra a destra :
=INDICE($A$2:$C$5, QUOZIENTE(RIGA(A1)-1, COLONNE($A$2:$C$5))+1, MOD(RIGA(A1)-1, COLONNE($A$2:$C$5))+1)
Questa formula è equivalente alla funzione TOCOL con il terzo argomento impostato su FALSE o omesso:
=TOCOLLO(A2:C5)
Per eseguire la scansione dell'intervallo verticalmente dall'alto verso il basso :
=INDICE($A$2:$C$5, MOD(RIGA(A1)-1, RIGHE($A$2:$C$5))+1, QUOZIENTE(RIGA(A1)-1, RIGHE($A$2:$C$5))+1)
Questa formula è paragonabile alla funzione TOCOL con il terzo argomento impostato su VERO:
=PROTOCOLLO(A2:C5, ,TRUE)
A differenza di TOCOL, le formule alternative devono essere inserite in ogni cella in cui si desidera che appaiano i risultati. Nel nostro caso, le formule vanno nelle celle E2 (per riga) e G2 (per colonna) e poi vengono copiate fino alla riga 13.
Se le formule vengono copiate su più righe del necessario, nelle celle "extra" apparirà un errore #REF! Per evitare che ciò accada, è possibile annidare le formule nella funzione IFERROR in questo modo:
=IFERROR(INDICE($A$2:$C$5, QUOZIENTE(RIGA(A1)-1, COLONNE($A$2:$C$5))+1, MOD(RIGA(A1)-1, COLONNE($A$2:$C$5))+1), "")
Si noti che per copiare correttamente le formule, abbiamo bloccato l'intervallo utilizzando riferimenti assoluti alle celle ($A$2:$C$5). È invece possibile utilizzare un intervallo con nome.
Come funzionano queste formule
Di seguito è riportata una descrizione dettagliata della prima formula che dispone le celle per riga:
=INDICE($A$2:$C$5, QUOZIENTE(RIGA(A1)-1, COLONNE($A$2:$C$5))+1, MOD(RIGA(A1)-1, COLONNE($A$2:$C$5))+1)
L'idea è di utilizzare la funzione INDEX per restituire il valore di una determinata cella in base ai numeri di riga e colonna relativi all'intervallo.
Il numero di riga è calcolato da questa combinazione:
QUOZIENTE(RIGA(A1)-1, COLONNE($A$2:$C$5))+1
QUOTIENT restituisce la parte intera di una divisione.
Per numeratore Si utilizza ROW(A1)-1, che restituisce un numero progressivo da 0 in E2 (la prima cella in cui è stata inserita la formula) a 11 in E13 (l'ultima cella in cui è stata inserita la formula).
Il denominatore è costante ed è uguale al numero di colonne dell'intervallo (3 nel nostro caso).
Ora, se si controlla il risultato di QUOTIENT per le prime 3 celle (E2:E4), si vedrà che è uguale a 0 (perché la parte intera della divisione è pari a zero). Aggiungendo 1 si ottiene il numero di riga 1.
Per le 3 celle successive (E5:E5), QUOTIENT restituisce 1 e l'operazione +1 fornisce il numero di riga 2. E così via.
In altre parole, questa parte della formula crea una sequenza di numeri ripetuti come 1,1,1,2,2,2,3,3,3,4,4,4,... Ogni numero si ripete tante volte quante sono le colonne dell'intervallo.
Per calcolare il numero di colonna , si costruisce una sequenza numerica appropriata utilizzando la funzione MOD:
MOD(RIGA(A1)-1, COLONNE($A$2:$C$5))+1
Poiché ci sono 3 colonne nel nostro intervallo (A2:C5), la sequenza deve essere 1,2,3,1,2,3,...
La funzione MOD restituisce il resto dopo la divisione.
In E2, MOD(ROW(A1)-1, COLONNE($A$2:$C$5))+1)
diventa
MOD(1-1, 3)+1)
e restituisce 1.
In E3, MOD(ROW(A2)-1, COLONNE($A$2:$C$5))+1)
diventa
MOD(2-1, 3)+1)
e restituisce 2.
Una volta stabiliti i numeri di riga e di colonna, INDEX non ha problemi a recuperare il valore richiesto.
In E2, INDEX($A$2:$C$5, 1, 1) restituisce il valore della prima riga e della prima colonna dell'intervallo di riferimento, cioè della cella A2.
In E3, INDEX($A$2:$C$5, 1, 2) restituisce il valore della prima riga e della seconda colonna, cioè della cella B2.
E così via.
La seconda formula, che analizza l'intervallo per colonna, funziona in modo simile, con la differenza che utilizza MOD per ottenere il numero di riga e QUOTIENT per ottenere il numero di colonna.
La funzione TOCOL non funziona
Se la funzione TOCOL lancia un errore, è molto probabile che si tratti di uno di questi motivi:
TOCOL non è supportato da Excel
Quando si verifica un errore #NAME?, la prima cosa da controllare è l'ortografia corretta del nome della funzione. Se il nome è corretto ma l'errore persiste, significa che la funzione non è disponibile nella vostra versione di Excel. In questo caso, prendete in considerazione l'utilizzo di un'alternativa TOCOL.
La matrice è troppo grande
Un errore #NUM indica che la matrice non può essere contenuta in una colonna. Un caso tipico è quando si fa riferimento a intere colonne o righe.
Non ci sono abbastanza celle vuote
Quando si verifica un errore #SPILL, verificare che la colonna in cui è stata inserita la formula abbia un numero sufficiente di celle vuote da riempire con i risultati. Se le celle sono visivamente vuote, verificare che non vi siano spazi e altri caratteri non di stampa. Per ulteriori informazioni, vedere Come risolvere l'errore #SPILL in Excel.
Ecco come utilizzare la funzione TOCOL in Excel 365 e le soluzioni alternative nelle versioni precedenti per trasformare una matrice bidimensionale in una singola colonna. Vi ringrazio per la lettura e spero di vedervi sul nostro blog la prossima settimana!
Quaderno pratico
Funzione TOCOL di Excel - esempi di formula (file .xlsx)