Macro para eliminar filas

Hola, buen día, estoy tratando de hacer una macro que me permita buscar un valor por ejemplo "A", dentro de una columna, y que me elimine todas las filas que contengan ese valor, he intentado de varias formas, pero sigo con algunos errores.
Intente con lo siguiente:
Columns("G:G").Select
For Each cell In Selection
If cell.Value = "A" Then
cell.Select
Selection.EntireRow.Delete
End If
Next cell
Pero si tengo "A" en dos registros consecutivos, solo elimina uno y ya no busca en el siguiente. No se si exista alguna función para subir una celda después de eliminar.
Espero puedas ayudarme, ya que lo he intentado de varias formas y sigo sin poder.
Muchas Gracias y Saludos.

2 respuestas

Respuesta
1
La opción que me parece más rápida es la siguiente (siempre y cuando puedas usar filtros).
Columns("G:G").Select
Selection.AutoFilter
Range("G1").Select
Selection.AutoFilter Field:=1, Criteria1:="A"
Range("G2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.EntireRow.Delete
Selection.AutoFilter Field:=1
Range("G1").Select
Si no puedes usar filtros comenta.
Respuesta
1
El problema es que al eliminar una fila se te posiciona en la celda siguiente y como luego ejecuta 'Next cell' ya se está saltando 2 registros.
Te agregué un bucle a tu rutina. Con esto lo solucionás.
Sub ELIMINAFILAS()
Dim cell, conta
Columns("G:G").Select
For Each cell In Selection
If cell.Value = "A" Then
cell.Select
Selection.EntireRow.Delete
Do While conta = 0
MsgBox Selection.Value
If Selection.Value = "A" Then
Selection.EntireRow.Delete
Else
conta = 1
End If
Loop
End If
conta = 0
Next cell
End Sub
Sugerencia: también podes acotar el rango, si fuese necesario, para que no se quede demorando, como:
Range("G1:G2000").select en lugar de Columns("G:G").Select

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas