Usiamo colonna B come appoggio; se i dati cominciano da A2, allora in B2 usiamo:
- Codice: Seleziona tutto
=STRINGA.ESTRAI(SOSTITUISCI(A2;"BONIFICO A VS FAVORE ";"");SE(SINISTRA(A2;24)="BONIFICO A VS FAVORE DA ";4;1);99
Questa ci restituisce la stringa che parte dopo BONIFICO A VS FAVORE (DA).
Copia eventualmente verso il basso
Se vuoi estrarre fermandoti al secondo spazio, allora in C2 puoi usare
- Codice: Seleziona tutto
=SINISTRA(B2;TROVA("#";SOSTITUISCI(B2&" 1:1";" ";"#";2)))
Copia eventualmente verso il basso
Se vuoi evitare la colonna di appoggio, "basta" integrare la prima formula nella seconda, cioe':
- Codice: Seleziona tutto
=SINISTRA(STRINGA.ESTRAI(SOSTITUISCI(A2;"BONIFICO A VS FAVORE ";"");SE(SINISTRA(A2;24)="BONIFICO A VS FAVORE DA ";4;1);99);TROVA("#";SOSTITUISCI(STRINGA.ESTRAI(SOSTITUISCI(A2;"BONIFICO A VS FAVORE ";"");SE(SINISTRA(A2;24)="BONIFICO A VS FAVORE DA ";4;1);99)&" 1:1";" ";"#";2)))
E cosi' avrai coperto la maggioranza dei casi, ma ben lontano dal 100%
Andrebbe meglio se nel testo ci fosse una qualche parola chiave, tipo " BONIFICO A VS FAVORE DA MARIO ROSSI
DI EURO E POI UNA SERIE DI INFORMAZIONI"
In questo caso, con la colonna, di appoggio potresti usare:
- Codice: Seleziona tutto
=SINISTRA(B2;SE.ERRORE(TROVA("DI EURO";B2)-1;TROVA("#";SOSTITUISCI(B2&" ";" ";"#";2))))
(nota che ho previsto che in caso di mancanza della stringa "DI EURO" venga usato il secondo spazio)
E senza la colonna di appoggio:
- Codice: Seleziona tutto
=SINISTRA(STRINGA.ESTRAI(SOSTITUISCI(A2;"BONIFICO A VS FAVORE ";"");SE(SINISTRA(A2;24)="BONIFICO A VS FAVORE DA ";4;1);99);SE.ERRORE(TROVA("DI EURO";STRINGA.ESTRAI(SOSTITUISCI(A2;"BONIFICO A VS FAVORE ";"");SE(SINISTRA(A2;24)="BONIFICO A VS FAVORE DA ";4;1);99))-1;TROVA("#";SOSTITUISCI(STRINGA.ESTRAI(SOSTITUISCI(A2;"BONIFICO A VS FAVORE ";"");SE(SINISTRA(A2;24)="BONIFICO A VS FAVORE DA ";4;1);99)&" ";" ";"#";2))))
Con una "Funzione Utente" la cosa forse diventa piu' semplice. Ad esempio, metti questo codice in un modulo standard del tuo Progetto VBA:
- Codice: Seleziona tutto
Function DaChi(ByVal RStr As String, Optional ETipo As Variant = 0) As String
Dim wStr As String
'ETipo=0, si ferma al secondo spazio dopo il presunto Nome Cognome
'ETipo=1, estrae tutto da Nome Cognome
'ETipo="xyz", estrae da Nome Cognome fino alla stringa XYZ, o fino al secondo spazio se mancante
'
wStr = Replace(RStr, "BONIFICO A VS FAVORE ", "", , , vbTextCompare)
If UCase(Left(wStr, "3")) = "DA " Then wStr = Mid(wStr, 4)
If Len(ETipo) > 1 Then
sstr = InStr(1, wStr, ETipo, vbTextCompare)
If sstr = 0 Then ETipo = 0
End If
If ETipo = 0 Then
sstr = InStrRev(Replace(wStr, " ", "#", , 2, vbTextCompare), "#", , vbTextCompare)
If sstr = 0 Then sstr = 999
DaChi = Left(wStr, sstr - 1)
ElseIf ETipo = 1 Then
DaChi = Left(wStr, 999)
ElseIf Len(ETipo) > 0 Then
sstr = InStr(1, wStr, ETipo, vbTextCompare)
DaChi = Trim(Left(wStr, sstr - 1))
End If
End Function
Poi torna su Excel dove potrai usare formule del tipo
- Codice: Seleziona tutto
=DaChi(A2)
=DaChi(A2;1)
=DaChi(A2;"Euro")
La prima restituisce solo le prime due parole dopo "BONIFICO A VS FAVORE (DA)"
La seconda resituisce come prima ma fino alla fine della stringa di origine
La terza restituisce come la prima ma si ferma quando trova la parola "Euro" (o qualsiasi altra che inserirai nella formula), oppure solo le prime due parole se non trova tale stringa.
Vedi tu...