miércoles, 24 de abril de 2013

Eliminar filas vacías en una hoja de Excel con VBA


En el último curso de Excel que he impartido, durante la sesión que trataba de Visual Basic for Applications (VBA), un alumno me solicitaba un procedimiento (macro o subrutina) para automatizar la eliminación masiva de filas que estuvieran totalmente en blanco. Además, necesitaba indicar las filas primera y última de la zona donde era necesario el "rastreo" y eliminación.

Voy a aprovechar la pregunta de este alumno para publicar en este post, una solución a dicho "problema".

Comencemos:

PASO 1:

Presionar ALT+F11 para activar el editor de VBA y hacer click con el botón derecho en la carpeta "Microsoft Excel Objetos" del proyecto o libro que deseemos (si lo hacemos en la carpeta "Microsoft Excel Objetos" del libro de macros PERSONAL.XLSB ** que podremos ver en el explorador de proyectos, tendremos la macro disponible permanentemente en nuestro Excel... y no sólo disponible para un libro en concreto). En el menú contextual, seleccionamos "Insertar / Módulo":


PASO 2:

En la ventana de código del nuevo módulo, que se abre a la derecha, escribimos el siguiente código (o copiamos-pegamos del archivo que puede el lector descargarse al final de este artículo):

Sub EliminarFilasVacías()

'Variables y actualización de pantalla
    Dim FilaInicial As String
    Dim FilaFinal As Integer
    Dim Seguridad As Integer
    Application.ScreenUpdating = False


'Introducción de fila inicial de rastreo
    On Error GoTo 1
    FilaInicial = InputBox("Introduzca nº de fila inicial para rastreo", "Fila inicial de rastreo")

    ActiveSheet.Range("A" & FilaInicial).Select

'Introducción de fila final de rastreo
    FilaFinal = Val(InputBox("¿Hasta que nº de fila quiere rastrear?", "Última fila a rastrear"))
    If FilaFinal = 0 Then
        GoTo 1
    End If


'Pregunta de seguridad
    Seguridad = MsgBox("¿Está seguro de eliminar todas las filas vacías?", vbYesNo, "¡Atención!")
    If Seguridad = vbNo Then
        Exit Sub
    End If

'Rastreo y eliminación de filas vacías
    For I = ActiveCell.Row To FilaFinal
        If Application.WorksheetFunction.CountA(ActiveCell.EntireRow) <> 0 Then
            ActiveCell.Offset(1, 0).Select
        Else
            ActiveCell.EntireRow.Delete
        End If
    Next
Exit Sub


'Gestión de errores
1 MsgBox "Ha introducido datos erróneamente o ha cancelado un cuadro de diálogo"

End Sub

Una vez hecho esto, cerramos el editor de VBA.

PASO 3:

Asignaremos la macro a una combinación de teclas. Para ello, en la Ficha Programador, hacemos click en el botón "Macros". Seguidamente, buscamos el nombre de nuestra macro (EliminarFilasVacías) TENIENDO SELECCIONADO EL LIBRO PERSONAL XLSB, y la seleccionamos. Después, hacemos click en el botón "Opciones..." y por último, introducimos la letra que deseamos acompañe a CTRL.




Por supueso, también podemos asignar la macro a un botón (por ejemplo) o a una forma.
Si desea ver en funcionamiento la macro y además poder copiarla a su libro de macros personal (en vez de escribirla), puede descargar el siguiente archivo:




** Recordamos que el libro de macros PERSONAL.XLSB es un libro que se abre de forma automática (en modo oculto) siempre y cuando exista en nuestro equipo. Para ello, tenemos que haber grabado alguna macro en él alguna vez, puesto que Excel lo crea automáticamente.


Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company:













9 comentarios:

  1. Gracias por el aporte, excelente trabajo

    ResponderEliminar
  2. Exelente muy util... me ahorrare mucho tiempo

    ResponderEliminar
  3. Muy buen ejemplo. Había buscado otras rutinas parecidas pero esta está muy bien.

    Gracias

    ResponderEliminar
  4. GRACIAS pero tengo una duda el problema es que voy a colocar hasta la casilla 100.000 y sale error como puede solucionarlo o me podes ayudar con algo para este archivo tan extenso o mas

    gracias

    ResponderEliminar
    Respuestas
    1. Cambia el el tipo de dato integer de la variale FIlaFinal por uno que almacene mayor informaciòn

      Eliminar
    2. El tipo de datos Integer debe almacenar hasta +- 2.147.483.647 y debería ser suficiente para los aprox. 1.048.000 registros de Excel. Por lo tanto, quizá el error venga por otra cuestión.
      Saludos.

      Eliminar
  5. Gracias hermano me sirvio de mucho tu ejemplo no eres como tros que te florean y al final nada

    ResponderEliminar
  6. MUY BUEN APORTE FUNCIONA LA "R" GRACIAS

    ResponderEliminar