Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

stringa.estrai da un punto secondario

449 views
Skip to first unread message

ale

unread,
Aug 6, 2012, 11:07:30 AM8/6/12
to
Buonasera a tutti. Diciamo che ho una stringa e vorrei tirarmi fuori tutto ciò che trovo dopo un punto, due punti (o altro), e quindi con
STRINGA.ESTRAI(C3; TROVA(":"; C3; 1)+1; 20) ci riesco e va bene....
ma se nella stringa ci fossero due o tre o anche quattro volte questi due punti e io vorrei tirarmi fuori solo il terzo? P.es. ho questa stringa:
aless:12345aless:6789aless:01010
come faccio a estrarre una volta 12345, poi un'altra volta 6789 e poi in un'altra cella 01010. Pensate sia possibile?
Grazie anche per dei consigli.
ciao
ale

ale

unread,
Aug 6, 2012, 11:12:51 AM8/6/12
to
Scusate, solo una precisazione: ovviamente i due punti si posizionano in vari modi, potrei anche trovarmi una stringa tipo:
pippo:::1234 e quindi avere blanc le prime due estrazioni e 1234 nella terza.
ciao
ale

plinius

unread,
Aug 6, 2012, 4:12:52 PM8/6/12
to
Il 06/08/2012 17:12, ale ha scritto:
> Il giorno lunedě 6 agosto 2012 17:07:30 UTC+2, ale ha scritto:
>> Buonasera a tutti. Diciamo che ho una stringa e vorrei tirarmi fuori tutto ciň che trovo dopo un punto, due punti (o altro), e quindi con
>>
>> STRINGA.ESTRAI(C3; TROVA(":"; C3; 1)+1; 20) ci riesco e va bene....
>>
>> ma se nella stringa ci fossero due o tre o anche quattro volte questi due punti e io vorrei tirarmi fuori solo il terzo? P.es. ho questa stringa:
>>
>> aless:12345aless:6789aless:01010
>>
>> come faccio a estrarre una volta 12345, poi un'altra volta 6789 e poi in un'altra cella 01010. Pensate sia possibile?
>>
>> Grazie anche per dei consigli.
>>
>> ciao
>>
>> ale
>
> Scusate, solo una precisazione: ovviamente i due punti si posizionano in vari modi, potrei anche trovarmi una stringa tipo:
> pippo:::1234 e quindi avere blanc le prime due estrazioni e 1234 nella terza.
> ciao
> ale
>

in A1 la stringa "aless:12345aless:6789aless:01010"
In A3 il numero dell'occorrenza che vogliamo ottenere
In A4
=STRINGA.ESTRAI(A1;TROVA("|";SOSTITUISCI(A1;":";"|";A3))+1;SE(VAL.ERR(TROVA("|";SOSTITUISCI(A1;":";"|";A3+1)));999;TROVA("|";SOSTITUISCI(A1;":";"|";A3+1))-TROVA("|";SOSTITUISCI(A1;":";"|";A3))-1))

Se in A3 c'č 1 si ottiene 12345aless
Se in A3 c'č 2 si ottiene 6789aless
Se in A3 c'č 3 si ottiene 01010
Se in A3 c'č 4 o piů si ottiene #VALORE!

Ciao,
E.

ale

