Eu provavelmente faria dessa maneira. Gostaria de adicionar tudo a uma coleção e definir a chave igual ao valor do intervalo. O bit on error resume next
impedirá que ele seja acionado quando tentar colocar uma duplicata na coleção. Eu precisaria de um pouco mais de validação, mas na maioria das vezes deve ser suficiente.
Public Function concatenatespecial(rng As Range) As String
Dim col As New Collection
Dim rng1 As Range
Dim str As String
Dim itm As Variant
On Error Resume Next
For Each rng1 In rng
If rng1 <> "" Then
col.Add rng1.Value, rng1.Value
End If
Next rng1
On Error GoTo 0
For Each itm In col
str = str & "|" & itm
Next itm
concatenatespecial = str
End Function