'versione breve - la puoi inserire in un modulo e lanciarla con Alt-F8
Option Explicit
Sub cerca_trova()
'dichiaro il nome e il tipo delle variabili in gioco
Dim c As Range 'contiene la cella di colonna A se trovata
Dim cella As Range 'variabile contatore di tipo range (per scorrere la colonna C)
'imposto un ciclo nelle celle da C1 a C40
For Each cella In [C1:C40]
'viene cercata (Find) in colonna A la cella corrente del ciclo
'la variabile "c" viene impostata diversamente se la cella viene trovata
Set c = [A:A].Find(what:=cella, LookIn:=xlValues)
'se "c" non risulta valorizzata, la corrispondenza non è stata trovata
If c Is Nothing Then
'...quindi la cella attiva viene tinta di giallo chiaro
cella.Interior.ColorIndex = 36 'giallo chiaro
Else
'...altrimenti la cella che si trova una colonna a destra rispetto alla
'cella di colonna A che è stata trovata uguale alla cella corrente
'in colonna C (A --> B), assume il valore della cella che si trova una colonna a
'destra rispetto alla cella corrente (C --> D)
c.Offset(, 1) = cella.Offset(, 1)
'...e il suo interno viene tinto di rosso
c.Interior.ColorIndex = 3 'rosso
End If
'proseguimento della scansione del range C1:C40
Next
End Sub
'versione lunga - se la associ a un command button, va inserita nella zona codice del foglio
'in cui si trova il command button
'la direttiva che segue è importante, meglio esplicitarla sempre
Option Explicit
Private Sub CommandButton1_Click()
'dichiaro il nome e il tipo delle variabili in gioco
Dim x As Integer 'identifica la riga corrente della colonna C
Dim y As Integer 'identifica la riga corrente della colonna A
Dim bFound As Boolean 'indica se è stata trovata una corrispondenza in C
'avvio un ciclo dalla riga 1 alla riga 40 per la colonna C
For x = 1 To 40
'presumo che non ci sia una corrispondenza tra A e C
bFound = False
'avvio un secondo ciclo per le righe da 1 a 40 della colonna A
'così confronto ogni cella di colonna C con le celle di col. A
For y = 1 To 40
'se la riga x di colonna C corrisponde alla y-esima di col. A...
If Cells(x, "C") = Cells(y, "A") Then
'...nella y-esima riga di colonna B scrivo il valore
'della x-esima riga di colonna D...
Cells(y, "B") = Cells(x, "D")
'...e la cella attuale di colonna A diventa rossa
Cells(y, "A").Interior.ColorIndex = 3 'rosso
'mi tengo segnato che ho trovato una corrispondenza
bFound = True
End If
'proseguo il ciclo y fino ad esaurire le celle di colonna A
Next y
'al termine delle celle di colonna A, s enon è stata trovata
'una corrispondenza, la relativa cella x-esima di colonna C
'viene tinta di giallo chiaro
If Not bFound Then Cells(x, "C").Interior.ColorIndex = 36 'giallo chiaro
'proseguo il ciclo x fino ad esaurire le celle di colonna C
Next x
'messaggio conclusivo
MsgBox "Fatto!"
End Sub
|