Este VBa faz o que você quer ...
Sub Button1_Click()
Dim numberOfRows As Integer
numberOfRows = 10 'Update this number from 10 to the number of rows you are using
For rowNumberB = 1 To numberOfRows
Dim cellToCheck As String
valueToCheck = Range("B" & rowNumberB).Value ' get the value from B column
For rowNumberA = 1 To numberOfRows
If Range("A" & rowNumberA).Value = valueToCheck Then
Range("C" & rowNumberA).Value = valueToCheck 'assign the new value to col C on the correct row (has to be on C otherwise we could over write existing values in B
Range("B" & rowNumberB).Value = "" 'delete the original value from col B
End If
Next
Next
'Now we have to move everything from col C to B
For rowNumberC = 1 To numberOfRows
Range("B" & rowNumberC).Value = Range("C" & rowNumberC).Value ' copy from C to B
Range("C" & rowNumberC).Value = "" ' Delete the value from C
Next
End Sub
Você não mencionou o que aconteceria se os itens da Coluna B fossem anteriores ou Após o valor da Coluna A, nem o que fazer com duplicatas em qualquer coluna. Bem, o código acima resolverá tudo isso. Veja capturas de tela abaixo.
Antes
Depois