Perhaps this will do what you want
Sub test()
Dim arrInput As Variant
Dim colNum As Long, rowNum As Long
Dim destinationRange As Range
Set destinationRange = Sheet3.Range("A1")
arrInput = Sheet1.Range("A1").CurrentRegion
colNum = 1
For colNum = 1 To UBound(arrInput, 2)
For rowNum = 1 To UBound(arrInput, 1)
If arrInput(rowNum, colNum) <> vbNullString Then
If rowNum <> Application.Match(arrInput(rowNum, colNum), Application.Index(arrInput, 0, colNum), 0) Then
arrInput(rowNum, colNum) = vbNullString
End If
End If
Next rowNum
Next colNum
Application.ScreenUpdating = False
With destinationRange
With .Resize(UBound(arrInput, 2), UBound(arrInput, 1))
.Value = Application.Transpose(arrInput)
.SpecialCells(xlCellTypeBlanks).Delete shift:=xlToLeft
End With
End With
Application.ScreenUpdating = True
End Sub