Macro Excel para copiar línea seleccionando la 2º después de la ultima

Recurro a ti para que me metas dedo en esta macro que quiero que tenga algo similar

Range("A65536").End(xlUp).Offset(2, 0).Select

en esta macro

Sub inserta_Lineas() 'PEGONES1
'Insertar lineas y tambien formas y fomatos de linea B selecionada, en todas las celdas que contengan formatos y formulas desde _
la celda selecionada en B al la cantidad insertada en el ImputBox
        Application.ScreenUpdating = False
        On Error GoTo Jota
'    With Sheets("Cobra_Gastos")
        a = InputBox("Ingrese el Número de Lineas a Insertar", "Número de Lineas", 1) 'si inserta 0 sale de la macro sin insertar linea)
        If a <= 0 Then Exit Sub
''Para Sustitui linea On Error GoTo Jota
    'If a = "" Then
    '    MsgBox "Proceso cancelado", vbInformation, "AVISO"
    '    Exit Sub
    'End If
'b (la variable) toma el número de la fila de la celda activa
        b = ActiveCell.Row
        For i = 1 To a
'            .Select
'Selecciona toda la fila, según lo que tiene la variable b
            Rows(b).Select
'Inserta la linea anterior seleccionada en B
            Selection.EntireRow.Insert
'Copia de la fila anterior los formatos y formulas
            Rows(b - 1).Copy
'Pega los formatos copiados, en las líneas insertadas
            Rows(b).PasteSpecial Paste:=xlPasteFormats
'Copia la fórmula de la I anterior
            Range("I" & b - 1).Copy
'Pega las formulas en celdas celdas I insertadas
            Range("I" & b).PasteSpecial Paste:=xlPasteFormulas
'Desactivar seleccion
            Application.CutCopyMode = False
        Next i
 '   End With
    'Range("D12").Select
Jota:
        Application.ScreenUpdating = True
End Sub

Cosa que trate meterla fuera en un punto  ootro pero sin resultado.

La macro esta para que YO, MANUALMENTE, seleccione la celda en la columna B, celda la cual va a copiar de la anterior sus fórmulas y formatos pero NO VALORES y pegará las líneas que pida en el Input.

Lo que pretendo es que NO SEA YO MANUALMENTE a seleccionar la celda, pero que sea la propia macro a hacerlo, la celda a seleccionar pido sea la 2ª después de la ultima ocupada, tal como lo indica la línea expuesta al inicio de mi comentario. ¿Posible?

1 Respuesta

Respuesta
1

Prueba así:

Sub inserta_Lineas() 'PEGONES1
    'Insertar lineas y tambien formas y fomatos de linea B selecionada, en todas las celdas que contengan formatos y formulas desde _
    la celda selecionada en B al la cantidad insertada en el ImputBox
    Range("B65536").End(xlUp).Offset(2, 0).Select
    Application.ScreenUpdating = False
    a = InputBox("Ingrese el Número de Lineas a Insertar", "Número de Lineas", 1) 'si inserta 0 sale de la macro sin insertar linea)
    If a <= 0 Then Exit Sub
    b = ActiveCell.Row
    For i = 1 To a
        Rows(b).Select
        'Inserta la linea anterior seleccionada en B
        Selection.EntireRow.Insert
        'Copia de la fila anterior los formatos y formulas
        Rows(b - 1). Copy
        'Pega los formatos copiados, en las líneas insertadas
        Rows(b).PasteSpecial Paste:=xlPasteFormats
        'Copia la fórmula de la I anterior
        Range("I" & b - 1). Copy
        'Pega las formulas en celdas celdas I insertadas
        Range("I" & b).PasteSpecial Paste:=xlPasteFormulas
        'Desactivar seleccion
        Application.CutCopyMode = False
    Next i
End Sub

sal u dos

Esta pegando las líneas al inicio de la hoja

No se si viste el mail que te envíe con 2 imágenes, Voy a agregar una sola para que veas como es la hoja

Tiene datos (encabezado) y lñuego el final de hoja como puedes ver abajo.

