Condividi:        

Excel: estrarre numero da stringa di testo

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

Excel: estrarre numero da stringa di testo

Postdi valle1975 » 30/08/16 10:27

Buongiorno, avrei la seguente necessità, ho un file con dei riferimenti di magazzino prodotto finito, devo estrarre il codice commessa (OVE ESISTENTE) da una colonna che contiene pero' tutti i riferimenti di commessa e senza un posizionamento fisso e regolare, non solo il codice numerico che mi serve per effettuare una importazione in un nuovo gestionale, pertanto con comandi sulla stringa semplici e di mia conoscenza (come destra, sinistra,ecc), non riesco ad arrivare al risultato voluto.
Il numero commessa da estrapolare è sempre un numero di 8 cifre, iniziante per 5, ove non riscontrato, vorrei mi venisse segnalata una dicitura "NON PRESENTE".
Ecco alcuni esempi dei dati che mi trovo da cui devo esportare il codice commessa

Riferimento; Commessa da estrarre
18292601 56364601; 56364601
10322.1 55954801; 55954801
769.3 56127603; 56127603
ORD DEL 1/8 56215502; 56215502
52828 1; NON PRESENTE
X CARTONCINI; NON PRESENTE
53822102;53822102
55875401.00 12/07/16;55875401
17998301; NON PRESENTE

Ringrazio fin da ora per i vs. preziosi consigli, buona giornata.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Sponsor
 

Re: Excel: estrarre numero da stringa di testo

Postdi Marius44 » 30/08/16 12:08

Ciao valle1975
premesso che è sempre bene allegare un file, la tua richiesta non è molto chiara.
Ammesso che i dati da te dichiarati siano nell'intervallo A1:A10 una possibile soluzione (ma da adattare e da migliorare) potrebbe essere la seguente UDF in D2 scriverai =EstraiCommessa(A2) e trascini in basso fin dove serve
Codice: Seleziona tutto
Function EstraiCommessa(cell As Range) As String  'by Marius44
Dim R
    R = Split(cell, " ")
    For i = 0 To UBound(R)
        If Left(R(i), 1) = "5" Then
            EstraiCommessa = R(i)
            Exit For
        End If
    Next i
    Set R = Nothing
End Function

Ti dico subito che non è perfetta (se nella stessa cella vi sono due commesse ti dà solo la prima) ma volevo sapere cosa te ne sembra.

Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Excel: estrarre numero da stringa di testo

Postdi valle1975 » 31/08/16 10:21

Mi scuso se non sono stato molto chiaro, ecco l'esempio come consigliato
https://mega.nz/#!bBVlyaxT!Q8NpBBvEnPHcChGS_BUzqfphEPfD2Wj4oIGfNMUY6rQ

Nella prima colonna i riferimenti esistenti in alcune varianti presenti, nella seconda il risultato che dovrei ottenere.
Grazie mille.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: Excel: estrarre numero da stringa di testo

Postdi valle1975 » 31/08/16 17:11

Grazie MArius44 per la celere risposta.
Ho provato la tua soluzione, ma non controllando la lunghezza di 8 cifre del numero (requisito vincolante), mi riporta diversi risultati inizianti con "5", ma di lunghezza non corretta, pertanto Errati.
Occorrerebbe integrare il controllo di lunghezza a 8 cifre fisso, e se possibile e per arrivare alla perfezione, che verifichi ed escluda anche caratteri come "." dal conteggio delle cifre, dato che non sono effettivamente cifre, cosi' anche casi come il seguente sarebbero gestiti correttamente.

56188501.00 vengano restituiti correttamente come 56188501 e non come 56188501.00

Ma questa ultima sarebbe una finezza.. ;)
Grazie mille, ciao.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: Excel: estrarre numero da stringa di testo

Postdi Marius44 » 31/08/16 17:27

Ciao valle1975
Ho "affinato" un po' la Function. Vedi se va bene così. Nella cella dove vuoi il risultato scrivi =CercaCommessa(A2)
Codice: Seleziona tutto
Function CercaCommessa(cella As Range) As String
Dim R
    For j = 2 To 16
        R = Split(cella)
        For i = 0 To UBound(R)
            aa = Len(R(i))
            If Left(R(i), 1) = "5" And Len(R(i)) = 8 Then
                cc = R(i)
                Exit For
            ElseIf aa > 8 Then
                For k = 1 To aa - 1
                    If Mid(R(i), k, 1) = "5" Then
                        cc = Mid(R(i), k, 1)
                        For h = k + 1 To k + 1 + 8
                            If Mid(R(i), h, 1) >= "0" And Mid(R(i), h, 1) <= "9" Then
                                cc = cc & Mid(R(i), h, 1)
                                If Len(cc) = 8 Then GoTo 1
                            Else
                                cc = ""
                                Exit For
                            End If
                        Next h
                    End If
                Next k
            Else
                cc = "NON PRESENTE"
            End If
        Next i
1      CercaCommessa = cc
    Next j
End Function

