Searching...
martes, 9 de julio de 2013

ELIMINAR Y BORRAR FILAS EN EXCEL CON VISUAL BASIC



En ocasiones necesitamos depurar una base de datos y borrar un gran número de filas de acuerdo a una condición. Puede ser que al exportar una base de datos de otra aplicación se vuelque con importantes separaciones entre datos, con filas vacías, que manualmente sea tedioso eliminar o que tengamos una base de datos en la que queramos eliminar todas aquellas filas que contengan el dato X o tengan como color el rojo. Para ello existen varias formas para eliminar filas en Excel que vamos a ver a continuación.

Sub SUPRIMIR_VACIAS()

 LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count

 For r = LastRow To 1 Step -1
Marca 0 aunque se van a borrar todas las filas vacías en la columna A
  If Application.CountA(Rows(r)) = 0 Then
   Rows(r).Delete
  End If

 Next r

End Sub

Nota: Application.CountA(Rows(r))= 0, no significa que en la celda ponga cero, sino que está vacía.

Analizando la macro:
·        UsedRange: es el rango de datos que va recorrer la macro.
·        ActiveSheet.UsedRange.Row: es el numero de fila donde se encuentra el programa en ese momento; 1, 2, 3,4… hasta el último que tenga datos
·        ActiveSheet.UsedRange.Rows.Count: es el número de filas que tiene el rango de datos.
·        Esta macro como se puede ver en el For va desde la última fila (LastRow) a la primera reduciéndose en 1 fila, de ahí el “STEP -1”.
·        CountA que en español corresponde a CONTARA cuenta todo tipo de celdas, da igual que sean texto o numéricas.
·        La Application.CountA(Rows(r)) = 0, permite leer que si la celda esta vacía, lo que queda a la izquierda del igual es 0, y si contiene datos es 1. Por lo que si pusiéramos 1 en vez de 0 se borraría todo lo que tuviese datos.


Se consigue lo mismo que la anterior, sin embargo en este ejemplo la variable “lastRow” trabaja sobre la columna A.

Sub SUPRIMIR_VACIAS1()
LastRow = Columns(“A:A”).Range(“A65536”).End(xlUp).Row
For r = LastRow To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then
Rows(r).Delete
End If
Next r
End sub


Otro ejemplo que consigue el mismo resultado:

Sub SUPRIMIR_VACIAS2()
Dim intNumDeFilas As Long
Selection.SpecialCells(xlCellTypeLastCell).Select
intNumDeFilas = Selection.Row
For i = 1 To intNumDeFilas
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
End If
Next
End sub

Como vemos en este ejemplo, se omite el End if, esto es debido a que la condición que va después del Then está en la misma línea que If.

Sub SUPRIMIR_VACIAS3()
UltimaFila = ActiveSheet.UsedRange.Row – 1 + ActiveSheet.UsedRange.Rows.Count
For r = UltimaFila To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
End sub


Suprimir filas por condición

Esta Macro encuentra la celda con la condición que establezcamos y borra la fila donde esta celda se encuentre.

Sub SUPRIMIR_CONDICIÓN()
Dim rngString As Range
Do
Set rngString = _
Cells.Find(“BORRAR_CELDA”, MatchCase:=False, LookAt:=xlPart, LookIn:=xlValues)
If Not rngString Is Nothing Then
rngString.EntireRow.Delete
End If
Loop Until rngString Is Nothing
End sub


Elimina todas las filas hacia abajo si coincide en la columna A es 0. En esta Macro podemos utilizar condiciones como una letra, una palabra o un número, a diferencia de las macros tituladas arriba como SUPRIMIR_VACIAS.

Sub   SUPRIMIR_CONDICIÓN 2()

For fila = 1 To 65536
‘El For va recorrer las filas desde la primera hasta la 65536
If Cells(fila, 2).Value = 2 Then
‘Si la celda en la columna B(2) y la fila en recorrido del
For s igual a 2 es igual a  entonces se borrará
Rows(fila).Delete
End If
Next fila

End Sub










Otro ejemplo similar al anterior:

Sub SUPRIMIR_CONDICIÓN3()
    uf = Range("A" & Cells.Rows.Count).End(xlUp).Row
    For fil = 5 To uf
        If Range("A" & fil) = 0 Then
            Rows(fil & ":" & fil).Delete Shift:=xlUp
            fil = fil - 1
            uf = Range("A" & Cells.Rows.Count).End(xlUp).Row
            If fil >= uf Then Exit Sub
        End If
    Next fil
End Sub

 En este caso vamos a borrar, no eliminar, la celda de izquierda que se encuentra en la misma fila en la que halla la celda vacía en la segunda columna. Si quisiéramos borrar toda la fila, en vez de solo la de su izquierda “Cells(i,1).ClearContents”, debemos cambiar esto por Rows(i).ClearContents

Sub BORRA_CELDA ()
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row

‘Desde la fila 2 hasta la última fila con datos
    If Cells(i, 2) = "" Then

‘Si la celda en la 2ªcolumna esta vacía
    Cells(i, 1).ClearContents

‘Borra la celda de su izquierda, la de la columna A
    End If


Next i


End Sub





0 comentarios:

Publicar un comentario

 
Back to top!