Condividi:        

Estrarre numero da stringa

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Estrarre numero da stringa

Postdi nicola_na78 » 21/04/15 07:58

Buongiorno a tutti,
ho la necessità di estrarre la parte numerica di un testo che purtroppo non ha la stessa lunghezza altrimenti avrei utilizzato la proprietà "testo in colonne"
la stringa è formata nel seguente modo:
img_1234_566_fiat
img_587887_97885_Alfaromeo

vorrei che nella colonna "C" mi restituisse il seguente valore:
1234_566
587887_97885

Grazie a tutti

Buona giornata

Win7
office 2007
nicola_na78
Utente Senior
 
Post: 186
Iscritto il: 11/06/10 15:26

Sponsor
 

Re: Estrarre numero da stringa

Postdi wallace&gromit » 21/04/15 10:40

ma se come criterio di separazione in testo in colonne usi "Altro" e inserisci il trattino avrai come risultato
img 1234 566 fiat

non ti va bene?
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Estrarre numero da stringa

Postdi nicola_na78 » 21/04/15 11:07

Ciao wallace&gromit,
come dicevo sotto la lunghezza della stringa non è uguale per tutte le celle, oltre al seguente esempio:
img_1234_566_fiat
img_587887_97885_Alfaromeo

ci sono anche stringhe del genere:
img_585548_bis_a_56568_sukuky

quindi se uso "testo in colonne" il risultato che voglio non me lo da nella colonna "C" ma lo distribuisce nelle colonne in base alla lunghezza della stringa...

Nicola
nicola_na78
Utente Senior
 
Post: 186
Iscritto il: 11/06/10 15:26

Re: Estrarre numero da stringa

Postdi Anthony47 » 21/04/15 12:17

E nel caso di img_585548_bis_a_56568_sukuky, che risultato vorresti ottenere?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre numero da stringa

Postdi nicola_na78 » 21/04/15 22:06

Ciao Anthony47,
In questo caso il risultato che vorrei nella colonna "C" è: 585548_56568

Buona Notte a tutti
nicola_na78
Utente Senior
 
Post: 186
Iscritto il: 11/06/10 15:26

Re: Estrarre numero da stringa

Postdi Anthony47 » 22/04/15 00:05

Mah...
Fintanto che c'era solo una stringa iniziale e una finale da eliminare si potevano usare una formula del tipo
Codice: Seleziona tutto
=STRINGA.ESTRAI(A2;MIN(SE(STRINGA.ESTRAI(A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)));1)="_";RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)));""))+1;MAX(SE(STRINGA.ESTRAI(A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)));1)="_";RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)));""))-MIN(SE(STRINGA.ESTRAI(A2;RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)));1)="_";RIF.RIGA(INDIRETTO("1:"&LUNGHEZZA(A2)));""))-1)

Da confermare con Contr-Maiusc-Enter.

Con questa seconda complicazione tanto vale farla con una udf:
-in un Modulo standard del vba inserisci questo codice:
Codice: Seleziona tutto
Function zpzpz(ByVal myStr As String) As String
Dim myRes As String, I As Long, Ph As Long, myMid As String, myMid2 As String
Dim minApp As Long, maxApp As Long, myBeg As Long, myEnd As Long
'
myBeg = InStr(1, myStr, "_", vbTextCompare)
myEnd = InStrRev(myStr, "_", , vbTextCompare)
myMid = Mid(myStr, myBeg + 1, myEnd - myBeg - 1)
If InStr(1, myMid, "_", vbTextCompare) = 0 Then GoTo ExiI
'
myBeg = InStr(1, myMid, "_", vbTextCompare)
myEnd = InStrRev(myMid, "_", , vbTextCompare)
myMid2 = Left(myMid, myBeg) & Mid(myMid, myEnd + 1, 999)
ExiI:
zpzpz = myMid2
End Function
Poi sul foglio excel userai una formula tipo
Codice: Seleziona tutto
=zpzpz(LaCellaConLaStringaStrana)


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre numero da stringa

Postdi nicola_na78 » 22/04/15 16:08

Ciao Anthony47,
la formula non va, nel senso che quando capita una stringa come questa:
img_101550_181228k11430
la formula non mi restituisce nulla.

