| | Post: 6 | Registrato il: 24/01/2018
| Città: MILANO | Età: 46 | Utente Junior | 2010/13/16 | | OFFLINE | |
|
24/08/2018 09:50 | |
Salve a tutti,
mi chiedevo se, in excel, fosse possibile fare come segue
1. confrontare il contenuto di due celle
2. evidenziare le parti che differiscono tra le due celle
esempio
cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE
risultato:
cella1: 20180505 MarioRossiSI 50euro
cella2: 20180505 StefanoRossiSI 80euro DARE
ho usato il grassetto come esempio, ma se evidenzia o cambia colore o mette in corsivo andrebbe bene tutto...basta che mi evidenzia le differenze a colpo d'occhio
mille grazie a chi mi può dare una mano!!!! [Modificato da PamelinaPammyP 24/08/2018 09:50] |
|
| | Post: 3.855 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
24/08/2018 11:55 | |
Ciao Pamelina
Se i dati sono come li hai esposti la vedo piuttosto dura perchè Excel non è in grado di determinare (autonomamente) dove inizia o finisce un numero o una parola.
Se i numeri/parole fossero separati da uno spazio (o altro carattere) potrebbe essere relativamente più semplice.
Alfredo |
| | Post: 3.856 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
24/08/2018 15:04 | |
Ora sono fuori e non ho un pc ma se quando rientro dovesse venirmi qualche idea te la partecipo.
Alfredo |
| | Post: 4.116 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
25/08/2018 12:07 | |
Confermo quanto detto da alfrimpa, occorre partire da dati strutturati
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 3.857 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
25/08/2018 12:19 | |
Andrea forse (e ripeto forse) con le RegExp si potrebbe far qualcosa ma, per quanto mi riguarda, queste non sono pane per i miei denti.
Alfredo |
| | Post: 1.182 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
27/08/2018 07:09 | |
PamelinaPammyP, 8/24/2018 9:50 AM:
1. confrontare il contenuto di due celle
2. evidenziare le parti che differiscono tra le due celle
esempio
cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE
risultato:
cella1: 20180505MarioRossiSI50euro
cella2: 20180505StefanoRossiSI80euroDARE
Ciao a tutti
nel Tuo esempio, "potrebbe" essere relativamente semplice...
Ma se le celle da confrontare fossero 3 o più di 3 come presumo,
rispetto a quale parametro dovrebbe essere effettuato il confronto:
un modello fisso?
la cella precedente?
la cella successiva?
una cella a caso?
Oltre a quanto ti hanno già consigliato:
riformula meglio la richiesta
allega un file con dati di fantasia e con la stessa struttura di quello su cui devi lavorare.
Ciao
Frank
[Modificato da tanimon 27/08/2018 07:18]
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 6 | Registrato il: 24/01/2018
| Città: MILANO | Età: 46 | Utente Junior | 2010/13/16 | | OFFLINE | |
|
28/08/2018 16:55 | |
grazie a tutti per le risposte
(scusate il ritardo ma sono stata male )
allego un file che spiega cosa mi aspetto:
1. si parte dal foglio originale che va lasciato così com'è
2. nel foglio elaborato ci dovrebbe essere la macro
3. la macro confronta il contenuto di due celle vicine (per poi passare alla riga successiva, sempre 2 celle per volta sulla stessa riga) evidenziando le lettere comuni, come ho fatto io in rosso
evidenziare ogni lettera comune sarebbe il top
evidenziare finchè le stringhe coincidono sarebbe comunque apprezzato
non posso fare ipotesi su lunghezza o posizione di lettere e/o numeri
ho letto qualcosa sulla funzione InStr( [start], string, substring, [compare] ) ... potrebbe fare al caso mio?
grazie mille a chi mi vorrà aiutare
[Modificato da PamelinaPammyP 28/08/2018 16:56] |
| | Post: 3.863 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/08/2018 14:45 | |
Ciao Pamenlina
Non sono per nulla sicuro di aver centrato l'obiettivo (anzi ne sono certo) comunque prova questa macro (che non so neanch'io come sia potuta venir fuori) sul foglio "Originale" del tuo file.
vb Sub prova()
Dim i As Integer
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, 3).End(xlUp).Row
Set rng = Range("C2:c" & ur)
For Each cel In rng
For i = 1 To Len(cel.Value)
If InStr(1, cel.Offset(0, -1).Value, Mid(cel.Value, i, 1)) <> 0 Then
cel.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
End If
Next i
Next cel
End Sub
In pratica ogni lettera del contenuto di ogni cella in colonna C (da C2 all'ultima cella piena) viene ricercata nella corrispondente cella in colonna B e se trovata viene colorata di rosso.
Fai sapere anche se credo di aver esaurito le risorse [Modificato da alfrimpa 29/08/2018 15:03]
Alfredo |
| | Post: 7 | Registrato il: 24/01/2018
| Città: MILANO | Età: 46 | Utente Junior | 2010/13/16 | | OFFLINE | |
|
29/08/2018 17:44 | |
alfrimpa, 29/08/2018 14.45:
Ciao Pamenlina
Non sono per nulla sicuro di aver centrato l'obiettivo (anzi ne sono certo) comunque prova questa macro (che non so neanch'io come sia potuta venir fuori) sul foglio "Originale" del tuo file.
vb Sub prova()
Dim i As Integer
Dim ur As Long
Dim rng As Range
Dim cel As Range
ur = Cells(Rows.Count, 3).End(xlUp).Row
Set rng = Range("C2:c" & ur)
For Each cel In rng
For i = 1 To Len(cel.Value)
If InStr(1, cel.Offset(0, -1).Value, Mid(cel.Value, i, 1)) <> 0 Then
cel.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
End If
Next i
Next cel
End Sub
In pratica ogni lettera del contenuto di ogni cella in colonna C (da C2 all'ultima cella piena) viene ricercata nella corrispondente cella in colonna B e se trovata viene colorata di rosso.
Fai sapere anche se credo di aver esaurito le risorse
intanto grazie mille!!!
ti chiederei un favore, mi puoi commentare le righe illustrando quello che fanno? così inizio a studiarci un po' sopra
|
| | Post: 3.864 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/08/2018 18:07 | |
Ciao Pamelina provo a spiegare anche se poi comunque tu dovrai approfondire i concetti.
Con questo codice dichiaro le variabili necessarie
vb Dim i As Integer
Dim ur As Long
Dim rng As Range
Dim cel As Range
con questo codice memorizzo nella variabile ur (ultima riga) il numero di riga dell'ultima cella piena della colonna C
vb ur = Cells(Rows.Count, 3).End(xlUp).Row
Imposto l'intervallo da elaborare che va da C2 sino all'ultima cella piena della colonna C.
vb Set rng = Range("C2:c" & ur)
Inizio un primo ciclo For Each che passa in rassegna ogni cella dell'intervallo rng
Inizio un altro ciclo For che esamina ogni carattere del contenuto della cella del precedente ciclo
vb For i = 1 To Len(cel.Value)
Con queste istruzioni dico che se ogni singolo carattere della cella è contenuto nella rispettiva cella in colonna B allora me lo colori di rosso
vb If InStr(1, cel.Offset(0, -1).Value, Mid(cel.Value, i, 1)) <> 0 Then
cel.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
End If
Chiudiamo i due cicli
si chiude la macro
Spero di essere stato chiaro ma credo che queste delucidazioni siano solo uno spunto.
Quello che ti consiglio di fare è approfondire i concetti:
1) variabili e loro tipi
2) cicli For (For i, For Each)
3) istruzione InStr()
L'istruzione Instr() cerca una stringa all'interno di un'altra e se la trova restituisce il numero di posizione.
Esempio se scrivo
vb
Instr(1, "Pamelina", "m")
Instr() mi restituirà 3 perché "m" è il terzo carattere di Pamelina a partire dall'inizio.
Ma poi la macro funziona?
[Modificato da alfrimpa 29/08/2018 18:43]
Alfredo |
| | Post: 1.184 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
30/08/2018 13:21 | |
PamelinaPammyP, 8/28/2018 4:55 PM:
3. la macro confronta il contenuto di due celle vicine (per poi passare alla riga successiva, sempre 2 celle per volta sulla stessa riga) evidenziando le lettere comuni, come ho fatto io in rosso
evidenziare ogni lettera comune sarebbe il top
evidenziare finchè le stringhe coincidono sarebbe comunque apprezzato
Ciao a tutti
ed un salto ad Alfredo
L'ho fatto e lo allego.
Ciao
Pamela, ci dovremmo essere, controlla e fai sapere.
Option Explicit
Sub confronta_ed_evidenzia()
Dim r As Long, n As Long
Dim parola As String, stringa As String, cercato As String
Dim test1 As Boolean, test2 As Boolean
Dim rng As Range, rng1 As Range
Dim ur As Long, ur1 As Long
Dim cellaA As Range, cellaB As Range
ur = Cells(Rows.Count, "e").End(xlUp).Row
ur1 = Cells(Rows.Count, "f").End(xlUp).Row
Application.ScreenUpdating = False
Set rng = Range("e2:e" & ur)
Set rng1 = Range("f2:f" & ur1)
For Each cellaA In rng
parola = cellaA.Value
stringa = cellaA.Offset(0, 1).Value
For r = 1 To Len(parola)
cercato = Mid(parola, r, 1)
test1 = stringa Like "*" & cercato & "*"
If test1 = True Then
'===============================================================
'Per questa riga ringrazio Alfredo: non la conoscevo. LOL
cellaA.Characters(Start:=r, Length:=1).Font.ColorIndex = 3
cellaA.Characters(Start:=r, Length:=1).Font.Bold = True
'===============================================================
End If
Next r
Next cellaA
For Each cellaB In rng1
parola = cellaB.Value
stringa = cellaB.Offset(0, -1).Value
For n = 1 To Len(parola)
cercato = Mid(parola, n, 1)
test2 = stringa Like "*" & cercato & "*"
If test2 = True Then
'===============================================================
'Per questa riga ringrazio Alfredo: non la conoscevo. LOL
cellaB.Characters(Start:=n, Length:=1).Font.ColorIndex = 3
cellaB.Characters(Start:=n, Length:=1).Font.Bold = True
'===============================================================
End If
Next n
Next cellaB
Set rng = Nothing
Set rng1 = Nothing
Application.ScreenUpdating = True
End Sub
Ciao
Frank
EDIT: avevo dimenticato l'allegato.
RE- EDIT per l'inserimento del codice nel Tag Code [Modificato da tanimon 30/08/2018 18:56]
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 3.865 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
30/08/2018 14:27 | |
I miei più vivi complimenti Frank.
Un saluto.
Alfredo |
| | Post: 1.185 | Registrato il: 27/06/2011
| Utente Veteran | excel 2007 | | OFFLINE |
|
30/08/2018 18:43 | |
ciao Alfredo,
grazie, prima o poi ci sarei arrivato anche senza il tuo suggerimento ed avevo già predisposto quanto necessario ma lavorando, il tempo che mi rimane è veramente poco e per risolvere avrei fatto il giro del mondo in 2000 giorni.....
Quella istruzione mi ha risolto un problema che credevo fosse circolare
Grande
Ciao
Frank
Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future... |
| | Post: 8 | Registrato il: 24/01/2018
| Città: MILANO | Età: 46 | Utente Junior | 2010/13/16 | | OFFLINE | |
|
09/09/2018 09:30 | |
|
|
|