Due domande:
le righe sono ordinate sulla colonna B e/o sulla A?
In altre parole per cercare un eventuale duplicato della riga in esame bisogna esplorare ogni volta tutte le righe o basta controllare il record seguente/precedente?
Ti serve proprio che le righe vengano eliminate o va bene anche una copia delle sole righe "buone" su un altro foglio?
Questo te lo chiedo perché ogni volta che ho provato ad eliminare righe durante un ciclo di esplorazione delle stesse righe ho incontrato dei grossi problemi.
Adesso non ho il tempo di scriverti una soluzione completa ma visto che dici che con VBA un po' sai muoverti, provo a darti uno spunto.
Prima di tutto serve un ciclo di esplorazione della colonna A che, al suo interno, si chieda se la riga in esame è una R o altro.
Se non è una R la riga va semplicemente copiata in un altro foglio, altrimenti bisogna innescare un altro ciclo che cerchi nella colonna B il valore presente nella cella B della riga in esame.
Questo secondo ciclo si potre evitare se le righe fossero ordinate perché allora si potrebbe puntare direttamente alla cella con Offset maggiore o minore di 1.
Se il secondo ciclo (o la Offset) trova la riga non si fa niente (in modo che la riga R non venga copiata sull'altro foglio) altrimenti bisogna copiare anche la riga R.
Ovviamente serve una variabile che tenga traccia del punto a cui si è arrivati con la scrittura sul secondo foglio.
Ti butto giù un po' di codice ma tieni presente che è solo un abbozzo non testato:
codice:
' inizializzo la riga di destinazione sul foglio2
riga_dest = 0
' Esplorazione della colonna A
For each cella_a in range("a1:a1000")
' Se la cella in esame non contiene R, la riga va copiata nella posizione riga_dest + 1 (colonna 1)
if cella_a <> "R" then
riga_dest = riga_dest + 1
rows(cella_a.row).copy destination:=worksheets("Foglio2").cells(riga_dest,1)
else
' Se invece contiene R bisogna esplorare tutta la colonna B (se sono ordinate questa parte la puoi semplificare molto)
' inizializzazione del flag
trovata = false
' ciclo sulla colonna B
for each cella _b in range("b1:b1000")
' cells(cella_a.row , 2) indica la cella B della riga in esame cioè di quella puntata da cella_a
if cells(cella_a.row , 2) = cella_b and cella_a.row <> cella_b.row then
trovata = true
exit for
end if
next
' se il valore non è stato trovato si scrive la riga R sul foglio 2
if not trovata
riga_dest = riga_dest + 1
rows(cella_a.row).copy destination:=worksheets("Foglio2").cells(riga_dest,1)
end if
end if
next
Sicuramente ho dimenticato qualcosa ma è solo una traccia, fammi sapere se riesci ad andare avanti.
Ciao