una repetidos repetidas removeduplicates para macro filas evitar eliminar duplicados detectar datos columna buscar borrar vba excel-vba duplicate-removal

repetidos - Eliminar filas con datos duplicados VBA



macro para evitar duplicados en excel (2)

Estoy luchando con algo que debería ser bastante sencillo, sin embargo, he leído al menos 15 métodos para hacerlo y parece que no puedo hacerlo funcionar.

Aquí hay un conjunto de datos de muestra:

9:30:01 584.7 9:30:01 590 9:30:01 595 9:30:02 584.51 9:30:03 584.62 9:30:04 584.44 9:30:05 584.05

Solo quiero una fila por segundo, así que de las primeras 3 filas, solo una necesita permanecer. No me importa si es el primero o el último, pero el código que he estado usando mantiene el último, 595 en este caso.

La forma en que lo hago es con un ciclo for que borra el contenido de la fila que tiene el mismo tiempo que la fila debajo de él. Luego clasifico todo el rango.

Me imagino que hay una manera más simple de simplemente eliminar la fila adicional desde el principio. Sin embargo, cuando uso delete en el rango, en lugar de borrar, no eliminará todas las filas duplicadas.

Aquí es lo que quiero que sean los datos:

9:30:01 595 9:30:02 584.51 9:30:03 584.62 9:30:04 584.44 9:30:05 584.05

Necesito que esto suceda para toda la hoja. La hora es la columna B y los valores son la columna C.

Aquí está el código que estoy usando,

LastRow = ActiveSheet.UsedRange.row - 1 + _ ActiveSheet.UsedRange.Rows.Count For RowNum = 2 To LastRow If (Range("B" & RowNum) = Range("B" & RowNum + 1)) Then Range("B" & RowNum).EntireRow.Clear End If Next RowNum Range("A2:C" & LastRow).Sort key1:=Range("B2:B" & LastRow), _ order1:=xlAscending, Header:=xlNo


Esto debería funcionar:

Sub jzz() Dim i As Long For i = 1 To Cells.SpecialCells(xlLastCell).Row ''loop from row 1 to last row If Cells(i, 1) <> vbNullString Then ''check if something is in the cell If Cells(i, 1) = Cells(i + 1, 1) Then ''check if cell is the same as next cell Cells(i + 1, 1).EntireRow.Delete ''if so; delete i = i - 1 ''go back one row End If End If Next i End Sub

Otra opción es ir de abajo hacia arriba, así:

Sub jzz() Dim i As Long For i = Cells.SpecialCells(xlLastCell).Row to 1 step -1''loop from last row to row 1 If Cells(i, 1) <> vbNullString Then ''check if something is in the cell If Cells(i, 1) = Cells(i + 1, 1) Then ''check if cell is the same as next cell Cells(i + 1, 1).EntireRow.Delete ''if so; delete End If End If Next i End Sub

lo que prefieres usar si es personal. Por favor, considere la respuesta de Teylyn también, en esta situación, es muy útil.


No bucle. Use RemoveDuplicates. Mucho más rápido que cualquier bucle. Una linea de codigo

Sub test() ActiveSheet.Range("B:C").RemoveDuplicates Columns:=1, Header:=xlNo End Sub

Editar: capturas de pantalla

ANTES DE

DESPUÉS

Editar: no funciona en Excel 2011 para Mac (ve figura).