A seguinte rotina VBA funciona, embora eu imagino que exista um algoritmo mais eficiente.
Está escrito como uma função.
- Combine as duas cadeias em uma
- O primeiro caractere existe mais de uma vez na string
- Se não, verifique o próximo caractere
- Em caso afirmativo, exclua todos os caracteres correspondentes
- Repita até que todos os caracteres tenham sido verificados
Eu uso um sub recursivo para fazer isso, com o qual não tenho muita experiência. Mas parece retornar a saída desejada.
Option Explicit
Option Compare Text
Function UniqueChars(s1 As String, s2 As String)
Dim S As String
S = s1 & s2
RemoveDups S, 1
UniqueChars = UCase(S)
End Function
Sub RemoveDups(ByRef S As String, ByVal NDX As Long)
Dim Ltr As String * 1
If NDX > Len(S) Then Exit Sub
Ltr = Mid(S, NDX)
If Len(S) = Len(Replace(S, Ltr, "")) + 1 Then 'unique character
NDX = NDX + 1
Else
S = Replace(S, Ltr, "")
End If
RemoveDups S, NDX
End Sub
Observe que, se você não quiser usar Option Compare Text
para o módulo, poderá especificar o modo de comparação como um argumento opcional individualmente na função Replace
do VBA. Não tenho certeza do que é mais eficiente.