¿Como quitar duplicados de una columna en un Array Bidireccional VBA (Excel)?

Tengo un array de 8 columnas importado de una tabla.

Este Array llamado MiMatriz... Esta ordenado por la primera columna y de lo que se trata es quitar los duplicados de la primera columna del Array.

Luego quiero cargar cargar en un ListBox de 8 columnas aquellos valores unicos (columna1) y el dato correspondiente a la columna2.

2 Respuestas

Respuesta
2

Suponiendo que las 8 columnas están de la columna A a la H, empiezan en la fila 1 y hasta la última fila con datos.

Utilizando un dictionary:

Private Sub CommandButton1_Click()
  Dim dic As Object
  Dim a As Variant
  Dim i As Long
  a = Range("A1:H" & Range("A" & Rows.Count).End(3).Row).Value
  Set dic = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a, 1)
    If Not dic.exists(a(i, 1)) Then dic(a(i, 1)) = a(i, 2)
  Next
  ListBox1.List = Application.Transpose(Array(dic.keys, dic.items))
End Sub

[Tienes pendiente valorar estas respuestas. No dejes respuestas sin valorar.

¿Cómo borrar registros duplicados en un array VBA?

¿Crear procedimiento para vaciar los items de un listbox de cualquier formulario?

¿Cuantas columnas tiene mi Array birideccional?

Respuesta

Por probar:

Sub prueba()
    Dim m(1 To 10, 1 To 10) As Variant, mm As Variant
    Dim n As Integer, s As String
    m(1, 1) = 1: m(2, 1) = "a"
    m(1, 2) = 1: m(2, 2) = "b"
    m(1, 3) = 1: m(2, 3) = "c"
    m(1, 4) = 2: m(2, 4) = "d"
    m(1, 5) = 2: m(2, 5) = "e"
    m(1, 6) = 2: m(2, 6) = "f"
    m(1, 7) = 3: m(2, 7) = "g"
    m(1, 8) = 3: m(2, 8) = "h"
    m(1, 9) = 3: m(2, 9) = "i"
    m(1, 10) = 4: m(2, 10) = "j"
    mm = WorksheetFunction.Frequency(WorksheetFunction.Index(m, 1, 0), WorksheetFunction.Index(m, 1, 0))
    For n = LBound(mm, 1) To UBound(mm, 1) - 1
        If mm(n, 1) > 0 Then s = s & CStr(m(1, n)) & "-" & m(2, n) & vbNewLine
        'en vez del If anterior aquí se podría llenar el listbox con m(1,n) y m(2,n)
    Next n
    MsgBox s
End Sub

Saludos_

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas