View Full Version : Excel: leggi, confronta, esprimi le differenze...
Gannjunior
16-06-2009, 20:33
Ciao,
nel titolo ho piu o meno riassunto la funzione che mi servirebbe.
problema: due colonne affiancate con dei nomi (composti anche da piu parole). Vorrei costruire una funzione che mi legga i dati di una colonna e dell'altra. Li confronti. E mi evidenzi in ciascuna colonna le differenze (magari con colori differenti). Cioè deve evidenziare nella prima colonna quello che non è contenuto nella seconda. Idem dall'altra parte.
Cioè
COLONNA 1 COLONNA 2
a a
b g
c c
d f
e e
.... ......
In pratica voglio che la funzione nella colonna 1 mi evidenzi b, d che non ci sono nella colonna2. E che nella colonna2 mi evidenzi g ed f che non sono contenuti nella colonna1.
Spero di essere stato chiaro.
Riuscite ad aiutarmi?
Grazie!
prova ad usare questa macro
Sub Differenze()
Dim col_a As Integer
Dim col_b As Integer
range("a1:a15").Interior.ColorIndex = 3
range("b1:b15").Interior.ColorIndex = 4
For col_a = 1 To 15
For col_b = 1 To 15
Set curcell_a = Worksheets("Sheet1").Cells(col_a, 1)
Set curcell_b = Worksheets("Sheet1").Cells(col_b, 2)
If curcell_b.Text = curcell_a.Text Then curcell_b.Interior.ColorIndex = 2
Next col_b
Next col_a
For col_b = 1 To 15
For col_a = 1 To 15
Set curcell_a = Worksheets("Sheet1").Cells(col_a, 1)
Set curcell_b = Worksheets("Sheet1").Cells(col_b, 2)
If curcell_a.Text = curcell_b.Text Then curcell_a.Interior.ColorIndex = 2
Next col_a
Next col_b
End Sub
Gannjunior
17-06-2009, 00:06
ciao!!
grazie della risposta intanto!
la sto provando, mi da errore alla riga 9.
john_revelator
17-06-2009, 00:13
Non ho provato la macro di zuper (che saluto :) ) ma io la risolverei con un semplice conta.se
Sub Differenze()
Dim cella As Range
Dim contaSE As Integer
Range("a1:b10").Interior.ColorIndex = xlNone
For Each cella In Range("a1:a10")
contaSE = Application.WorksheetFunction.CountIf(Range("b1:b10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 3
End If
Next cella
For Each cella In Range("b1:b10")
contaSE = Application.WorksheetFunction.CountIf(Range("a1:a10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 4
End If
Next cella
End Sub
Gannjunior
17-06-2009, 00:24
grazie anche a te john!
l'ho provata funziona!!
scusate ragazzi ma se volessi imparare un pochino a tradurre ciò che voglio fare in questo linguaggio e farlo come avete fatto voi come posso fare?
grazie!!
john_revelator
17-06-2009, 00:29
IMHO per iniziare la cosa migliore da fare è svolgere normalmente le azioni che fai su excel e tramite il registratore di macro osservare il codice che viene generato. In questo modo impari i nomi dei metodi, delle proprietà, eccetera. Poi se fai una ricerca su google usando come chiave di ricerca "excel vba" trovi materiale a iosa.
Inoltre non puoi fare a meno dell'msdn della microsoft
http://msdn.microsoft.com/en-us/library/dd627239.aspx
:)
ciao!!
grazie della risposta intanto!
la sto provando, mi da errore alla riga 9.
beh nella riga 9 c'è specificato il foglio di lavoro...il mio era sheet1..lo standard in inglese....dovevi solo adattarlo :)
Non ho provato la macro di zuper (che saluto :) ) ma io la risolverei con un semplice conta.se
Sub Differenze()
Dim cella As Range
Dim contaSE As Integer
Range("a1:b10").Interior.ColorIndex = xlNone
For Each cella In Range("a1:a10")
contaSE = Application.WorksheetFunction.CountIf(Range("b1:b10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 3
End If
Next cella
For Each cella In Range("b1:b10")
contaSE = Application.WorksheetFunction.CountIf(Range("a1:a10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 4
End If
Next cella
End Sub
ehehehe ricambio il saluto :)
come molte volte capita in excel ci sono + soluzioni per molti dei problemi...dipende solo da quella che si pensa prima...e molte volte nn si pensa alla + semplice...come in questo caso il contase :D
Gannjunior
17-06-2009, 09:00
ok zuper, funziona adesso!
però ho un problema ragazzi. la vostra funzione di fatto fa questo: se la a25 è diversa dalla b25 allora lo segnala. in realtà deve verificare se l'esatto contenuto della cella a25 è contenuto nell'altra colonna, a prescindere dal fatto che si trovi o meno in b25. Quindi devo anche poter confrontare una colonna1 lunga che so 100 contro una colonna2 lunga 105...
Fatemi sapere, grazie! :)
ok zuper, funziona adesso!
però ho un problema ragazzi. la vostra funzione di fatto fa questo: se la a25 è diversa dalla b25 allora lo segnala. in realtà deve verificare se l'esatto contenuto della cella a25 è contenuto nell'altra colonna, a prescindere dal fatto che si trovi o meno in b25. Quindi devo anche poter confrontare una colonna1 lunga che so 100 contro una colonna2 lunga 105...
Fatemi sapere, grazie! :)
ho dato una letta veloce alla macro di john e credo che il "problema" sia lo stesso della mia:
abbiamo usato come RANGE a1:a10 e b1:b10
con la mia, ma mi pare di vedere anche con la sua, devi solo modificare questo range fino a dove vuoi! :) nella mia devi anche modificare:
For col_a = 1 To 15 e tutti gli altri chiaramente fino al numero che + ti aggrada ;)
la mia fa un check di ogni singola cella della colonna a con tutte le celle della colonna b e viceversa, quindi indipendentemente dal fatto che a25 sia in b25 e così via.
quella di john esegue un banale contase...quindi anche la sua le controlla tutte :)
Non ho provato la macro di zuper (che saluto :) ) ma io la risolverei con un semplice conta.se
Sub Differenze()
Dim cella As Range
Dim contaSE As Integer
Range("a1:b10").Interior.ColorIndex = xlNone
For Each cella In Range("a1:a10")
contaSE = Application.WorksheetFunction.CountIf(Range("b1:b10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 3
End If
Next cella
For Each cella In Range("b1:b10")
contaSE = Application.WorksheetFunction.CountIf(Range("a1:a10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 4
End If
Next cella
End Sub
sorry john :D:D
stavo provando la tua macro per curiosità e ho visto che fa i check anche sulle celle vuote :D:D
e mi PERMETTO di fare una piccolissima aggiunta :D
Sub Differenze()
Dim cella As Range
Dim contaSE As Integer
Range("a1:b10").Interior.ColorIndex = xlNone
For Each cella In Range("a1:a10")
If cella.Value <> "" Then
contaSE = Application.WorksheetFunction.CountIf(Range("b1:b10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 3
End If
End If
Next cella
For Each cella In Range("b1:b10")
If cella.Value <> "" Then
contaSE = Application.WorksheetFunction.CountIf(Range("a1:a10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 4
End If
End If
Next cella
End Sub
john_revelator
17-06-2009, 11:03
sorry john :D:D
stavo provando la tua macro per curiosità e ho visto che fa i check anche sulle celle vuote :D:D
e mi PERMETTO di fare una piccolissima aggiunta :D
Sub Differenze()
Dim cella As Range
Dim contaSE As Integer
Range("a1:b10").Interior.ColorIndex = xlNone
For Each cella In Range("a1:a10")
If cella.Value <> "" Then
contaSE = Application.WorksheetFunction.CountIf(Range("b1:b10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 3
End If
End If
Next cella
For Each cella In Range("b1:b10")
If cella.Value <> "" Then
contaSE = Application.WorksheetFunction.CountIf(Range("a1:a10"), cella.Value)
If contaSE = 0 Then
cella.Interior.ColorIndex = 4
End If
End If
Next cella
End Sub
Non avevo considerato quell'eventualità. Giusta osservazione. ;)
Ciao,
nel titolo ho piu o meno riassunto la funzione che mi servirebbe.
problema: due colonne affiancate con dei nomi (composti anche da piu parole). Vorrei costruire una funzione che mi legga i dati di una colonna e dell'altra. Li confronti. E mi evidenzi in ciascuna colonna le differenze (magari con colori differenti). Cioè deve evidenziare nella prima colonna quello che non è contenuto nella seconda. Idem dall'altra parte.
Cioè
COLONNA 1 COLONNA 2
a a
b g
c c
d f
e e
.... ......
In pratica voglio che la funzione nella colonna 1 mi evidenzi b, d che non ci sono nella colonna2. E che nella colonna2 mi evidenzi g ed f che non sono contenuti nella colonna1.
...
Il problema si può risolvere con la formattazione condizionale:
- seleziona l'intervallo di colonna 1 da controllare
- dalla barra dei menù seleziona Formato>Formattazione condizionale>La formula è
- nella casella di testo insersci questa formula adattanto ovviamente i riferimenti alle tue esigenze:
=CONTA.SE($B$1:$B$7;$A1)
-scegli la formattazione, per es. carattere rosso, e dai l'ok
tutte le parole di colonna 1 contenute in colonna 2 diventeranno rosse
seleziona l'intervallo di colonna 2 che ti interessa e fa lo stesso, ovviamente la formula ora sarà:
=CONTA.SE($A$1:$A$7;$B1)
Ciao
Il problema si può risolvere con la formattazione condizionale:
- seleziona l'intervallo di colonna 1 da controllare
- dalla barra dei menù seleziona Formato>Formattazione condizionale>La formula è
- nella casella di testo insersci questa formula adattanto ovviamente i riferimenti alle tue esigenze:
=CONTA.SE($B$1:$B$7;$A1)
-scegli la formattazione, per es. carattere rosso, e dai l'ok
tutte le parole di colonna 1 contenute in colonna 2 diventeranno rosse
seleziona l'intervallo di colonna 2 che ti interessa e fa lo stesso, ovviamente la formula ora sarà:
=CONTA.SE($A$1:$A$7;$B1)
Ciao
sembra ok ;)
la provo! :D
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.