Vediamo come estrarre velocemente una parte di testo da una cella di Excel senza dover ricorrere alla funzione STRIGA.ESTRAI
Ad esempio immaginiamo di avere in una cella Excel questo testo:
Andrea Perotti – In The Name Of Blog – www.andreaperotti.ch – Lugano
Abbiamo bisogno di estrarre il testo www.andreaperotti.ch dalla cella.
Chiaramente il testo contenuto nella cella deve essere delimitato ad esempio:
Nome, Cognome, Indirizzo (in questo caso i “pezzi” sono delimitati dalla virgola)
Procediamo quindi in questo modo:
Aprire la finestra di VBA:
In Excel XP o 2003:
Menù Strumenti – Macro – Visual Basic Editor
In Excel 2007:
Bottone di Office – Pulsante Opzioni di Excel – Impostazioni generali – Opzione “Mostra scheda Sviluppo sulla barra multifunzione”
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic
Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci – Modulo) e copiare il codice riportato sotto:
Function GetStringPart(strInput As String, strDelimiter As String, _
intPart As Integer) As String
Dim varStrings As Variant
varStrings = Split(strInput, strDelimiter, -1, vbBinaryCompare)
On Error Resume Next
GetStringPart = Trim(varStrings(intPart - 1))
On Error GoTo 0
End Function
Chiudere quindi la finestra di Visual Basic e tornare in Excel.
A questo punto immaginiamo che nella cella A5 sia presente questo testo:
Andrea Perotti – In The Name Of Blog – www.andreaperotti.ch – Lugano
Nella cella H5 abbiamo bisogno di visualizzare solo il testo www.andreaperotti.ch
La formula che dovremo inserire nella cella H5 è la seguente:
=GetStringPart(strInput;strDelimiter;intPart)
Dove:
strInput: è la cella che contiene il testo completo
strDelimiter: è ciò che delimita una parte di testo dall’altra (tra virgolette ” “)
intPart: è la posizione del testo che vogliamo estrarre
Nel nostro caso quindi la funzione risulterebbe:
=GetStringPart(A5;”-“;3)
Se vogliamo rendere disponibile questa funzione in modo tale da trovarla all’avvio di ogni cartella di Excel possiamo creare un componente aggiuntivo come specificato qui.
Informatics, ski racer, loves travels, Finland, Norway, mountains, squash, photography, Drones and RC Helicopter
Ho un grosso problema. Ho convertito tabelle in pdf in excel ed il programma invece di mettermi tutte le righe in diverse celle mi ha messo tutto in una cella, andando a capo.vorrei chiedere se con vba posso estrarre questi testi. La variabile è: andare a capo.
Ringrazio e saluto
umberto
Umberto per estrarre testo da una cella e disporlo su più celle puoi usare la funzione STRINGA.ESTRAI oppure il comando “Testo in colonne”.
Ciao, mi piace molto la tua idea, ma sarebbe possibile avere variabile la intPart?
Ti spiego, io ho questo:
Queued: 01/10/2013 08.41.27: ZZMS321 Assigned: 07/10/2013 13.52.45: PRIBELL Noticed: Work in process: 15/10/2013 11.46.53: TP-ZZRVI34_TEL Pending: 07/10/2013 14.34.58: ZZMANTH Answered: 15/10/2013 11.50.37: ZZABI54 Closed: 16/10/2013 14.33.36: ZZCTUND
Mi servirebbe qualcosa che da tutto questo testo ritorni solo la stringa di 7 caratteri prima della parola Closed.
Ma non posso utilizzare un conteggio statico, perchè la stringa può variare in lunghezza sia prima che dopo la parola closed, ma l’etichetta closed è costante e prima di quella c’è sempre la stringa di 7 caratteri
Grazie
@Alessio: se quello che tu hai è sempre nel formato della riga di esempio che hai messo ed è contenuto in una sola cella allora per estrarre quello che ti serve potresti usare questa formula:
=STRINGA.ESTRAI(F6;TROVA(“Closed”;F6)-8;7)
in cui F6 è la cella che contiene il tuo testo
Ciao Andrea io invece ho delle frasi in ogni cella tipo questa nella cella A2:
And that [NEE] adversity as well cos you know you don’t always get lovely summer days [/NEE] to be sat in a trench digging cos like you say [WAPNE] you have to climb [NEE] hills things [/NEE] can get a bit stressful I suppose [/WAPNE] but [WGPSA] that sort of bonds you with the people you are working with cos you are sharing that experience and it’s that shared experience I think that makes for such a good atmosphere and mutual respect as well that is something that is very important [/WGPSA] but yes it’s a great way to make friends as well
ora vorrei isolare quello che c’é tra un [XYZv] e [/XYZv] in A3 conservando le variabili tra parentesi quadre. Come si puó fare?
Grazie mille
Ho appena risolto con Text to Columns sostituendo ] con ; per isolare completamente.
I love Excel
thanks anyway
Buongiorno, avrei necessità di unire una parte di testo di una cella di excel con un’altra parte di testo di un’altra cella di excel, suddivise dal segno -. ti faccio un esempio
cella A 01114GE070
cella B xxx
cella che vorrei ottenere 01114-xxx
Grazie
@massimo: se il numero di caratteri che devi estrarre ed unire dalle due celle è sempre lo stesso puoi usare questa formula: =CONCATENA(SINISTRA(A1;5);”-“;SINISTRA(B1;2)) che ipotizzando il tuo esempio estrae i primi 5 caratteri della prima cella e li unisce ai primi due caratteri della seconda separandoli con un trattino. In pratica la funzione Concatena per unire e la funzione Sinistra per estrarre.
Andrea GRAZIE!!! io non conosco il mondo “macro” in Excel e mi hai aiutato veramente tantissimo.
CIAO Andrea sono alle prime armi con Excel, sto mettendo in ordine nomi con rispettivi indirizzi e numeri di telefono.
Ho circa 400 nomi con i relativi dati tutti incolonnati (da A1 a A4000) circa.
Dovrei mettere in fila ALCUNE delle stringhe che ho incolonnate (Ad esempio A1 in A1, A4 in B1, A7 in C1, A10 in D1).
L’unica cosa che accomuna tutti i 300 nomi con i relativi dati è che sono composti da 24 celle ognuno in cui nella ventiquattresima c’e’ scritta la parola “codice” oltre al relativo codice.
Posso chiederti se esiste una funzione per copiare il contenuto della ventitreesima cella sopra a quella con scritto “codice” in un determinato posto, poi copiare il contenuto della diciannovesima cella sopra a quella con scritto “codice” in un altro posto… e cosi via? scusa se non mi so spiegare molto bene 🙁 grazie mille in ogni caso!!! Sara
scusa prima ho scritto 400 poi 300, cambia poco! 🙂
@sara: prova a mandarmi il file per mail con un esempio di ciò che vuoi ottenere e quando ho un attimo di tempo provo dargli un’occhiata.
ciao Andrea,\ndovrei estrarre da un certo numero di url un numero posto dopo lo “/”, solo che nella stringa ci sono vari”/” a me interessa estrarre il numero dopo il terzo “/”\nti ringrazio per una eventuale soluzione\nMariano
@Mariano: i numeri da estrarre sono sempre uguali in termine di lunghezza, es. sempre tre numeri dopo il terzo /? In questo caso puoi usare questa formula: \n\n
\n\n in cui A1 è la cella che contiene il testo da estrarre e il 3 prima della parentesi finale rappresenta il numero di caratteri (nel tuo caso di numeri) da estrarre dopo il terzo /\nInfine fai attenzione, se fai copia/incolla della formula, che le virgolette siano quelle normali e non quelle inglisi ovvero inclinate; nel caso riscrivile.
Ciao Andrea, ho provato con i dati da te indicati, ma non mi funziona. Io sto utilizzando excel 2016 non so se dipenda da questo.
In pratica dovrei estrarre da un’unica stringa così formata: [“Si”,”Abbastanza”,”No”,”Abbastanza”,”Si”,”Abbastanza”,”SI”,”Abbastanza”,”Si”,”Si”,”Abbastanza”,”No”,”Abbastanza”,”Abbastanza”,”No”,”No”,”Si”,”Si”,”Si”,”Si potrebbero tenere i laboratori aperti più tempo”] ogni singola voce che può però variare perché è il risultato di un questionario scolastico. Potrebbe andar bene il tuo metodo?
Grazie
@Mariano: Se in una cella hai quella stringa, per dividere i diversi testi devi usare il comando Testo in colonne che trovi nella scheda Dati di excel, utilizzando la virgola come delimitatore.
Grazie Andrea per la risposta, ho lavorato parecchio su questa stringa ed oltre a testo in colonne ho utilizzato =SOSTITUISCI più volte per ripulire il codice e poi testo in colonne. Grazie
Ciao Andrea, ho la necessità di esportare una immagine memorizzata nel Commento della cella A1 nel controllo Image di una UserForm. Mi potresti illuminare come risolvere il problema ? E’ possibile assegnare ad una variabile l’oggetto Comment della cella? Ho provato così:
Dim CurrentComment as Comment
Set CurrentComment=Sheets(1).CommentObject(“A1”).Comment
Questa assegnazione non funziona perché l’oggetto non è supportato.
Grazie.
vorrei estrarre una stringa alfanumerica TIPO QUESTA CS1
grazie Andrea