unread,
Aug 7, 2012, 3:45:37 AM8/7/12
to
Il giorno lunedì 6 agosto 2012 22:12:52 UTC+2, plinius ha scritto:
> Il 06/08/2012 17:12, ale ha scritto:
>
> > Il giorno lunedì 6 agosto 2012 17:07:30 UTC+2, ale ha scritto:
>
> >> Buonasera a tutti. Diciamo che ho una stringa e vorrei tirarmi fuori tutto ciò che trovo dopo un punto, due punti (o altro), e quindi con
>
> >>
>
> >> STRINGA.ESTRAI(C3; TROVA(":"; C3; 1)+1; 20) ci riesco e va bene....
>
> >>
>
> >> ma se nella stringa ci fossero due o tre o anche quattro volte questi due punti e io vorrei tirarmi fuori solo il terzo? P.es. ho questa stringa:
>
> >>
>
> >> aless:12345aless:6789aless:01010
>
> >>
>
> >> come faccio a estrarre una volta 12345, poi un'altra volta 6789 e poi in un'altra cella 01010. Pensate sia possibile?
>
> >>
>
> >> Grazie anche per dei consigli.
>
> >>
>
> >> ciao
>
> >>
>
> >> ale
>
> >
>
> > Scusate, solo una precisazione: ovviamente i due punti si posizionano in vari modi, potrei anche trovarmi una stringa tipo:
>
> > pippo:::1234 e quindi avere blanc le prime due estrazioni e 1234 nella terza.
>
> > ciao
>
> > ale
>
> >
>
>
>
> in A1 la stringa "aless:12345aless:6789aless:01010"
>
> In A3 il numero dell'occorrenza che vogliamo ottenere
>
> In A4
>
> =STRINGA.ESTRAI(A1;TROVA("|";SOSTITUISCI(A1;":";"|";A3))+1;SE(VAL.ERR(TROVA("|";SOSTITUISCI(A1;":";"|";A3+1)));999;TROVA("|";SOSTITUISCI(A1;":";"|";A3+1))-TROVA("|";SOSTITUISCI(A1;":";"|";A3))-1))
>
>
>
> Se in A3 c'è 1 si ottiene 12345aless
>
> Se in A3 c'è 2 si ottiene 6789aless
>
> Se in A3 c'è 3 si ottiene 01010
>
> Se in A3 c'è 4 o più si ottiene #VALORE!
>
>
>
> Ciao,
>
> E.

ciao plinius e grazie per la risposta. Ma quello che vorrei simulare è tipo un "testo in colonne" con delimitatori i due punti. Ma a parte che non mi viene e non ho modo di farlo per mille motivi (tra cui ho delle col a dx), vorrei risolvere con delle formule.
Il fatto è questo: mi arriva una estrazione da un applicativo esterno, e vorrei acquisirmi le info al suo interno. Ho provato la tua formula, ma non è esattamente ciò che volevo. Pensavo ad una cosa tipo:
in A1 c'è aless:12345ale:6789ass:01010ess:12aless:6as:010
e conosco esattamente la qtà del campo da prendere, riuscire così ad avere
in B1 12345 (in pratica 5 caratteri dopo il primo "due punti")
in C1 6789 (in pratica 4 caratteri dopo il secondo "due punti")
in D1 01010 (in pratica 5 caratteri dopo il terzo "due punti")
in E1 12 (in pratica 2 caratteri dopo il quarto "due punti")
in F1 010 (in pratica 3 caratteri dopo il quinto "due punti")
pensi sia possibile.
grazie ancora
ciao
ale

ale

unread,
Aug 7, 2012, 3:52:18 AM8/7/12
to
no...forse non si può fare. pensavo, visto che conosco l'esatta qtà dei caratteri, forzavo io la formula, tipo:
STRINGA.ESTRAI(C2; TROVA(":"; C2; 115)+1; 20)
una volta cerco dal ventesimo, poi dal 50esimo, sopra dal 115esimo, ma ho visto che (non so perchè) non sono esattametne tutti allineati...boh.
cia
ale

plinius

unread,
Aug 7, 2012, 5:09:59 AM8/7/12
to
Sinceramente non ci ho capito più niente.
Sai già in anticipo numero e posizione dei ":"?
Conosci la lunghezza della parte da prelevare dopo ciascun ":" oppure
devi prelevare solo le cifre, quante siano non importa, interrommpendo
alla prima lettera incontrata?
Chiarisci bene questi elementi aggiungendo magari degli esempi.
Ad occhio, se devi estrarre solo le cifre dopo i due punti e non ne
conosci la posizione, la soluzione ottimale mi parrebbe una UDF.

Fai sapere,
E.

Mauro Gamberini

unread,
Aug 7, 2012, 5:50:54 AM8/7/12
to
"ale" ha scritto nel messaggio
news:74425cff-f203-4568...@googlegroups.com...

Buonasera a tutti. Diciamo che ho una stringa e vorrei tirarmi fuori tutto
ciň che trovo dopo un punto, due punti (o altro), e quindi con
STRINGA.ESTRAI(C3; TROVA(":"; C3; 1)+1; 20) ci riesco e va bene....
ma se nella stringa ci fossero due o tre o anche quattro volte questi due
punti e io vorrei tirarmi fuori solo il terzo? P.es. ho questa stringa:
aless:12345aless:6789aless:01010
come faccio a estrarre una volta 12345, poi un'altra volta 6789 e poi in
un'altra cella 01010. Pensate sia possibile?
Grazie anche per dei consigli.
***********************************


