Scomporre una stringa in varie sottostringhe di lunghezza variabile in base alla posizione dei numeri

Marta ha un foglio di lavoro con una lunga serie di numeri di inventario nella colonna A. Questi sono costituiti da lettere e numeri, come A123BC, AB123C, ecc. Marta vuole suddividere i dati in tre colonne, in modo che il testo prima dei numeri sia in una colonna, i numeri nella seconda colonna e il testo dopo i numeri nella terza.

Il fattore che complica la divisione del codice articolo in segmenti è che non esiste una lunghezza predefinita per ciascun componente del codice articolo combinato. Se i componenti fossero di lunghezza standard, sarebbe possibile utilizzare la funzione Testo in colonne in Excel. Dal momento che non lo sono e non c’è alcun delimitatore tra i componenti, allora quella potenziale strada per una soluzione non è percorribile.

Se vuoi utilizzare le formule per separare i codici articolo, ne avrai bisogno di tre, una per ogni componente che desideri estrarre. Supponendo che i codici seguano lo schema indicato (testo, cifre, testo) e che il primo codice sia nella cella A1, è possibile utilizzare quanto segue nella cella B1:

=SINISTRA(A1;CONFRONTA(FALSO;VAL.ERRORE(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1));0)-1)

La formula deve essere inserita come una formula di matrice, il che significa usando Ctrl + Maiusc + Invio. La formula trova la prima cifra nel codice, quindi restituisce tutto prima di quella cifra. Funzionerà su qualsiasi codice che non superi i 100 caratteri di lunghezza.

Per estrarre il secondo componente del codice articolo, puoi inserire la seguente formula nella cella C1:

=STRINGA.ESTRAI(A1;CONFRONTA(FALSO;VAL.ERRORE(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1));0);CONTA.NUMERI(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1)))

Anche in questo caso, questa è una singola formula e deve essere inserita come una formula di matrice (Ctrl+Maiusc+Invio) in modo che possa funzionare su ogni carattere codice originale. Essa esamina il codice e determina il punto iniziale delle cifre, quindi estrae tutte le cifre. Restituisce una stringa di testo, anche se quella stringa è composta da cifre. Se vuoi che venga effettivamente trattata come un numero (il che eliminerebbe gli zeri iniziali, ovviamente), devi racchiudere l’intera formula in una funzione VALORE, come mostrato qui:

=VALORE(STRINGA.ESTRAI(A1;CONFRONTA(FALSO;VAL.ERRORE(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1));0);CONTA.NUMERI(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1))))

Per ottenere l’ultimo componente del codice, è necessario utilizzare la seguente formula, nuovamente immessa come formula di matrice:

=STRINGA.ESTRAI(A1;CONFRONTA(FALSO;VAL.ERRORE(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1));0)+CONTA.NUMERI(1*STRINGA.ESTRAI(A1;RIF.RIGA(INDIRETTO("1:100"));1));100)

Sebbene questo approccio funzioni molto bene, le formule di matrice notoriamente richiedono calcoli intensivi, specialmente quando sono presenti molte formule nel foglio di lavoro. Se devi separare un migliaio di codici articolo, significherebbe che ti ritroverai con 3.000 formule di matrice, che possono essere molto, molto lente nel ricalcolare.

Se ti trovi in ​​questa situazione, potresti voler utilizzare una macro per separare efficacemente i codici articolo. La seguente macro dovrebbe funzionare su codici che seguono lo schema “testo, cifre, testo”, come già descritto:

Questo contenuto è riservato agli abbonati

Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.

Se sei già abbonato Accedi per sbloccare il contenuto!

In caso contrario abbonati qui! L'abbonamento è conveniente.

E puoi interromperlo in ogni momento e in completa autonomia.

(puoi renderti conto di quanti siano i contenuti riservati

raggiungendo questa pagina)

Tags: , , , , , , , , , , , , , , , , , , , , , ,

Ti è stato utile?