mentre quando capitano stringhe cosi':
img_102637_113117-N-01_3605533168950
la formula mi restituisce il seguente dato:
102637_01


Grazie
Nicola
nicola_na78
Utente Senior
 
Post: 186
Iscritto il: 11/06/10 15:26

Re: Estrarre numero da stringa

Postdi Anthony47 » 23/04/15 00:50

la stringa è formata nel seguente modo:
img_1234_566_fiat
img_587887_97885_Alfaromeo


ci sono anche stringhe del genere:
img_585548_bis_a_56568_sukuky


la formula non va, nel senso che quando capita una stringa come questa:
img_101550_181228k11430


quando capitano stringhe cosi':
img_102637_113117-N-01_3605533168950

Insomma lo vedi che ogni giorno presenti situazioni diverse dalle precedenti?
Non ti sto' a chiedere "C' e' una regola che ingloba tutta la casistica che hai?", oggi mi limito a "che cosa vorresti visualizzare negli ultimi due casi?"

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre numero da stringa

Postdi nicola_na78 » 23/04/15 09:37

Come ti dicevo prima, la lunghezza delle stringhe non è uguale per tutte le righe che ho nel foglio, e una regola precisa non c'è... l'unica cosa che ti posso dire è che sono separati dall' "_", io vorrei che mi facesse visualizzare nella colonna C solo la parte numerica della stringa...

Ciao
nicola_na78
Utente Senior
 
Post: 186
Iscritto il: 11/06/10 15:26

Re: Estrarre numero da stringa

Postdi alfrimpa » 23/04/15 10:49

Ciao Nicola

Innanzitutto un caro saluto ad Anthony.

Ti propongo un mio, assai modesto, tentativo di risolvere la questione; prova questa function che sicuramente andrà corretta ma può essere un punto di partenza

Codice: Seleziona tutto
Function nicola(a)
Dim lettera As Variant
For i = 5 To Len(a)
    lettera = Mid(a, i, 1)
        If lettera = "_" Or lettera = "1" Or lettera = "2" Or lettera = "3" Or lettera = "4" Or lettera = "5" Or lettera = "6" Or lettera = "7" Or lettera = "8" Or lettera = "9" Or lettera = "0" Then
            nicola = nicola & lettera
        End If
Next i
End Function


Sicuramente Anthony sarà in grado di migliorarla.

Alfredo
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Estrarre numero da stringa

Postdi Anthony47 » 23/04/15 13:12

Un saluto anche a te Alfredo.
La richiesta di avere un "underscore" tra i blocchi numero rende necessariamente piu' articolata la function.

Allora, nicola, riassumendo tutti i discorsi fin qui fatti, la regola dovrebbe essere:
-eliminare tutti i caratteri non numerici
-separare i vari blocchi con un unico underscore

Se cosi' allora prova questa "penultima" udf:
Codice: Seleziona tutto
Function myZpZp(ByVal myString As String) As String
Dim I As Long, J As Long
Dim myRes As String
'
For I = 1 To Len(myString)
    If Mid(myString, I, 1) >= "0" And Mid(myString, I, 1) <= "9" Then
        myRes = myRes & Mid(myString, I, 1)
        J = J + 1
    Else
        If J > 1 And Mid(myString, I, 1) = "_" And Right(" " & myRes, 1) <> "_" Then
            myRes = myRes & "_"
        End If
    End If
Next I
If Right(" " & myRes, 1) = "_" Then myRes = Left(myRes, Len(myRes) - 1)
myZpZp = myRes
End Function

Poi userai la formula
Codice: Seleziona tutto
=myZpZp(A2)


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre numero da stringa

Postdi nicola_na78 » 23/04/15 15:29

Anthony,
hai azzeccato in pieno quello che cercavo.... la tua udf è perfetta, estrai la parte numerica dalla stringa in modo perfetto separando i numeri con l' "_" ...
Grazie ;)
Un caro saluto
Grazie anche a te Alfredo per il tuo supporto...

Un abbraccio a tutti, alla prossima

Nicola
nicola_na78
Utente Senior
 
Post: 186
Iscritto il: 11/06/10 15:26


Torna a Applicazioni Office Windows


Topic correlati a "Estrarre numero da stringa":


Chi c’è in linea

Visitano il forum: Nessuno e 78 ospiti