Necesito mediante una macro en vba insertar filas en excel, según el numero de veces de una celda.

Fila 1 tiene las celdas A4, B4 y C4.. La fila c4 tiene por ejemplo un numero 4 en ese caso necesito insertar debajo de la fila 1 otras tres filas iguales a la uno, pero desplazando todo el documento hacia abajo es decir las filas que están debajo debo mantenerlas. Tengo que hacer lo mismo por cada fila, insertar según el valor de la celda CX... Esto es para luego hacer una combinación de correspondencia con word y de esta manera imprimir tantas etiquetas como necesito, ya que si no las duplico a word me pasaría solo una fila y una vez montado el documento combinado no tengo forma de decirle que cada una me imprima el numro de veces que yo necesito.

1 Respuesta

Respuesta
1

Te anexo la macro

Sub Insertar_Filas()
'Por Dante Amor
    '
    Application.ScreenUpdating = False
    For i = Range("C" & Rows.Count).End(xlUp).Row To 4 Step -1
        n = Range("C" & i).Value
        Rows(i).Copy
        Rows(i & ":" & i + n - 2).Insert Shift:=xlDown
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "fin"
End Sub

.

.

Macro actualizada para cuando tienes 1 etiqueta por generar

Sub Insertar_Filas()
'Por Dante Amor
    '
    Application.ScreenUpdating = False
    For i = Range("C" & Rows.Count).End(xlUp).Row To 4 Step -1
        n = Range("C" & i).Value
        If n > 1 Then
            Rows(i).Copy
            Rows(i & ":" & i + n - 2).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "fin"
End Sub

.

.

La acabo de probar y en cuanto a los datos me hace una cosa rara en la columna B, en esta columna parece que intercala datos de filas, es decir no inserta la fila detrás de A4:C4 idéntica

Columna A y C hace bien pero la B no. En cuanto al numero de repeticiones lo hace bien siguiendo el dato que viene en columna C, inserta tantas veces como se indica. Muchas gracias por vuestra ayuda.

¿Tienes fórmulas en la columna B?

Si formulas en la b y en la c

Lo que hace es copiar en la columna b las fórmulas intercambiadas entre filas es decir, inserta la fila con la columna A bien y en la b aparece lo que sería la copia de lo que tiene en la fila b5 antes de hacer el insert, sin embargo en la columna c que es la misma fórmula lo copia perfecto

¿Y quieres que permanezcan las fórmulas o pueden quedar solamente valores?

Solo valores, de hecho esto es para luego combinar correspondencia desde Word, los duplicados son para luego imprimir todas las etiquetas.

Ejecuta la siguiente para dejar solamente valores

Sub Insertar_Filas()
'Por Dante Amor
    '
    Application.ScreenUpdating = False
    u = Range("C" & Rows.Count).End(xlUp).Row
    Range("A4:C" & u).Copy
    Range("A4").PasteSpecial xlPasteValues
    For i = u To 4 Step -1
        n = Range("C" & i).Value
        If n > 1 Then
            Rows(i).Copy
            Rows(i & ":" & i + n - 2).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "fin"
End Sub

sal u dos

Hola  hace lo siguiente

En las filas uno a tres tengo texto..esto lo cuento por si pudiera estar dando problemas. La macro es para las filas 4 incluida en adelante

Tengo A4 centro 1 B4 21 C4 2

a5 centro 2 B5- 5 C5 2

y al ejecutar la macro queda lo siguiente

A4 centro 1 B4 35 C4 2

A5 centro 1 B5 35 C5 2

A6 centro 2 B6 35 C6 2

A7 centro 2 B7 35 C7 2

a partir de aqui hace la macro perfecta pero en las primeras lineas el valor de la columna A va bien y el de la C tambien, sin embargo en columna B hace mal los valores de las 2 primeras filas.

¿Estás ejecutando la última macro enviada?

Tengo estos datos Antes de ejecutar la macro

Y así quedan después de ejecutar la macro


Pongo nuevamente la macro

Sub Insertar_Filas()
'Por Dante Amor
    '
    Application.ScreenUpdating = False
    u = Range("C" & Rows.Count).End(xlUp).Row
    Range("A4:C" & u).Copy
    Range("A4").PasteSpecial xlPasteValues
    For i = u To 4 Step -1
        n = Range("C" & i).Value
        If n > 1 Then
            Rows(i).Copy
            Rows(i & ":" & i + n - 2).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "fin"
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas