Eliminar filas de acuerdo a una condición variable

Resulta lo siguiente: Tengo muchos datos (5000) y aparecen datos que no me interesan.
Estos datos que no me interesan los quiero eliminar de la siguiente
forma: Pongamos que por ejemplo hay 100 filas en total, de esas 100
filas aparecen 40 que dicen Q, 20 que dicen W y 40 que dicen E, todas
están en orden hacia abajo sin celda vacías de por medio.
De ahí quiero que por ejemplo solo queden las últimas 10 que dicen Q, las ultimas 10 que dicen W y las últimas 10 que dicen E.
Pongámoslo con otro ejemplo diferente por si no fui claro:

1

1

1

1

1

1*

1*

1*

2

2

2*

2*

2*

0.2

0.2*

0.2*

0.2*

1

1

1*

1*

1*

.

.

.

Esos datos son cíclicos pero no son en igual cantidad, entonces busco que por ejemplo solo me conserve los últimas tres filas de cada dato (es decir los que tienen asterisco) y que las demás filas sean borradas.

1 respuesta

Respuesta
1

Te mando mi solución al ejemplo que planteas en la pregunta con los números y los asteriscos.

Nos suponemos que tenemos esa lista escrita en la columna A desde A1 hacia abajo

Ejecuta esta macro y todo listo!

Sub quitar_lineas()
Range("b1").Select
Do While ActiveCell.Offset(0, -1).Value <> ""
ActiveCell.Value = Replace(ActiveCell.Offset(0, -1), "*", "")
ActiveCell.Offset(1, 0).Select
Loop
Range("b1").Select
Do While ActiveCell.Value <> ""
contarsi = Application.WorksheetFunction.CountIf(Columns(2), ActiveCell.Value)
resta = contarsi - 3
Range(ActiveCell, ActiveCell.Offset(resta - 1, 0)).EntireRow.Delete
valor = ActiveCell.Value
Do While ActiveCell.Value = valor
ActiveCell.Offset(1, 0).Select
Loop
Loop
End Sub

recuerda finalizar y puntuar

Muchas gracias ya casi, pero el problema es que viene sin los asteriscos, fue un pésimo ejemplo de mi parte, es decir deseo que quede únicamente los tres últimos del ejemplo pero como digo vienen sin asterisco. Qué pena.

Pues entonces usa esta macro. Sigo suponiendo que los valores están en la columna A desde A1 hacia abajo.

Sub quitar_lineas()
Range("a1").Select
Do While ActiveCell.Value <> ""
contarsi = Application.WorksheetFunction.CountIf(Columns(1), ActiveCell.Value)
resta = contarsi - 3
Range(ActiveCell, ActiveCell.Offset(resta - 1, 0)).EntireRow.Delete
valor = ActiveCell.Value
Do While ActiveCell.Value = valor
ActiveCell.Offset(1, 0).Select
Loop
Loop
End Sub

recuerda finalizar y puntuar

No le voy a decir gracias porque no me fue útil... ¡ME FUE UTILÍSIMO. MUCHAS GRACIAS! (léase como gritos enormes)

Lo que puedo decir es que es mi nuevo super héroe.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas