Excel - Confrontare il contenuto di due celle con LIke

Asked By archimede.i on 04-Feb-12 10:10 AM
Ciao a Tutti,
rieccomi con un piccolo problemino!
Vorrei confrontare il contenuto di due celle ,entrambe contengono lo
stesso nominativo ma talvolta pu=F2 capitare che tra cognome e nome
venga inserito un Alt e Invio da tastiera per ragioni estetiche.
Per cui ho la prima cella:
ROSSI GIOVANNI
e la seconda cella
ROSSI (ALT + INVIO)
GIOVANNI

Il nominativo =E8 chiaramente identico ma Like non la pensa allo stesso
modo ! E anche Len concorda ! Infatti vba vede il primo nome come
ROSSI GIOVANNI ma il secondo lo vede come ROSSIGIOVANNI

Sub CONFRONTA_2_STRINGHE()
Rows(1).Delete
Cells(1, 1) =3D "ROSSI GIOVANNI"
Cells(1, 2) =3D "ROSSI" & vbNewLine & "GIOVANNI"   'simulo alt + invio

MsgBox Cells(1, 1) Like Cells(1, 2)  'risp  FALSO
End Sub

Tutte e due le celle contengono lo stesso nominativo ma con
formattazioni diverse, pertanto secondo Voi c'=E8 la possibilit=E0 di
confrontare il vero contenuto delle celle dimenticandosi eventuale
formattazione presente?
La domanda =E8 a carattere generico, non voglio risolvere questo
particolare problema con il nome perch=E8 avrei gi=E0 trovato delle
soluzioni, il mio obiettivo era di capire come confrontare due celle
che contengono testo e vedere se il testo =E8 identico, aldil=E0 del fatto
che uno ci abbia messo 1 o 2 alt invio.

Grazie e a presto ! Ciao Ciao


eliano replied to archimede.i on 04-Feb-12 11:29 AM
o

Ciao Archimedes.
Non e' molto chiaro, ma se il problema riguarda solo ALT+Invio, prova:
=3DSOSTITUISCI(A1;CODICE.CARATT(10);" ")
Ma se invece riguardasse anche solo DUE Blank o altri caratteri non
stampabili (ce ne sono una trentina) ??
Prova la formula e poi facci sapere.
Saluti
Eliano
eliano replied to eliano on 04-Feb-12 03:04 PM
o
tto


Archimedes,il silenzio e' d'oro.:-))
Tanto per farti un'idea, a meno che tu non l'abbia gia':

Apri un nuovo file Excel.
in A1:A255	=3DCODICE.CARATT(RIF.RIGA())
in B1:B255	=3DCODICE(A1)
e dovresti avere tutti i caratteri ASCII. Osservali.

Alcune considerazioni:

Codice 32	E' lo spazio. Intoccabile salvo necessita'.:-))

Finestrine	Sono tutti caratteri non stampabili

Codice 160   E' il piu' malefico di tutti; non lo vedi ma c'e'!
Sporadici:   In certi casi, anche da 127 in giu' (rari)

Se hai le idee piu' chiare, poi passiamo al Vba.

Saluti
Eliano
archimede.i replied to eliano on 04-Feb-12 07:06 PM
Ciao Eliano
e Grazie come sempre della risposta! Non ero a casa ,per questo era
caduto il silenzio dopo la tua risposta!

Anche io avevo trovato delle soluzioni in vba ,ad esempio
Replace(Cells(1, 1), vbNewLine, " ")  oppure Replace(Cells(1, 1),
Chr(13) + Chr(10), " ")
e poi fai il confronto con Like
esempio: MsgBox Replace(Cells(1, 1), vbNewLine, " ") Like
Replace(Cells(1, 2), vbNewLine, " ")
Msgbox Replace(Cells(1, 1), Chr(13) + Chr(10), " ")
Like Replace(Cells(1, 2), Chr(13) + Chr(10), " ")

Diciamo che le soluzioni ci sarebbero e da quanto capisco siamo
arrivati alle stesse soluzioni su strade diverse, pensavo che c'era
qualcosa di diverso di Replace.

Comunque Grazie delle due risposte, adesso almeno mi sono tolto questo
dubbio!
Ciao Ciao
eliano replied to archimede.i on 04-Feb-12 08:17 PM
(10), " ")

OK Archimede, e' la soluzione piu' logica e veloce: sostituire i/il
rompiballe con "" (niente) o con " " (spazio) o con vattelappesca
cosa, secondo i casi.

Altrimenti analizzare carattere per carattere la stringa ed eliminare
il rompiballe nella ricostruzione della stringa, oppure una UDF con
Regexp e Pattern alfabetico  specifico "marcata Roby" (Di queste ne
trovi diversi esempi in archivio), etc etc.
Saluti

Eliano
P.S.
A proposito, credo che per eliminare ALT+Invio basti usare solo
Chr(10). Non posso testarlo, per cui provalo tu e dacci conferma,
grazie.
eliano replied to eliano on 04-Feb-12 08:31 PM
hr(10), " ")

Data l'ora ne ho saltato un pezzo, che aggiungo anche se molto
ovvio.:-))
Se esiste quel o quei caratteri rompiballe non e' detto che tu li
debba eliminare dalle celle per fare il test.
Basta portare i due valori ripuliti in due variabili ed usare il Like
nella comparazione fra loro.
Ciao
Eliano
archimede.i replied to eliano on 04-Feb-12 08:33 PM
Sub TEST_DISTRUGGI_ALT_INVIO()
Rows(1).Delete
Cells(1, 1) =3D "ROSSI" & vbNewLine & "GIOVANNI"

MsgBox Replace(Cells(1, 1), Chr(10), "")
MsgBox Replace(Cells(1, 1), Chr(13), "")
MsgBox Replace(Cells(1, 1), Chr(13) + Chr(10), " ")
End Sub

Lavoro eseguito ma solo  Replace(Cells(1, 1), Chr(13) + Chr(10), " ")
distrugge Alt Invio .

Adesso per=F2 io mi auto distruggo nel letto !
Grazie per la collaborazione , Ciao Ciao
eliano replied to archimede.i on 04-Feb-12 08:36 PM
Grazie a te per il riscontro e buona distruzione.:-))