VBA – Remover Duplicatas de uma Matriz
Este tutorial ensinará a você como remover duplicatas de uma matriz no VBA.
Remover Duplicatas
A maneira mais fácil de remover duplicatas de uma matriz do VBA é atribuir os valores da matriz a uma coleção do VBA e, em seguida, passar os valores de volta para uma matriz. As coleções não permitem valores duplicados e, portanto, usando uma coleção, podemos remover duplicatas de uma matriz. Criamos uma função para executar essa tarefa:
Function RemoverDuplicatasMatriz(MinhaMatriz As Variant) As Variant
Dim nPrimeira As Long, nUltima As Long, i As Long
Dim item As String
Dim arrTemp() As String
Dim Coll As New Collection
'Obter a primeira e a última posição da matriz
nPrimeira = LBound(MinhaMatriz)
nUltima = UBound(MinhaMatriz)
ReDim arrTemp(nPrimeira To nUltima)
'Converter matriz em string
For i = nPrimeira To nUltima
arrTemp(i) = CStr(MinhaMatriz(i))
Next i
'Preencher a coleção temporária
On Error Resume Next
For i = nPrimeira To nUltima
Coll.Add arrTemp(i), arrTemp(i)
Next i
Err.Clear
On Error GoTo 0
'Redimensionar a matriz
nUltima = Coll.Count + nPrimeira - 1
ReDim arrTemp(nPrimeira To nUltima)
'Preencher a matriz
For i = nPrimeira To nUltima
arrTemp(i) = Coll(i - nPrimeira + 1)
Next i
'Matriz de saída
RemoverDuplicatasMatriz = arrTemp
End Function
Sub MatrizTeste()
Dim strNomes(1 To 4) As String
Dim MatrizSaida() As String
Dim i As Long
Dim item As Variant
'Definir valores iniciais da matriz
strNomes(1) = "Shelly"
strNomes(2) = "Steve"
strNomes(3) = "Neema"
strNomes(4) = "Steve"
'Chamar a função de Duplicatas
MatrizSaida= RemoverDuplicatasMatriz(strNomes)
'Valores de saída para a janela imediata (CTRL + G)
For Each item in MatrizSaida
Debug.Print item
Next item
End Sub
Observação: No exemplo, forçamos nossa matriz a começar em 1 (e não em 0). Se sua matriz começar em 0, será necessário modificar um pouco o código.
Observe que convertemos o conteúdo do array em uma string. Se necessário, você pode converter as cadeias de caracteres novamente em inteiros após a conclusão do processo.