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-12T13:53:40+00:00

    Concordo totalmente con te. Probabilmente ho interpretato male l'esempio di Lucia.

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

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-10-12T13:48:17+00:00

    Oltre che con la funzione di Mauro, potresti provare anche con una formula del tipo

    =STRINGA.ESTRAI(A1;TROVA("2011";A1);TROVA(" ";A1;TROVA("2011";A1))-TROVA("2011";A1))

    Quello che però non hai chiarito è se ti interessa solo la prima occorrenza di "2011" o tutte le occorrenze, quindi nel tuo esempio:

    20110213695 e 20110081293.

    Nel qual caso basterebbe una piccolissima modifica alla UDF di Mauro (che lascio per paternità a lui) per ottenere entrambi i valori.

     

    David

     

    Io credo siano 2 distinte stringhe. Nel qual caso. la tua funzione ritorna *solo* il primo 2011 per la seconda stringa

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-10-12T13:41:46+00:00

    Oltre che con la funzione di Mauro, potresti provare anche con una formula del tipo

    =STRINGA.ESTRAI(A1;TROVA("2011";A1);TROVA(" ";A1;TROVA("2011";A1))-TROVA("2011";A1))

    Quello che però non hai chiarito è se ti interessa solo la prima occorrenza di "2011" o tutte le occorrenze, quindi nel tuo esempio:

    20110213695 e 20110081293.

    Nel qual caso basterebbe una piccolissima modifica alla UDF di Mauro (che lascio per paternità a lui) per ottenere entrambi i valori.

    David

    La risposta è stata utile?

    0 commenti Nessun commento