Remove valores duplicados e originais, deixando apenas valores verdadeiramente únicos

0

Então, encontrei milhões de maneiras de mostrar apenas os valores únicos em um intervalo de células, mas nada para isso. O que eu quero fazer é comparar duas células (ou intervalos) e retornar apenas os valores que não foram duplicados. Ou seja, se as duas células contiverem as palavras Ursine e Bovine, ele retornará URSBOV e e, n e i removido.

Ex.

Column 1----column 2---column 3(result)
"Ursine"-------"Bovine"-----"URSBOV"
"Canine"------"Feline"-------"FLCA"
    
por James 11.04.2017 / 00:39

1 resposta

0

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.

    
por 11.04.2017 / 04:55