¿Puedo aplicar una fórmula a toda la columna, hasta el ultimo numero de la hoja?

Tengo una tabla, que estará cambiando constantemente, no por digitar nuevos datos, si no que solamente se pegara en la hoja la tabla ya sea con 1 dato o con 10000 datos. He creado una macro que me genere un tipo aviso de vencimiento, pero yo quiero que se aplique a todo el rango de la columna hasta el ultimo numero de la hoja para que así cuando se pegue una tabla de 10000 datos, se aplique la macro para los 10000 datos. PERO mientras pego una tabla de 50 datos, la macro me aplica la fórmula en toda la columna hasta el ultimo numero, pero no quiero que me de resultados, si no hasta que estas se llenen de datos. Hay una forma para que si se aplique la fórmula para toda la columna, ¿pero quede inactiva hasta que hayan datos?

2 Respuestas

Respuesta

Tienes que agregarle esto a tu código:

'Identifica la última fila que contiene datos

Dim ultimaFila As Long

    ultimaFila = Range("A" & Rows.Count).End(xlUp).Row

End Sub

Respuesta

Comparta la macro para ver como esta y poder agregar a la macro para que unicamente llegue a la ultima fila de datos.

Sub formula()
'
' formula Macro
'
'
      Application.ScreenUpdating = False
Range("I4").Select
    Range("I4").FormulaLocal = "=SI(H4>0,SIFECHA(G4,H4,""d""),SIFECHA(G4,$D$1,""d""))"
    Selection.AutoFill Destination:=Range("I4:I96")
    Range("I4:I96").Select
    Range("I4").Select
    Range("K4").Select
    Range("K4").FormulaLocal = "=SI(J4>0,SIFECHA(H4,J4,""d""),SI(H4>0,SIFECHA(H4,$D$1,""d""),SIFECHA(G4,$D$1,""d"")))"
    Range("K4").Select
    Selection.AutoFill Destination:=Range("K4:K96")
    Range("K4:K96").Select
    Range("I4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("K4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlGeneral
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("K4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("Z4").Select
    Range("Z4").FormulaLocal = "=SI(I4<=2,I4,-I4)"
   Range("Z4").Select
    Selection.AutoFill Destination:=Range("Z4:Z96")
    Range("Z4:Z96").Select
    Range("Z4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("AA4").Select
    Range("AA4").FormulaLocal = "=SI(O4=""NO"",SI(Y(Z4<0,H4=""""),""VENCIDO SIN AUTORIZAR"",SI(Y(Z4<0,H4>0),""AUTORIZADA CON VENCIMIENTO"",SI(H4>0,""AUTORIZADA SIN VENCIMIENTO"",SI(Z4=2,""POR VENCER"",SI(Y(Z4<=1,G4=$D$1,H4=""""),""CON TIEMPO"",""""))))),""ANULADA"")"
    Range("AA4").Select
    Selection.AutoFill Destination:=Range("AA4:A96")
    Range("A4:A96").Select
    Range("AA4:AA51").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("AB4").Select
    Range("AB4").FormulaLocal = "=SI(K4<=2,K4,-K4)"
    Range("AB4").Select
    Selection.AutoFill Destination:=Range("AB4:AB96")
    Range("AB4:K96").Select
    Range("AB4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("AC4").Select
    Range("AC4").FormulaLocal = "=SI(O4=""NO"",SI(Y(AB4<0,J4="""",H4>0),""VENCIDO SIN AUTORIZAR"",SI(Y(AB4<0,H4="""",J4=""""),""VENCIDO Y SIN AUTORIZAR EN LA I ETAPA"",SI(Y(AB4<0,J4>0),""AUTORIZADA CON VENCIMIENTO"",SI(J4>0,""AUTORIZADA SIN VENCIMIENTO"",SI(AA4=""POR VENCER"",""POR VENCER EN LA I ETAPA"",SI(AA4=""CON TIEMPO"",""CON TIEMPO EN LA I ETAPA"",SI(Y(H4>0,AB4<=1,H4=$D$1),""CON TIEMPO"",SI(AB4=2,""POR VENCER"","""")))))))),""ANULADA"")"
    Range("AC4").Select
    Selection.AutoFill Destination:=Range("AC4:AC96")
    Range("AC4:AC96").Select
    Range("AC4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("AC:AC").ColumnWidth = 40.57
    Range("Z4").Select
End Sub

Esta es, lo que quiero es que aplique la formula para toda la columna aunque no haya datos, porque yo voy a pegar una tabla nueva, no voy a digitar datos, así que ya probé con otro tipo de código que solo funcionaba si yo digitaba nuevos datos a la tabla, pero en mi caso una tabla nueva se a pegar, no se digitaran datos nuevos, si no que solamente cambiara el tamaño de la tabla por el hecho de pegar una nueva. pero al hacer lo que yo hice, en la ultima foto, si me aplicaba la formula para toda la columna, pero en ese caso no tenia

No me queda muy claro lo que intenta hacer. En la imagen se ven registros en blanco y supongo que las fórmulas son las que se pegan y que comenta que no necesita que se muestren las fórmulas hasta que tengan datos. Por otro lado al ver su macro quizá se pueda mejorar y de esta manera corregir lo que primero comento.

Si sube un archivo con datos ficticios y comenta como hace el proceso de copiado de su información, le puedo ayudar a mejorar su macro y corregir la inconsistencia que presenta cuando pega menos datos.

https://drive.google.com/drive/folders/1Frfk77nNQURmJC1Ki_DxmG8qjtL_7bDA?usp=sharing 

En el botón de mostrar vencimientos, la macro "PRUEBA5PASO3" hay unas cosas que solo hacen la función de centrar el texto de la celda

Sale este mensaje al correr la macro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas