PDA

Visualizza versione completa : [Excel VBA] Estrarre numeri da stringa alfanumerica


silvershadow70
15-03-2009, 17.11.20
Salve a tutti!..

Come posso fare per estrarre dei numeri (si tratta più precisamente di un importo) da una stringa alfanumerica di una cella Excel?

Il dato contenuto nella cella è groosomodo del tipo "xxxxxx prezzo EUR nnn,nn yyyy.." vorrei che nella cella accanto comparisse solo il valore nnn,nn ... le varie xxx e yyy... non sono mai costanti ne come lunghezza ne come caratteri.

Ho provato con stringa.estrai ma non sono riuscito a trovare la modalità giusta.

Non so se è fattibile tramite formula oppure necessito di una routina VBA...

Qualcuno ha già affrontato questo problema..?


grazie! :)

silvershadow70
15-03-2009, 17.41.29
Ho fatto un passo avanti (ricerca su Google..)

con questa macro:
Function estrai_cifre(s As Range) As Long
Dim T As String
Dim C As String
Dim i As Integer
Application.Volatile True
T = s.Value
C = ""

For i = 1 To Len(T)
If Mid(T, i, 1) <= "9" And Mid(T, i, 1) >= "0" Then
C = C + Mid(T, i, 1)
End If

Next i
estrai_cifre = Val(C)

End Function

estraggo i numeri di una stringa ... ma solo quelli ... volgio dire il numero xxx,xx non lo estraggo.. come posso fare per includere anche la virgola???


:wall:

pietrol
16-03-2009, 02.31.23
Ciao silvershadow70
prova la macro così modificata:

Function estrai_cifre(s As Range) As Double
Dim T As String
Dim C As String
Dim i As Integer
Dim IsNumero As Boolean
Application.Volatile True
T = s.Value
C = ""
IsNumero = False
For i = 1 To Len(T)
If Mid(T, i, 1) = "," And IsNumero = True Then
C = C + ","
IsNumero = False
End If
If Mid(T, i, 1) <= "9" And Mid(T, i, 1) >= "0" Then
C = C + Mid(T, i, 1)
IsNumero = True
Else
IsNumero = False
End If
Next i
estrai_cifre = CDbl(C)

End Function

oppure, SOLO se la cifra è sempre preceduta dalla stringa "EUR " questa funzione:
=STRINGA.ESTRAI(B10;TROVA("EUR";B10;1)+4;TROVA(" ";B10;TROVA("EUR";B10;1)+4)-(TROVA("EUR";B10;1)+4))

ciao
pietrol

silvershadow70
16-03-2009, 23.18.05
ok grazie!! :)
al momento sto utilizzando solo la seconda che è in effetti di utilizzo immediato, dato che i valori sono sempre preceduti da EUR, tuttavia c'è un caso in cui non funziona al 100%.
Praticamente alcune volte capita che nella stringa c'è scritto "... EUR XXX,XX,.." in sostanza con la forula STRINGA:ESTRAI viene estratta anche la seconda virgola e quindi il risultato finale sarà per esempio 300,15, ...
C'è qualche modo per perfezionare la formula?


grazie in anticipo :)

pietrol
17-03-2009, 00.11.11
Ciao silvershadow70
prova così e fammi sapere.

=SOSTITUISCI(SOSTITUISCI(STRINGA.ESTRAI(B10;TROVA("EUR";B10;1)+4;TROVA(" ";B10;TROVA("EUR";B10;1)+4)-(TROVA("EUR";B10;1)+4))&"ç";",ç";"");"ç";"")

ciao
pietrol

silvershadow70
25-03-2009, 10.44.31
ciao,

rieccomi ... questa volta restituisce errore .. (VALORE...)
sto facendo alcuni confronti con l'altra ma nn riesco ancora a trovare l'errore...

silvershadow70
25-03-2009, 10.47.09
arieccomi ... oops !!!
avevo fatto un errore io ......... sembra che funzioni .. ti facio sapere


grazie! :)