Eliminar filas y columnas utilizando VBA en Microsoft Excel
Puede haber ocasiones en las que tengamos que eliminar filas o columnas en blanco de un archivo en Excel para el bucle, escribiremos la macro / código vba. El código que necesitamos usar variará de una situación a otra. A veces, es posible que tengamos que eliminar una fila o columna, mientras que a veces necesitamos eliminar un rango completo de filas o columnas o, a veces, filas / columnas en función de una o más condiciones.
Si tiene que eliminar solo una o más filas o columnas específicas, usamos VBA excel for loop y puede usar el siguiente código: _Option Explicit Sub macro1 ()
Application.DisplayAlerts = Falso con hojas de trabajo (“Hoja1”)
Application.DisplayAlerts = False
Configuramos las alertas de visualización en falso y guardamos el archivo con el nombre de archivo requerido. Y luego configure las alertas de pantalla como verdaderas justo antes de End Sub.
With Worksheets (“Sheet1”) es un bucle With que termina con End With.
Si usa esto para el ciclo VBA Excel, todas las declaraciones dentro de este ciclo, que usan este objeto, no necesitan comenzar con “Hojas de trabajo (“ Hoja1 ”)”. En su lugar, pueden comenzar directamente con solo un punto (.).
.Rows (“5: 6”). Delete eliminará las filas 5 y 6 solamente.
En este caso, solo se eliminarán las filas / columnas especificadas.
Sin embargo, a veces es posible que deba eliminar filas / columnas según determinadas condiciones. Por ejemplo supongamos que queremos eliminar todas las columnas del archivo que contienen «Prueba» como encabezado. En este caso, necesitamos un bucle que verifique de una columna a otra y cuando se cumplan los criterios, eliminará la columna.
Podemos usar un código como este. Tenga en cuenta que cada persona preparará el código de la manera en que se sienta cómodo. Esta es solo una de las formas en que se puede codificar y no es el único método.
_Option Explícita Sub macro2 ()
Dim i As Long, lcol As Long Application.DisplayAlerts = False con hojas de trabajo («Hoja1»)
lcol = .Range (“A1”). End (xlToRight) .Column For i = lcol to 1 Step -1 If .Cells (1, i) .Value = “” Entonces salga para If .Cells (1, i). value = “Test” Then .Columns (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_ Vea el código que se ha guardado en el Módulo 1 según la imagen a continuación
Aquí lcol es la última columna de la hoja que contiene datos. En caso de que pruebe este código en un archivo en blanco, lcol tendrá el valor de 16384 o el número de columna de la última columna según su versión de Excel. Luego, recorremos desde la última columna hasta la primera columna, moviéndonos un paso hacia atrás cada vez. Nos estamos moviendo hacia atrás porque el código de eliminación funciona bien solo cuando comienza a eliminar desde la última fila o última columna. Si comienza desde la 1 ^ st ^ fila / columna, el código tiende a fallar.
La primera condición se ingresa allí en caso de que ejecute la macro en un archivo en blanco. En Excel, la macro se repetirá desde la última columna, que es 16384 en este caso, hasta la columna 1, y esto podría llevar bastante tiempo. Entonces, en caso de que el código encuentre una columna en blanco, terminará el ciclo inmediatamente a través de la instrucción exit For. La condición 2 ^ nd ^ if comprueba si el valor es «Prueba» y elimina la columna si se encuentra «Prueba».
En caso de que desee eliminar las filas en lugar de las columnas, el código cambiará a – _Option Explicit Sub macro3 ()
Dim i As Long, lrow As Long Application.DisplayAlerts = False With Worksheets (“Sheet1”)
lrow = .range («A» & .Rows.Count) .End (xlUp) .Row For i = lrow to 2 Step -1 If .Cells (i, 1) .Value = “” Then Salir For If .Cells ( i, 1) .Value = “Prueba” Luego .Rows (i) .Borrar Siguiente i Finalizar con Application.DisplayAlerts = True End Sub_ Ver el código a continuación –
Habría observado que .Cells (1, i) .value cambia a .Cells (i, 1) .value en el código anterior. Esto sucede porque en el primer código, estábamos eliminando columnas, por lo que la variable «i» tenía que recorrer las columnas, mientras que en el código 2 ^ nd ^, necesita recorrer las filas. Aquí pasaremos de la última fila a la 2 ^ nd ^ fila, ya que la 1 ^ st ^ fila contiene encabezados que deben conservarse.
Según el requisito del código, incluso puede fusionar tanto el código de eliminación de filas como el código de columna de eliminación en 1 código. Incluso puede establecer varias condiciones según las cuales se debe eliminar la fila / columna. Considere, queremos eliminar todas las filas donde la 1 ^ st ^ columna contiene texto como Test o Dummy, entonces el código será así: _Option Explicit Sub macro4 ()
Dim i As Long, lrow As Long Application.DisplayAlerts = False With Worksheets (“Sheet1”)
lrow = .range («A» & .Rows.Count) .End (xlUp) .Row For i = lrow to 2 Step -1 If .Cells (i, 1) .Value = “” Then Salir For If .Cells ( i, 1) .Value = “Test” O .Cells (i, 1) .Value = “Dummy” Luego .Rows (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_
Del mismo modo, puede agregar este código o el código que tiene según el requisito. Puede agregar varias condiciones para filas e incluso para columnas.