La o las líneas a insertar serian (en el caso de la imagen, seleccionar la B80 que copia los formatos y fórmulas de la línea 79 y a partir de la 80 inserta las 10 líneas.

Com o dije en el mail, la hoja puede llegar a tener 100, 250 o muchas más líneas que van en esta imagen de la 11 (títulos) hasta la 86 como puedes ver pero mañana puede estar ya en 90 o 100

Las 1ªs 2 líneas que ves, es donde esta a insertar. Conmigo también me lo hacia al ir probando porque no se como hacer para que tome en cuenta la ultima ocupada (78) que mañana pueder ser la 100

No están completas las imágenes.

Te explico.

Con esta instrucción:

Range("A65536").End(xlUp).Offset(2, 0).Select

Seleccionas la última fila con datos de la columna A

         Range("A"

Si pones esto:

Range("B65536").End(xlUp).Offset(2, 0).Select

Entonces seleccionas las última fila con datos de la columna B

Range("B"


En tus explicaciones no mencionas cuál es la columna que quieres que se considere para busca el último dato.

Digo que tus imágenes están incompletas, porque a una le faltan las columnas y a la otra le faltan las filas.


Mejor envíame tu archivo y me explicas con comentarios y con colores claramente en dónde quieres insertar las filas.

Sal u dos

Si claro, cierto pero aquí la corregí a la B65536 pero como encuentra la descripción al fondo de la hoja y al inicio el encabezado, ahí es donde esta el problema mio

En la columna C abajo tiene Notas:

así

    Range("c65536").End(xlUp).Offset(-3, 0).Select

Pero si solo Notas: abajo otras celdas en la C tienen datos?

Notas en la hoja actual esta en C93 per osi la C93, C94, 95 tuvieran algo escrito? entonces el Offset tendria d eir de acorde con las lineas ocupadas en C? en ves de -3 serian de acordo a las ocupadas en C al final.

A ver que inventas por ahí

Te anexo la macro actualizada:

Sub inserta_Lineas() 'PEGONES1
'Por.Dante Amor
    Application.ScreenUpdating = False
    a = InputBox("Ingrese el Número de Lineas a Insertar", "Número de Lineas", 1) 'si inserta 0 sale de la macro sin insertar linea)
    If a <= 0 Then Exit Sub
    '
    For i = 11 To Range("C" & Rows.Count).End(xlUp).Row
        If Cells(i, "C") = "" Then fila = i: Exit For
    Next
    Rows(fila & ":" & fila + a - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows(fila - 1).Copy
    Rows(fila & ":" & fila + a - 1).PasteSpecial Paste:=xlPasteFormats
    Range("I" & fila - 1).Copy
    Range("I" & fila & ":I" & fila + a - 1).PasteSpecial Paste:=xlPasteFormulas
    Range("C" & fila).Select
    Application.CutCopyMode = False
End Sub

sal u dos

Bien, muy bien, de rechupete y más corta con la auto-funcionalidad

Gracias DAM

Pido si me lo permites darme alguna explicación (comentar) sobre tu macro. Este 11 me tiene pensando

For i = 11 To Range("C" & Rows.Count).End(xlUp).Row

lo cambie a 7 y me hizo desastre

Declare fila

Dim fila  ¿como seria lo corecto?

dim fila

o

dim fila as integer

o

dim fila as double

o

dim fila as variant


En serio, no te preocupes en declarar las variables.

VBA las declara en automático como variant


La desventaja es que las variables de tipo Variant requieren al menos de 16 bytes de memoria, lo que puede representar una cantidad importante en procedimientos de gran tamaño o en módulos complejos.

Pero tu procedimiento ni es de gran tamaño ni es complejo.


Otro motivo por el cual se declaran las variables es por que tienes procedimiento muy grandes y de esa forma puedes controlar las variables que no has declarado, para ello te auxilias de la instrucción Option Explicit.

Pero este procedimiento no es muy largo.


Y ya por último, le puse 11 por que en esa fila empiezan tus datos.

ha ha pero algunas veces enpiezan en 7 es decir que puede que solo tenga 2 lineas vacias y eso cuenta

For i = 7 To Range("C" & Rows.Count).End(xlUp).Row

pero cuando hice el cambio a 7, me mando error, o mejor dicho me inserto las lineas arriba de todo

Ahí las inserto porque me di cuenta de que obligatoriamente tengo que tener 11 filas contando de abajo hacia arriba o, 7 de la misma manera, 7 serian tener 2 para  datos, vacias, algo así

Yo te pregunto si esa parte podria ser variable, es decir, si tengo solo 2 para datos o solo 5, o 10 porque tal como esta,  obliga a tener las 7 (2) disponibles, en caso  de tu macro

For i = 11 To Range("C" & Rows.Count).End(xlUp).Row

11 (6) disponibles

Ya sabes que es una pregunta por petición.

Ya modifiqué la macro y no habías comentado dónde inician tus datos.

Además te respondí sobre el uso de variables.

Y por último, tus imágenes están incompletas, no se ven las filas y las columnas. Crea las preguntas respectivas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas