estrazione di una parte di testo

Anonimo
2011-10-12T11:19:26+00:00

Ciao

rieccomi qua...

In un foglio excel una colonna contiene testo valorizzato (per esempio):

"BONIFICO DA PIPPO PLUTO & PAPERINA"  "20110213695 - BONIF. VS. FAV."<br><br><br><br><br><br><br> "YY05102011 TOPOLINO QUI QUO QUA VIA ALDO MORO,19 PAPEROPOLI CODICE ABI/CAB ORDINANTE: 12345/67890 20110081293 OBOLO - BONIF. VS. FAV."<br><br><br> <br><br><br> <br><br><br>Dal testo devo estrarre solo quello che inizia per 2011 fino al primo spazio.<br><br><br>Ovviamente, all'interno del testo i caratteri da estrarre non stanno mai nella stessa posizione.<br><br><br> <br><br><br>Si può fare?? E come???<br><br><br> <br><br><br>Grazie 1.000 <br> ---
Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-10-12T14:16:17+00:00

Probabilmente ho interpretato male l'esempio di Lucia.

I dati risiedono in un'unica cella o sono 2 celle separate?

David

I dati così come sono inseriti sono un bel pasticcio(eufemismo). Ci si deve basare su presupposti che non hanno nessun senso. Se abbiamo un qualsiasi 2011 ad inizio parola nel testo, anche la mia UDF potrebbe non essere valida. Diciamo che potremmo cntrollare il numero di caratteri nella parola(almeno nella UDF):

Public Function f(ByVal v As Variant, ByVal lAnno As Long) As String

     Dim s() As String

     Dim lng As Long

     v = Replace(v, """", "")

     s() = Split(v, " ")

     f = ""

     For lng = 0 To UBound(s)

         If Mid(s(lng), 1, 4) = lAnno And Len(s(lng)) = 11 Then

             f = s(lng)

             Exit For

         End If

     Next

 End Function

Questo, sempre che Lucia voglia estrarre quello che sembra un codice: 20110213695

Proporrei comunque una lunga e dolorosa tortura per chi inserisce simili cose in una cella di Excel nell'anno di grazia 2011...;-)

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-10-12T13:10:57+00:00

Ciao

rieccomi qua...

In un foglio excel una colonna contiene testo valorizzato (per esempio):

 

 

"BONIFICO DA PIPPO PLUTO & PAPERINA"  "20110213695 - BONIF. VS. FAV."<br><br><br><br><br><br><br> "YY05102011 TOPOLINO QUI QUO QUA VIA ALDO MORO,19 PAPEROPOLI CODICE ABI/CAB ORDINANTE: 12345/67890 20110081293 OBOLO - BONIF. VS. FAV."<br><br><br> <br><br><br> <br><br><br>Dal testo devo estrarre solo quello che inizia per 2011 fino al primo spazio.<br><br><br>Ovviamente, all'interno del testo i caratteri da estrarre non stanno mai nella stessa posizione.<br><br><br> <br><br><br>Si può fare?? E come???<br><br><br> <br><br><br>Grazie 1.000 <br> ---

 La cosa più semplice è una UDF(User Difined Function). In base al testo che hai postato, la UDF è questa:

Public Function f(ByVal v As Variant) As String

    Dim s() As String

    Dim lng As Long

    v = Replace(v, """", "")

    s() = Split(v, " ")

    f = ""

    For lng = 0 To UBound(s)

        If Mid(s(lng), 1, 4) = 2011 Then

            f = s(lng)

            Exit For

        End If

    Next

End Function

Devi copia/incollarla in un modulo standard. Per fare questo:

  1. Premi ALT+F11(premili assieme) e ti trovi nell'editor del vb di Excel
  2. Inserisci-->Modulo
  3. Copia/incolla la funzione nel foglio bianco(modulo)
  4. ALT+F11 e torni in Excel lato celle

Adesso, mettiamo tu abbia la stringa in A1 e voglia estrarre in B1.

B1: =f(A1)

Se poi vuoi avere il dato e non la funzione in B1, seleziona la cella, Copia, Incolla speciale e seleziona valori.

Ovviamente puoi trascinare in basso la funzione(B2, B3, ecc) come qualsiasi altra funzione di Excel.

Se non hai mai utilizzato il vb di Excel, vedi qui: http://www.maurogsc.eu/excel/xlsdoveinserirecodice.aspx

NOTA. La funzione si potrebbe migliorare inserendo come secondo parametro l'anno da cercare:

Public Function f(ByVal v As Variant, ByVal lAnno As Long) As String

    Dim s() As String

    Dim lng As Long

    v = Replace(v, """", "")

    s() = Split(v, " ")

    f = ""

    For lng = 0 To UBound(s)

        If Mid(s(lng), 1, 4) = lAnno Then

            f = s(lng)

            Exit For

        End If

    Next

End Function

In questo caso:

B1: =f(A1;2011)

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-10-13T07:59:29+00:00

    FANTASTICO!!!

    Funziona!!!

    Grazie.

    Lucia

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-10-13T07:58:10+00:00

    Mi sono espressa male io...

    sono due celle sotto la stessa colonna.

    Adesso provo la soluzione di David perchè... ehm... cos'è una UDF???

     

    Vi faccio sapere fra pochi minuti.

     

    Intanto, GRAZIE!

    Come utilizzare il codice che ho postato è spiegato nel mio post. La soluzione di David, così com'è, porta ad errori.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-10-13T07:26:12+00:00

    Mi sono espressa male io...

    sono due celle sotto la stessa colonna.

    Adesso provo la soluzione di David perchè... ehm... cos'è una UDF???

    Vi faccio sapere fra pochi minuti.

    Intanto, GRAZIE!

    La risposta è stata utile?

    0 commenti Nessun commento