¿Un número puede aparecer 1 o 2 veces? O puede aparecer 1, ¿2 o más veces?
Si aparece solamente 1 o 2 veces, y un número aparece 2 veces, ¿quieres qué en el listbox te aparezcan los 2 registros o solamente 1 de los 2?
El mismo caso para cuando un número aparece, digamos 4 veces, ¿quieres qué te aparezcan los 4 registros o solamente 1?
Si quieres que aparezcan todos, es decir, si hay 4 repetidos te aparezcan los 4 registros en el listbox, prueba con lo siguiente.
Pon todo el siguiente código en tu userform.
Crea 2 botones en tu useerform, uno para cargar los datos en el listbox y otro para eliminar filas.
Cambia en la macro "Hoja2" por el nombre de tu hoja que contiene los datos.
Crea una hoja y le pones el nombre "temp"
Dim h1, h2
'
Private Sub CommandButton1_Click()
'Por.Dante Amor
'
'Botón para cargar el list
'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'
h2.Cells.ClearContents
h1.Rows(1).Copy h2.Rows(1)
uf = h1.Range("B" & Rows.Count).End(xlUp).Row
uc = h1.Columns("BT").Column
'
j = 2
uc = uc + 1
For i = 2 To uf
num = h1.Cells(i, "B")
cuenta = WorksheetFunction.CountIf(h1.Range("B2:B" & uf), num)
If cuenta > 1 Then
h1.Rows(i).Copy h2.Rows(j)
h2.Cells(j, uc) = i
j = j + 1
End If
Next
'
letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & uc & ",4),""1"","""")")
h2.Columns("A:" & letra).EntireColumn.AutoFit
For j = 1 To uc
cad = cad & Int(h2.Cells(1, j).Width) + 2 & "; "
Next
With ListBox1
.ColumnCount = uc
.ColumnWidths = cad
.RowSource = h2.Name & "!A2:" & letra & uf
End With
End Sub
'
Private Sub CommandButton2_Click()
'Por.Dante Amor
'
'Botón para eliminar
'
Dim filas As New Collection
'
If ListBox1.ListIndex = -1 Then
MsgBox "Selecciona registros del listbox"
Exit Sub
End If
If ListBox1.ListIndex = 0 Then
If ListBox1.Selected(0) = False Then
MsgBox "Selecciona registros del listbox"
Exit Sub
End If
End If
'
col = ListBox1.ColumnCount
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
fila = Val(ListBox1.List(i, col - 1))
agregado = False
For j = 1 To filas.Count
If filas(j) > fila Then
filas.Add fila, before:=j
agregado = True
Exit For
End If
Next
If agregado = False Then
filas.Add fila
End If
End If
Next
Application.ScreenUpdating = False
For n = filas.Count To 1 Step -1
fila = filas(n)
h1.Rows(fila).Delete
Next
Call CommandButton1_Click
MsgBox "Registros eliminados"
Application.ScreenUpdating = True
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
Set h1 = Sheets("Hoja2")
Set h2 = Sheets("temp")
With ListBox1
.ColumnHeads = True
.MultiSelect = 1
End With
End Sub
.
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
.
Avísame cualquier duda
.