Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Intercalar filas en blanco con Macros o VBA

| 3 comentarios

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

p

Roger canales Valenzuela .

3 comentarios

  1. 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

  2. necesito intercalar filas en blanco cada dos filas con datos

  3. 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.

Deja una respuesta

Los campos requeridos estan marcados con *.