Un possibile modo.

Questa UDF da copia/incollare in un modulo standard:

Public Function f(ByVal Stringa As Variant, _
ByVal Separatore As String, _
ByVal Posizione As Long) As String


Dim v As Variant
v = Split(Stringa.Value, Separatore)
f = v(Posizione - 1)

End Function

A1 la tua stringa.
B1: =f(A1;":";3)

Che ti recupera il terzo valore.
In pratica la funzione richiede tre parametri:

Riferimento alla cella
Separatore
Quale dei valori vuoi recuperare

--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/

ale

unread,
Aug 7, 2012, 10:35:34 AM8/7/12
to
Il giorno martedì 7 agosto 2012 11:50:54 UTC+2, Mauro Gamberini ha scritto:
> "ale" ha scritto nel messaggio
>
> news:74425cff-f203-4568...@googlegroups.com...
>
>
>
> Buonasera a tutti. Diciamo che ho una stringa e vorrei tirarmi fuori tutto
>
> ci� che trovo dopo un punto, due punti (o altro), e quindi con
ciao ragazzi e scusate se rispondo solo ora ma non ho avuto un istante. io penso che sia impossibile la mia richiesta. Faccio un es:
ho questa stringa
ale:125adfpippo:sa1212carlo:1212
ora dovrei prelevare ciò che trovo dopo i primi due punti, dopo i secondi due punti e dopo i terzi due punti (sarebbero anche di più i due punti, ma lasciamo stare). Il problema, non gestibile, è che non so quando dovo fermarmi. per cui ad occhio, la prima estrazione, sarebbe 125adf, ma non avendo un criterio logico di stop è impossibile sapere quando fermarsi. Ero convinto di sapere il nr dei caratteri, per cui gestibilissimo. Ma non è così.
Ho cmq risolto in altro modo, mi prendo i dati da un'altra fonte...buona notte al secchio.
Cmq grazie a tutti per i vs interventi.
ciao alla prox
ale

r

unread,
Aug 7, 2012, 11:38:00 AM8/7/12
to
beh non è lo spirito giusto di aprire un 3d.

Comunque penso che una soluzione potrebbe essere con il testo in A1, in B1:
=ANNULLA.SPAZI(STRINGA.ESTRAI(SOSTITUISCI($A1;":";RIPETI(" ";99));(RIF.COLONNA(A1)-1)*99+1;99))
da confermate con ctrl+maiusc+invio e trascinare a destra fino a necessità.

saluti
r

Bruno Campanini

unread,
Aug 8, 2012, 1:22:45 AM8/8/12
to
ale brought next idea :

> ciao ragazzi e scusate se rispondo solo ora ma non ho avuto un istante. io
> penso che sia impossibile la mia richiesta. Faccio un es: ho questa stringa
> ale:125adfpippo:sa1212carlo:1212
> ora dovrei prelevare ciò che trovo dopo i primi due punti, dopo i secondi due
> punti e dopo i terzi due punti (sarebbero anche di più i due punti, ma
> lasciamo stare). Il problema, non gestibile, è che non so quando dovo
> fermarmi. per cui ad occhio, la prima estrazione, sarebbe 125adf, ma non
> avendo un criterio logico di stop è impossibile sapere quando fermarsi. Ero
> convinto di sapere il nr dei caratteri, per cui gestibilissimo. Ma non è
> così. Ho cmq risolto in altro modo, mi prendo i dati da un'altra
> fonte...buona notte al secchio. Cmq grazie a tutti per i vs interventi. ciao
> alla prox ale

Poche idee e ben confuse...
Fatti coraggio, sei fra i più!

Bruno


paoloard

unread,
Aug 17, 2012, 5:03:17 AM8/17/12
to


"r" ha scritto nel messaggio
news:23e63ded-9a07-47fc...@googlegroups.com...

cut
Comunque penso che una soluzione potrebbe essere con il testo in A1, in B1:
=ANNULLA.SPAZI(STRINGA.ESTRAI(SOSTITUISCI($A1;":";RIPETI("
";99));(RIF.COLONNA(A1)-1)*99+1;99))
da confermate con ctrl+maiusc+invio e trascinare a destra fino a necessit�.

saluti
r

*************************

Mi sembrava che la richiesta in origine fosse di estrarre solo i numeri.

-- ciao paoloard
http://riolab.org

0 new messages