Isso faz o que suas perguntas exigem.
Sub ShowStartingPoints()
Dim rowA As Integer
rowA = 1
Do While (Range("A" & rowA).Value <> "")
Dim row As Integer
row = 1
Dim doesValueExitInB As Boolean
doesValueExitInB = False
Dim valueA As String
valueA = Range("A" & rowA).Value
Do While (Range("B" & row).Value <> "")
If (valueA = Range("B" & row).Value) Then
Range("A" & rowA).Value = ""
Range("A" & row).Value = valueA
doesValueExitInB = True
Exit Do
End If
row = row + 1
Loop 'Loops B col
If Not doesValueExitInB Then
Range("C" & rowA) = Range("A" & rowA)
Range("A" & rowA) = ""
Range("C" & rowA).Interior.ColorIndex = 3
End If
rowA = rowA + 1
Loop ' loops A col
End Sub
Antes da macro
Depoisdamacro
Haverá problemas com isso, o que seu exemplo não selecionará. Se você tem uma longa lista na coluna A, como eu mostrei, você irá sobrescrever dados porque um valor substitui outro valor!
Note que na primeira captura de tela, A5 tem o valor No. Este também é o local onde o CDE456 começa em B5. Então, nós checamos onde o valor de A3 começa no col B. CDE456 no ColB começa na linha 5 então ele é movido para A5 (conforme sua requisição na sua pergunta) ... Kaboom, nós acabamos de escrever sobre um valor. No entanto, sua pergunta não menciona isso, então vou assumir que não é um problema (além disso, você sempre pode adaptar o código às suas necessidades).