ELIMINAR FILAS VACÍAS CON VBA EN EXCEL

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:

ELIMINAR FILAS VACÍAS CON VBA EN EXCEL

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

 

Anuncios

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s