En esta lección, vas a aprender los comandos para insertar y eliminar filas y columnas de manera automática a tus hojas Excel utilizando macros. ¡Comenzamos!
1. Insertar filas y columnas.
Muchas veces nos encontramos con la necesidad de insertar filas (o eliminarlas) en función de un valor o cálculo. Hoy vamos a ver los comandos para hacerlo de forma automática, y más adelante, cuando veamos los condicionales, los asociaremos a una condición.
Para insertar una sola fila en una posición determinada, por ejemplo, en la fila 2, usaremos:
Cells(2,1).EntireRow.Insert
Basta con apuntar a la fila 2, es decir, da igual el valor que le demos a la columna. Por tanto, con el comando
Cells(2,9).EntireRow.Insert
obtendríamos el mismo resultado.
Para insertar una sola columna en una posición determinada, por ejemplo, en la columna B, usaremos:
Cells(1,2).EntireColumn.Insert
Basta con apuntar a la columna B, es decir, da igual el valor que le demos a la fila. Por tanto, con el comando
Cells(9,2).EntireColumn.Insert
obtendríamos el mismo resultado.
Si lo que queremos es insertar un rango de filas o columnas utilizando macros, usaremos:
Insertaría filas nuevas entre A2 y A4, es decir, 3 filas.
Mientras que,
insertaría columnas nuevas entre A2 y D2, es decir, 4 columnas.
2. Eliminar filas y columnas.
Para eliminar una sola fila de una posición determinada, por ejemplo, la fila 2, usaremos:
Cells(2,1).EntireRow.Delete
Basta con apuntar a la fila 2, como veíamos más arriba.
Para eliminar una sola columna de una posición determinada, por ejemplo, la columna B, usaremos:
Cells(2,1).EntireColumn.Delete
Basta con apuntar a la columna B, como veíamos más arriba.
Si lo que queremos es eliminar un rango de filas o columnas, usaremos:
Elimina las filas 2, 3 y 4.
Elimina las columnas A, B, C y D.
Vas a ver, con este ejemplo, qué fácil es insertar y eliminar filas y columnas usando macros.
En primer lugar, crea un nuevo libro Excel, abre el editor VBA, inserta 5 módulos y copia las siguientes macros en ellos.
Macro 1. Insertar una fila.
'Macro que inserta una fila en la posición 5 y asigna el contenido "Malaga" a la celda A5
Cells(5, 1).EntireRow.Insert 'Insertamos una fila nueva en la posición 5
Cells(5, 1).Value = "Malaga" 'Asignamos el valor "Malaga" a la celda A5
Cells(2, 1).Copy 'Copiamos la celda A2 "Barcelona"
Range("A5").Select 'Seleccionamos la celda A5 "Malaga"
'Aplicamos el formato de A2 a A5
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False 'Desactivamos el comando copiar
End Sub
Macro 2. Insertar dos columnas.
'Macro que inserta 2 columnas entre B y C, y asigna el contenido "Cafeteria" a B1 y "Aeropuerto" a C1
Range("C1:D1").EntireColumn.Insert 'Insertamos 2 columnas entre C y D
Cells(1, "C").Value = "Cafeteria" 'Asignamos el valor "Cafeteria" a la celda C1
Cells(1, "D").Value = "Aeropuerto" 'Asignamos el valor Aeropuerto a la celda D1
Cells(1, 2).Copy 'Copiamos la celda B1 "Restaurante"
Range("C1:D1").Select 'Seleccionamos las celdas C1 "Cafeteria" y D1 "Aeropuerto"
'Aplicamos el formato de B1 a C1 Y D1
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False 'Desactivamos el comando copiar
End Sub
Macro 3. Eliminar una columna.
'Macro que elimina la columna B
Cells(1, 2).EntireColumn.Delete 'Eliminamos la columna B
End Sub
Macro 4. Eliminar dos filas.
'Macro que elimina las filas 3 y 4
Range("A3:A4").EntireRow.Delete 'Borramos las filas 3 y 4
End Sub
Macro 5. Restaurar la configuración inicial de la página.
'Macro que restaura la configuración inicial de la página
Application.ScreenUpdating = False 'Desactivamos el refresco de pantalla
Range("A1:AA100").ClearContents 'Borramos el contenido de las celdas del rango A1-AA100
Cells(2, "A").Value = "Barcelona" 'Asignamos a la celda A2 el valor "Barcelona"
Cells(3, "A").Value = "Madrid" 'Asignamos a la celda A3 el valor "Madrid"
Cells(4, "A").Value = "Sevilla" 'Asignamos a la celda A4 el valor "Sevilla"
Cells(5, "A").Value = "Bilbao" 'Asignamos a la celda A5 el valor "Bilbao"
Cells(6, "A").Value = "Valencia" 'Asignamos a la celda A6 el valor "Valencia"
Range("A2:A6").Font.ColorIndex = 3 'Asignamos color rojo al texto del rango A2-A6
Range("A2:A6").HorizontalAlignment = xlCenter 'Alineamos horizontalmente el texto del rango A2-A6
Cells(1, "B").Value = "Restaurante" 'Asignamos a la celda B1 el valor "Restaurante"
Cells(1, "C").Value = "Museo" 'Asignamos a la celda C1 el valor "Museo"
Cells(1, "D").Value = "Salon Congresos" 'Asignamos a la celda D1 el valor "Salon Congresos"
Cells(1, "E").Value = "Hotel" 'Asignamos a la celda E1 el valor "Hotel"
Cells(1, "F").Value = "Parque" 'Asignamos a la celda F1 el valor "Parque"
Range("B1:F1").Font.ColorIndex = 10 'Asignamos color verde al texto del rango B1-F1
Range("B1:F1").HorizontalAlignment = xlCenter 'Alineamos horizontalmente el texto del rango B1-F1
Range("B2:B5").Value = "X" 'Asignamos al rango de celdas B2-B5 el valor "X"
Range("C3:C4").Value = "X" 'Asignamos al rango de celdas C3-C4 el valor "X"
Cells(6, 3).Value = "X" 'Asignamos a la celda C6 el valor "X"
Range("D2:F2").Value = "X" 'Asignamos al rango de celdas D2-F2 el valor "X"
Cells(3, "F").Value = "X" 'Asignamos a la celda F3 el valor "X"
Range("D5:E5").Value = "X" 'Asignamos al rango de celdas D5-E5 el valor "X"
Cells(6, "F").Value = "X" 'Asignamos a la celda F6 el valor "X"
Range("B2:F6").HorizontalAlignment = xlCenter 'Alineamos horizontalmente el texto del rango B2-F6
Application.ScreenUpdating = True 'Activamos el refresco de pantalla
End Sub
Seguidamente, rellena la hoja con los valores que se muestran a continuación y crea cinco botones asociados a las cinco macros que acabamos de copiar. Debería quedarte algo así:
Al ejecutar la primera macro, vemos como se añade una nueva fila en la posición 5, y se le asigna el valor “Malaga” a la celda A5. Si te fijas en el código, también restablecemos el formato de celda, copiándolo de otra.
Con la segunda macro, se añaden automáticamente dos nuevas columnas en las posiciones C y D, y se le asigna a la celda C1 el valor “Cafetería” y a la celda D1 el valor “Aeropuerto”. También aquí restablecemos el formato de la celda, copiándolo de otra.
La tercera macro elimina la columna B.
La cuarta macro elimina las filas 3 y 4.
Con la quinta macro restablecemos la hoja con los valores iniciales.
En esta macro he utilizado dos formas diferentes de asignar valores a celdas, y también he aprovechado para refrescar lo aprendido en la Lección 7 sobre cómo automatizar los cambios de atributos de formato en celdas.
Con esto llegamos al final de la octava lección, en la que has aprendido a insertar y eliminar filas y columnas usando macros.
Espero que te esté gustando el curso. Si quieres, puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Nos vemos en el próximo capítulo.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
10 Comentarios
Enviar un comentario
« L7. Automatizar el formato de una celda con macros.
L9. Combinar celdas con macros. »
En excel si tengo en B10 la formula =A1*B2 y posteriormente añado una fila antes de la fila 1, Excel automáticamente corrige la fórmula poniendo =A2*B3. ¿Hay alguna forma para que una macro que yo he hecho también cambie las formulas si se añade alguna fila o columna y no tenga yo que cambiar las posiciones en todas las macros afectadas?
Hola Javier,
Lo único que se me ocurre es que referencies las fórmulas a variables, y no a celdas. No sé que hoja de cálculo tienes montada, si subes un ejemplo podemos verlo.
Saludos.
Hola, estoy siguiendo su curso uno por uno... gracias muy bueno la vdd
En algun modulo se enseñará a correr un macro partiendo de una celda activa?
Tengo hojas de datos en donde por columna necesito calcular valores estadisticos
Gracias
Hola James,
Si. Mira este post: https://www.vbatotal.com/leccion-22-evento-change-de-worksheet-y-el-metodo-intersect-en-vba/
Si tienes cualquier duda, abre un hilo en el foro y te echo una mano.
Saludos.
Buen día!
Espero que se encuentre bien y todavía esté atendiendo consultas.
Mi problema es este:
Lleno diariamente datos en una tabla. Tengo una macro que me hace buena parte del llenado, pero lo que no consigo es que la macro inserte una fila al final de la tabla; siempre las inserta sobre la última fila con información y me descuadra la tabla.
Le ruego que me ayude.
Muchas gracias de antemano!
Buenos días Gonzalo!
Si quieres, puedes abrir un hilo en el foro y subir tu archivo para revisarlo y poder ayudarte.
Saludos!
Hola, me podría ayudar
Necesito un código que me permita ingresar un determinado número de filas en una tabla de datos desde una celda especifica (esta celda contiene el numero de filas que necesito). El lugar de ingreso de las filas siempre es el mismo (al inicio de la base de datos)
Hola Patricia,
¡Muy fácil! Te dejo el código a continuación.
Sub Insertar()
'Guardamos en la variable a el número de filas a insertar
a = Cells(2, "B")
'Añadimos a partir de la fila 5, a columnas
Range(Cells(5, 1), Cells(5 + a, 1)).EntireRow.Insert
End Sub
Si necesitas más ayuda, abre un hilo en el foro y subo un ejemplo.
Saludos.
buenas tardes me puedes orientar
requiero que al leer determinada columna si encuentra el valor 2 agregue una fila hacia abajo si entra el valor 3 agregue 2 filas hacia abajo si encuentra el valor 4 agregue 3 filas hacia abajo
Hola César,
Prueba con el siguiente código...
Sub Buscar()
'Recorremos los datos buscando los números 2 y 3
For i = 5 To 12
'Si encontramos un 2, añadimos una fila
If Cells(i, "C") = 2 Then
Range(Cells(i + 1, "C"), Cells(i + 1, "C")).EntireRow.Insert
End If
'Si encontramos un 3, añadimos dos filas
If Cells(i, "C") = 3 Then
Range(Cells(i + 1, "C"), Cells(i + 2, "C")).EntireRow.Insert
End If
Next
End Sub