Anche questa andrebbe "ripulita" perchè ha qualche fronzolo in più, ma vedi se va bene.
Dalle prove da me effettuate sembra di si. Prova anche tu e fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Excel: estrarre numero da stringa di testo

Postdi valle1975 » 01/09/16 10:30

Marius44 che dire..... SEI UN MITO!!!
Mi sembra semplicemente perfetta, non vedo come poterla rendere migliore!
Grazie infinite!! Alla prossima.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: Excel: estrarre numero da stringa di testo

Postdi valle1975 » 02/09/16 14:04

Ciao Marius44....ho trovato qualche caso che non viene gestito dalla tua ottima funzione...
Ti allego il file di esempio dove riporto solo i casi non gestiti... magari riesci a migliorare e controllare anche questi casi , che come da definizione, sarebbero da gestire con la dicitura "NON PRESENTE", che non so perchè non viene inserita.

https://mega.nz/#!GVUlxLIK!UJ5q3HvHubVLrHMqkbEnTsAkli2VQcIvw4tYsk83J7c

Grazie, saluti.
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33

Re: Excel: estrarre numero da stringa di testo

Postdi Marius44 » 02/09/16 15:48

Ciao Valerio
non ho più il file originale quindi ho lavorato sullo spezzone che hai allegato.
Salvo errore, la Function andrebbe corretta così
Codice: Seleziona tutto
Function CercaCommessa(cella As Range) As String
Dim R
    For j = 2 To 20
        R = Split(cella)
        For i = 0 To UBound(R)
            aa = Len(R(i))
            If Left(R(i), 1) = "5" And Len(R(i)) = 8 Then
                cc = R(i)
                Exit For
            ElseIf aa > 8 Then
                For k = 1 To aa - 1
                    If Mid(R(i), k, 1) = "5" Then
                        cc = Mid(R(i), k, 1)
                        For h = k + 1 To k + 1 + 8
                            If Mid(R(i), h, 1) >= "0" And Mid(R(i), h, 1) <= "9" Then
                                cc = cc & Mid(R(i), h, 1)
                                If Len(cc) = 8 Then GoTo 1
                            End If
                        Next h
                    Else
                        cc = "NON PRESENTE"
                        Exit For
                    End If
                Next k
            End If
        Next i
1      CercaCommessa = cc
    Next j
End Function


Fai le DOVUTE prove e fai sapere.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: Excel: estrarre numero da stringa di testo

Postdi Anthony47 » 05/09/16 02:10

Lavorando sull'idea di Marius propongo questa variante, che a me pare lavori in tutte le condizioni descritte:
Codice: Seleziona tutto
Function myCommessa(myRan As Range, Optional myLen As Long = 8, Optional myFirst As String = "5") As Variant
Dim mySplit, myTerm, GotIt As Boolean
mySplit = Split(Replace(myRan.Cells(1, 1).Value & " ", ".", " ", , , vbTextCompare), " ", , vbTextCompare)
For Each myTerm In mySplit
    If Len(myTerm) = myLen And Left(myTerm, 1) = myFirst Then
        myCommessa = myTerm
        GotIt = True
        Exit For
    End If
Next myTerm
If Not GotIt Then myCommessa = "NON PRESENTE"
End Function

Poi nel foglio scriverai una formula del tipo
Codice: Seleziona tutto
=myCommessa(A2)

In realta' la function consente anche di variare il numero di caratteri che la commessa dovrebbe avere; ad esempio questa estrae stringhe di 6 caratteri che cominciano con 5
Codice: Seleziona tutto
=myCommessa(A13;6)

Come pure consente di variare il carattere iniziale della stringa cercata; ad esempio questa cerca stringhe di 6 caratteri che cominciano con 3
Codice: Seleziona tutto
=myCommessa(A2;6;3)

Poiche' il secondo e terzo parametro sono opzionali, tutte queste formule sono corrette:
Codice: Seleziona tutto
=myCommessa(A2;;3)          'Cerca stringhe di 8 crt che cominciano con 3
=myCommessa(A2;7)           'Cerca stringhe di 7 caratteri che cominciano con 5
=myCommessa(A2;7;"C")       'Cerca stringhe di 7 caratteri che cominciano per C

In generale la formula sara' =myCommessa(LaCellaInCuiCercare;[numero di caratteri];[carattere iniziale])
Num di caratteri come default e' 8, Carattere iniziale come default e' "5".

Ho inserito queste "complicazioni" perche' mi sembrava che con poche aggiunte (nella riga iniziale) si poteva ottenere molto di piu'.

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

Re: Excel: estrarre numero da stringa di testo

Postdi valle1975 » 05/09/16 09:33

Semplicemente fantastici...
Soluzione perfetta!
Grazie mille..
Valerio
---------------------------------
Windows 10 Professional + MS Office 2016 STD Ita
valle1975
Utente Senior
 
Post: 213
Iscritto il: 27/09/10 16:33


Torna a Applicazioni Office Windows


Topic correlati a "Excel: estrarre numero da stringa di testo":


Chi c’è in linea

Visitano il forum: Nessuno e 64 ospiti