Intercalar filas en blanco con Macros o VBA
El Excel no dispone de una manera fácil para realizar la función de intercalar filas en un rango Sin embargo; existe una solución el cual consiste en realizar una macro que simplifique esta función o lo ejecute por nosotros. En el caso de VBA Excel Avanzado Macros aplicado a Intercalar filas alternas en un rango para realizar esta función necesitamos hacer un recorrido por las filas del rango en sentido contrario al usual lo que significa empezaremos de abajo a arriba de la última fila a la primera, para ello usaremos el método Insert. Este orden nos asegurara al que que cuando insertemos nuevas filas no afecte a los siguientes insertados, lo que si pasaría cuando empezamos de las filas superiores a las inferiores y Dentro del Explorador de proyectos del Editor de VBA, insertaremos en un Módulo el siguiente código de nuestra macro de Excel ejecutando la siguiente macro:
Sub intercalado()
Set Rng = Range("A1:A10")
'controlamos la primera y última fila
'donde se encuentra el rango a intercalar
rng1 = Rng.Item(1).Row
rng10 = Rng.Item(Rng.Count).Row
'inhabilitamos la actualización o refresco de pantalla
Application.ScreenUpdating = False
'recorremos en orden inverso las filas del rango
For i = rng10 To rng1 + 1 Step -1
'insertando filas y desplazándolas hacia abajo
'como pretendíamos
Rng.Item(i).Insert Shift:=xlDown
Next i
'reactivamos el refresco de pantalla
Application.ScreenUpdating = True
End Sub
Aquí podemos apreciar como insertamos los respectivos comandos ya mencionados a VBA para realizar nuestro propósito de intercalar las filas.
un ejemplo :
El Antes
El resultado de aplicar la función en macros
Roger canales Valenzuela .
11/10/2014 a las 8:58 am
yo busco algo a si, pero que haga lo contrario, si tengo en en una columna datos con celdas vacias , hacer una macro que acomodoe todos los datos si celdas vacias
01/04/2016 a las 8:58 am
necesito intercalar filas en blanco cada dos filas con datos
11/05/2016 a las 12:38 pm
Hola, estoy creando una macro que activa un autofiltro en una hoja y pone una condición fija, selecciona las filas resultantes, las copia y las pega en una hoja fija en la posición A2, vuelve a la hoja anterior y elimina las filas copiadas y desactiva el autofiltro, lo hice asi porque si las cortaba no conseguia pegarlas, esto funciona bien.
El problema es que no quiero pegar en la hoja de destino porque si ya hay filas con datos me las elimina y quiero mantenerlas y que las nuevas filas se inserten a partir de la posición a2 o fila 2 y me mantenga las anteriores que habrá desplazado hacia abajo.
Se simplificaría mucho cortándolas de la hoja origen e insertándolas en la hoja destino en la posición de la fila2 o a2, esto no lo consigo, si corto no puedo pegar, solo si copio, tanto si corto como si copio no puedo insertar.
Adjunto el código por si alguien me puede echar una mano u orientar un poco.
Sub Copiar()
' mueve los datos de 22100 a la hoja de energia electrica
' hace que no se visualice la ejecución de la macro
Application.ScreenUpdating = False
' establece el filtro automático
Sheets("Informe de Dotaciones").Select
Range("A1").Select
Selection.AutoFilter
' establece el criterio 22100
Selection.AutoFilter Field:=5, Criteria1:="22100"
'Definir objetos a utilizar
Dim wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
rngDestino As Excel.Range
'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Informe de Dotaciones")
Set wsDestino = Worksheets("energia electrica")
'Indicar la celda de origen y destino
Const celdaOrigen = "A2"
Const celdaDestino = "A2"
'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Range(celdaDestino)
'Seleccionar rango de celdas origen
rngOrigen.Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteAll
'borra las filas copiadas y quita autofiltro
Selection.Delete Shift:=xlUp
Selection.AutoFilter
End Sub
Si utilizo este código en vez de Pegar datos en celda destino no me funciona.
'Insertar datos en celda destino
Sheets("energia electrica").Select
Sheets("energia electrica").Range("A2").Select
Selection.Insert Shift:=xlDown
Gracias por el tiempo y la ayuda.
Un saludo.