Con una macro? ;-)
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/officeit/threads
IMHO devi per forza ricorrere a formule matriciali.
Vedi ad esempio
From: elby
Subject: Re: Formula di estrazione
Date: 21 Apr 2007 09:22:33 -0700
Newsgroups: microsoft.public.it.office.excel
www.google.it/groups?threadm=1177172553....@e65g2000hsc.googlegroups.com
--
Tiziano Marmiroli
Microsoft MVP - Office System
http://www.riolab.org
LOL
ciao Mauro
paoloard
hai ragione Tiziano, avevo dimenticato di specificarlo che la formula era
matriciale.
> Vedi ad esempio
>
> From: elby
> Subject: Re: Formula di estrazione
> Date: 21 Apr 2007 09:22:33 -0700
> Newsgroups: microsoft.public.it.office.excel
> www.google.it/groups?threadm=1177172553....@e65g2000hsc.googlegroups.com
avrei preferito una soluzione senza codice. Se possibile, ma so che �
possibile, non appena una delle due mitiche ci mette il naso ;-)
--
ciao paoloard
http://riolab.org
Ciao Paolo,
ho provato a scrivere questa formula matriciale (da immettere premendo
Ctrl+Maiusc+Invio):
=SOSTITUISCI(SOMMA(10^(15-RIF.RIGA($1:$15))*SE(VAL.NUMERO(1*STRINGA.ESTRAI(A1;RIF.RIGA($1:$15);1));STRINGA.ESTRAI(A1;RIF.RIGA($1:$15);1);0));"0";"")
Ha per� il limite di estrarre solo i numeri compresi tra 1 e 9 (elimina
eventuali 0).
--
Ciao,
Ignazio
http://www.riolab.org
Ciao a tutti.
Tiziano (penso) si riferisse alla proposta di elby (formula), che, in ogni
caso, otteneva lo stesso risultato di quella indicata da te, ovvero funziona
solo se i numeri sono consecutivi.
Come diceva Ignazio, se non ci fossero zeri, se ne uscirebbe 'abbastanza'...
Con gli zeri... una soluzione funzionante l'avrei anche trovata, ma �
inguardabile.
Il problema principale (con il sistema che ho seguito io) sono gli eventuali
zeri iniziali.
E' necessario definire almeno un nome (altrimenti la formula non viene
accettata nemmeno da excel...).
Supponiamo di avere la nostra stringa in A1.
Definisco il nome 'num':
=RIF.RIGA(INDIRETTO("1:"&CONTA.NUMERI(--STRINGA.ESTRAI($A$1;RIF.RIGA($1:$10);1))))
La 'formulina' per l'estrazione, a questo punto sarebbe:
=TESTO(SOMMA(DESTRA(GRANDE(SE(VAL.NUMERO(--STRINGA.ESTRAI(A1;RIF.RIGA($1:$10);1));10*RIF.RIGA($1:$10)+STRINGA.ESTRAI(A1;RIF.RIGA($1:$10);1));num);1)*10^(num-1));RIPETI(0;MAX(num)))
matriciale
Si potrebbe anche scegliere di definire un nome diverso e, se si volesse
trascinare la formula, il nome andrebbe definito con riferimento relativo.
Cosa dire... Meglio pensarci ancora un po' :-)
Ciao, Nur
Ciao Ignazio, s� la tua formula funziona egregiamente salvo il limite che
hai evidenziato.
Grazie.
--
Fai sapere se e come hai risolto grazie.
ciao paoloard
http://riolab.org
eccola!!
ciao Nur, encomiabile!
Per�, tanto per ragionare, io avrei pensato pi� ad una soluzione che
sostituisse a tutti i caratteri non numerici un singolo carattere, tipo
pipe, poi operare la sostituzione con stringa nulla. Cos�, mentre gli zeri
intermedi verrebbero valorizzati, non occorrerebbe preoccuparsi degli zeri
iniziali in quanto non sarebbero significativi nel definire il numero.
Che dici? Che dite?
> Per�, tanto per ragionare, io avrei pensato pi� ad una soluzione che
> sostituisse a tutti i caratteri non numerici un singolo carattere, tipo
> pipe, poi operare la sostituzione con stringa nulla. Cos�, mentre gli zeri
> intermedi verrebbero valorizzati, non occorrerebbe preoccuparsi degli zeri
> iniziali in quanto non sarebbero significativi nel definire il numero.
> Che dici? Che dite?
Che dico...
1) che se CONCATENA() facesse quello che molti (penso) di noi
spererebbero... avremmo gi� risolto da un pezzo.
2) che fare la sostituzione (che in effetti � la cosa pi� logica e che in vb
si fa con tre righe...) non mi sembra cos� semplice perch� dovresti ripetere
il sostituisci n volte... non puoi fare una sostituzione 'multipla' usando
una matrice come argomento testo_prec.
Intendo: puoi usare una matrice in testo_prec, ma non ottieni quello che
cerchiamo.
Il discorso degli zeri iniziali non l'ho capito bene.
Da una stringa cos�: s00g10r7sd
cosa vorresti estrarre? pensavo 00107
Se andasse bene 107 (come accennavo nell'altro post), sarebbe gi� pi�
semplice.
In ogni caso, sono convinta anch'io che esista un modo migliore.
Quello usato da me � esageratamente contorto, c'� qualcosa 'di troppo'.
Infatti, spero di trovare il tempo (...) di pensarci ancora.
Ciao, Nur
dipende dallo scopo che ci si prefigge. Se la premessa � "estrarre un
numero" mi sembra logico pensare ad un numero naturale, quindi senza zeri,
se invece � "estrarre caratteri numerici", tipo un prefisso telefonico o un
CAP o altro, allora occorrerebbero anche gli zeri iniziali.
>
> In ogni caso, sono convinta anch'io che esista un modo migliore.
> Quello usato da me � esageratamente contorto, c'� qualcosa 'di troppo'.
> Infatti, spero di trovare il tempo (...) di pensarci ancora.
>
e, fra un trasloco, una busta paga e un'occhiata al "marmocchio" :-), spero
proprio che tu possa trovarlo (il tempo).
"paoloard" ha scritto:
>
> "Ignazio" <i_putign...@SeScriviAvirgilio.it> ha scritto nel messaggio
> news:Oq1a5Poe...@TK2MSFTNGP04.phx.gbl...
> cut
> > Ctrl+Maiusc+Invio):
> >
> > =SOSTITUISCI(SOMMA(10^(15-RIF.RIGA($1:$15))*SE(VAL.NUMERO(1*STRINGA.ESTRAI(A1;RIF.RIGA($1:$15);1));STRINGA.ESTRAI(A1;RIF.RIGA($1:$15);1);0));"0";"")
> >
> > Ha per il limite di estrarre solo i numeri compresi tra 1 e 9 (elimina
> > eventuali 0).
> >
>
> Ciao Ignazio, s la tua formula funziona egregiamente salvo il limite che
> hai evidenziato.
> Grazie.
> --
Ciao paolo.
Facendo finta di non aver letto il post fraterno e sperando che Roby non mi
dia una censurata che levati, prova questa UDF:
Function solonumeri(str As String) As String
'rimuove tutti i caratteri alfabetici
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.Global = True
'mantiene solo numeri oltre alla eventuale virgola
'sperando che ce ne sia una sola :-))
re.Pattern = "[^\d,]+"
solonumeri = re.Replace(str, "")
End Function
Saluti a tutti, rose ala signora
Eliano
Augh!
eh eh .. Mauro lo sa che io sono refrattario al codice ;-)
e poi perché r dovrebbe "censurarti", la tua Function function egregiamente!
>
> Saluti a tutti, rose ala signora
> Eliano
La mia "vecchia signora" (Honda VF 750 Custom dell'85) ha gradito le rose,
ha detto che quando passerai da queste parti ti farà fare un rombante giro,
anche fino a quel di Cento dove staziona il tuo fratello di NG :-).
Il grande Manitù sia con te.
Manitou :-(
"paoloard" ha scritto:
Ciao paolo.
Ho inserito nella Udf un commento che dovrebbe scatenare Mr. r; se non lo ha
ancora fatto probabilmente non lo ha letto per cui attendiamo fiduciosi.
Per le rose, quelle non erano destinate alla tua signora, ma alla signora
del thread (Nur); aggiungerò quindi un litro di carburante adatto alla tua.
Grazie per l'invito sulla rombante, ma sono sceso, bestemmiando, da una
splendida Morini Settebello nel '60 per andare all'ennesimo funerale,
giurando di non rimontare mai più su oggetti simili e finora ho fatto fede a
quel giuramento.
Saluti cordiali
Eliano
uf uf uf ... eccomi!
ciao mitico ... (e ciao a tutti)
vedo che ultimamente le regexp sono divenute contagiose ... già la
bella nur ... adesso tu ... mi sembrava però si volesse discutere di
formule excel ...
sulla tua domanda ... la virgola non è richiesta ... si chiedeva di
mantenere i soli numeri ... sarebbe difficile anche per una regexp ...
decidere quale, di due o più virgole, sia quella da mantenere ... la
loro potenza è grande ... ma non riescono ancora a prendere tali
decisioni in autonomia :-)
pattern comunque ce ne sono già collaudati per verificare un numero a
virgola mobile ... nel caso:
saluti
r
"r" ha scritto:
> uf uf uf ... eccomi!
> ciao mitico ... (e ciao a tutti)
> vedo che ultimamente le regexp sono divenute contagiose ... già la
> bella nur ... adesso tu ... mi sembrava però si volesse discutere di
> formule excel ...
> sulla tua domanda ... la virgola non è richiesta ... si chiedeva di
> mantenere i soli numeri ... sarebbe difficile anche per una regexp ...
> decidere quale, di due o più virgole, sia quella da mantenere ... la
> loro potenza è grande ... ma non riescono ancora a prendere tali
> decisioni in autonomia :-)
> pattern comunque ce ne sono già collaudati per verificare un numero a
> virgola mobile ... nel caso:
>
> http://excelvba.altervista.org/blog/index.php/Excel-VBA/Espressioni-Regolari-e-Pattern-applicazione-Form.html
>
Ciao Roby.
Meno male, mi aspettavo una risciacquata perchè ci ho ragionato sopra per
quasi un'ora compulsando tutti i link conosciuti compreso quello segnalato e
poi ho buttato la spugna mandando la Udf ed ignorando l'effettivo argomento
normalmente ostico per paolo, come lo sono per me buona parte delle formule
costruite con le native di XL.
Grazie, saluti a tutti e bacioni al pupo.
Eliano
Forse sei tu, Roberto, ad essere contagioso :-)
... mi sembrava però si volesse discutere di
> > formule excel ...
> > sulla tua domanda ... la virgola non è richiesta ... si chiedeva di
> > mantenere i soli numeri ... sarebbe difficile anche per una regexp
> > ...
> > decidere quale, di due o più virgole, sia quella da mantenere ... la
> > loro potenza è grande ... ma non riescono ancora a prendere tali
> > decisioni in autonomia :-)
Magari si potrebbe far mantenere la prima in posizione 'accettabile',
che sia sufficiente?
> > pattern comunque ce ne sono già collaudati per verificare un numero
> > a
> > virgola mobile ... nel caso:
> >
> > http://excelvba.altervista.org/blog/index.php/Excel-VBA/Espressioni-Regolari-e-Pattern-applicazione-Form.html
Me li guarderò, appena potrò usare un pc...
> >
>
> Ciao Roby.
> Meno male, mi aspettavo una risciacquata perchè ci ho ragionato sopra
> per
> quasi un'ora compulsando tutti i link conosciuti compreso quello
> segnalato e
> poi ho buttato la spugna mandando la Udf ed ignorando l'effettivo
> argomento
> normalmente ostico per paolo, come lo sono per me buona parte delle
> formule
> costruite con le native di XL.
> Grazie, saluti a tutti e bacioni al pupo.
> Eliano
Grazie Eliano, anche delle rose! Non avevo capito che erano per me :-)
Ciao, Nur
Cos'ha combinato Eliano! Adesso la mia "old lady" non vuole più restituire
le rose a Nur :-).
Per consolarla dovrò farle fare un giro, però con questo freddo brrr....
quasi quasi chiedo a Mauro... tanto lui "romba" anche d'inverno!
Ma devi consolare me o la moto?
Dai, fai fare un giretto *a me* sulla moto, così ci fai contente
entrambe :-)
> quasi quasi chiedo a Mauro... tanto lui "romba" anche d'inverno!
Mauro però corre!!!!
Ciao, Nur
ROTFL ;-)
Mauro è giovane e gira il polso
fino in fondo!
Ma sarete invidiosi....
Ci ho pensato... un altro po'.
Un'alternativa che consente di non definire il nome:
=TESTO(SOMMA(--(DESTRA(GRANDE(SE(VAL.NUMERO(--STRINGA.ESTRAI(A1;RIF.RIGA($1:$20);1));--(RIF.RIGA($1:$20)&STRINGA.ESTRAI(A1;RIF.RIGA($1:$20);1));0);RIF.RIGA($1:$20)))&RIPETI(0;RIF.RIGA($1:$20)-1)));RIPETI(0;CONTA.NUMERI(--STRINGA.ESTRAI(A1;RIF.RIGA($1:$20);1))))
matriciale
Che si 'semplifica' cos�, nel caso non si vogliano considerare gli zeri
iniziali:
=SOMMA(--(DESTRA(GRANDE(SE(VAL.NUMERO(--STRINGA.ESTRAI(A1;RIF.RIGA($1:$20);1));--(RIF.RIGA($1:$20)&STRINGA.ESTRAI(A1;RIF.RIGA($1:$20);1));0);RIF.RIGA($1:$20)))&RIPETI(0;RIF.RIGA($1:$20)-1)))
sempre matriciale
Ciao, Nur
ciao Nur,
e se ora io volessi uno zero si e uno no? oppure solo il primo numero e il
secondo zero? e se .......
ovviamente scherzo ;-)
lavoro eccellente Nur! risolve brillantemente le due esigenze, non ne
dubitavo :-)
grazie
Ti toccherebbe regalarmela la tua Old Lady... un giretto non basterebbe :-)
> ovviamente scherzo ;-)
Ma no... parliamone... direi di considerare gli zeri solo se la lettera
successiva � maiuscola. Che dici? :-)
> lavoro eccellente Nur! risolve brillantemente le due esigenze, non ne
> dubitavo :-)
Invece io s�!
Poi... non so... secondo me c'� ancora qualcosa di troppo...
> grazie
Grazie a te.
Ciao, Nur
mmm...preferisco fermarmi al quesito originale ;-)
> Poi... non so... secondo me c'� ancora qualcosa di troppo...
allora attendiamo la nuova release :-)