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