Hola a todos!
Hoy toca un post un poco más reducido que los anteriores, y que seguro que os resulta útil.
Es habitual que en algunas ocasiones nos encontremos con bases de datos, tablas o rangos con filas en blanco. Aunque no suele ser un problema, dado que perfectamente podemos utilizar código o formulación que se adapte a esta circunstancia, lo cierto es que siempre que podamos debemos trabajar con base de datos sin filas o columnas en blanco.
Para eliminar filas en blanco, por ejemplo en una columna (OJO, que no tenga formato de tabla), lo podríamos hacer así, con esta macro:
Sub ELIMINAR_FILAS_VACIAS()
With Sheets("DATOS")
.Columns("A:A").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
End With
End Sub
Lo único que estamos haciendo es seleccionar la columna «A» de una hoja llamada DATOS, posteriormente seleccionar las celdas en blanco (sin datos), y proceder a eliminar todas las filas en las que se encuentran esas celdas.
Pero esto no funcionará si estamos trabajando con datos en formato tabla, cosa que desaconsejo si estamos realizando trabajos con programación y que aconsejo cuando realizamos trabajos con formulación, sin acudir a macros.
Para que podamos eliminar celdas vacías (y filas en este caso), debemos utilizar bucles, aunque se puedan utilizar otras técnicas, creo que esta es la más recomendable, sobre todo porque también nos va a servir con rangos normales, sin formato de tabla.
Voy a poner un pequeño ejemplo para verlo mejor. Imaginad que en nuestro proceso nos hemos importado en una TABLA la relación de provincias de España, pero resulta que algunas celdas están vacías y necesitamos eliminar todas esas filas:
Pues bien, tan solo tendremos que utilizar esta macro y eliminaremos las celdas en blanco:
Sub ELIMINAR_FILAS_VACIAS()
Dim Fin As Integer, i As Integer
Application.ScreenUpdating = False
With Sheets("DATOS")
'Seleccionamos la tabla o el rango
.Range("Tabla1").Select
'Seleccionando el rango, no la tabla
'Range("A2", ActiveCell.SpecialCells(xlLastCell)).Select
'Contamos los Items de esa tabla o rango
With Selection
Fin = .Count
End With
'Si el ítem o celda está vacía, entonces eliminamos la fila
For i = Fin To 1 Step -1
If .Cells(i, 1) = vbNullString Then .Cells(i, 1).EntireRow.Delete
Next i
.Cells(1, 1).Select
End With
Application.ScreenUpdating = True
End Sub
Si os fijáis, veréis que dado que tenemos una tabla, vamos a seleccionarla, en este caso es la tabla1 y contamos los los Ítems de la selección (celdas en blanco o con datos). Luego pasamos el bucle de abajo hacía arriba y eliminamos las celdas en blanco.
Si no tuviésemos una tabla, utilizaríamos la otra parte de la macro que está comentada:
'Range("A2", ActiveCell.SpecialCells(xlLastCell)).Select
Y funcionaría perfectamente.
Hoy otros ejemplos y técnicas para realizar este ejercicio, pero estas dos macros son mis preferidas. Aunque, si estos datos los estamos importando de otro lugar, quizás lo mejor sería realizar la importación con SQL eliminando los registros nulos y así sería todo más sencillo, pero bueno, ese ejercicio lo dejo para otro momento 🙂
Os dejo el ejemplo pero con la tabla (formato), si necesitáis aplicarlo a un rango normal, utilizad la primera macro, o esta activando la parte del código que hace referencia a las celdas especiales.
Descarga el archivo de ejemplo pulsando en: ELIMINAR FILAS VACÍAS CON VBA EN EXCEL
Gracias por Compartir. Está excelente. La ejecuté y funciona perfecto para rangos cuyas filas vacías están definidas desde la columna «A». Pero, ¿cómo hacer para eliminar filas vacías cuando en un rango, por ejemplo desde Columna A hasta Columna BH, tengo columnas que contienen datos, es decir no están «totalmente vacías», es decir quiero eliminar sólo Filas «totalmente vacías».
Nuevamente, Gracias! y feliz 2020!
Hola Juan José:
Aquí te paso la solución:
https://excelsignum.com/2020/01/04/eliminar-filas-vacias-si-todas-las-celdas-del-rango-estan-en-blanco/
Saludos
ok excelente
Hola Segu, muchas gracias por compartir,. En mi caso ya modifique la macro para que coincidiera con el nombre de mi tabla y hoja sin embargo, me arroja el siguiente error: «se ha producido el error ‘6’ en tiempo de ejecucion: desbordamiento.
Cuando depuro me selecciona el siguiente rango:
Fin = .Count
Mi tabla tiene 3944 filas y va hasta la columna CK.
No se cual es el error 🙁
El problema es que no estas utilizando una tabla, es correcto?, si quieres que funcione debes pasar los datos a una tabla o utilizar el código que es para un rango (no una tabla).
Sub ELIMINAR_FILAS_VACIAS()
Dim Fin As Integer, i As Integer
Application.ScreenUpdating = False
With Sheets("DATOS")
'Seleccionamos la tabla o el rango
'.Range("Tabla1").Select
'Seleccionando el rango, no la tabla
.Range("A2", ActiveCell.SpecialCells(xlLastCell)).Select
'Contamos los Items de esa tabla o rango
With Selection
Fin = .Count
End With
'Si el ítem o celda está vacía, entonces eliminamos la fila
For i = Fin To 1 Step -1
If .Cells(i, 1) = vbNullString Then .Cells(i, 1).EntireRow.Delete
Next i
.Cells(1, 1).Select
End With
Application.ScreenUpdating = True
End Sub