Macro que copie una fórmula hasta ultima fila con datos de una columna

Tengo la siguiente macro y necesito que esa fórmula se copie hacia abajo hasta la ultima fila con datos de la columna A.

Respuesta
1

Joaquin Aravena,

Adjunto código según requerimiento para su revisión. Asumiendo que en la columna A los datos inicia en la celda A1.

Sub ejemplo()
Dim UltFila As Long, Rango As String
UltFila = Range("A1").End(xlDown).Row
Range("iv3").End(xlToLeft).Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-7],R3C2:R1816C2,1,)"
Rango = ActiveCell.Address & ":" & Mid(ActiveCell.Address, 2, 1) & UltFila
Selection.AutoFill Destination:=Range(Rango), Type:=xlFillDefault
End Sub

Por favor no olvidar de valorar las respuestas.

Ander

muchas gracias por tu respuesta.

Esto no esta incluido en la pregunta pero ¿Existe alguna forma de que esa fórmula siempre me tome en cuenta la columna "A" y no el "-7" columnas?

Espero me puedas ayudar con este tema

Joaquien Aravena,

Según lo indicado, adjunto código modificado según requerimiento.

Solo se cambio el estilo de referenciar las celdas.

Sub ejemplo()
Dim UltFila As Long, Rango As String
'Asumiendo que los datos inician en la celda "A1"
UltFila = Range("A1").End(xlDown).Row
Range("i3").End(xlToLeft).Offset(0, 1).Select
'ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-7],R3C2:R1816C2,1,)"
ActiveCell.Formula = "=VLOOKUP($A3,$B$3:$B$1816,1,)"
Rango = ActiveCell.Address & ":" & Mid(ActiveCell.Address, 2, 1) & UltFila
Selection.AutoFill Destination:=Range(Rango), Type:=xlFillDefault
End Sub

Espero que haya haya sido de tu necesidad. Cualquier consulta estaré pendiente.

Por favor, no olvidar de valorar las respuestas.

Ander GS

4 respuestas más de otros expertos

Respuesta
1

Esta macro se posiciona en el rango iv3, cuenta las filas con datos de la columna A y rellena esa porción con la fórmula

Sub ejemplo()
Range("iv3").Select
f = Range("a1").CurrentRegion.Rows.Count
ActiveCell.Resize(f, 1).FormulaR1C1 = "=vlookup(rc[-7],r3c2:r1816c2,1,1)"
End Sub

JB

Muchas gracias por tu respuesta,

Esto no sale en la pregunta pero existe alguna forma de que esa fórmula, al inicio, ¿siempre me tome en cuenta la columna "A" y no el "-7" columnas?

Espero me puedas ayudar con este tema

Saludos

Usa este código es más fácil

Sub ejemplo()
Range("iv3").Select
f = Range("a1").CurrentRegion.Rows.Count
ActiveCell.Resize(f, 1).FormulaLocal = "=BUSCARV(A1,$B$3:$B$1816,1)"
End Sub

Gracias JB pero la macro no me funciona

Te explico un poco la lógica, yo insertare todos los días un listado desde la celda A3 hacia abajo, y quiero que se le haga un buscarv a cada celda de esa columna en comparación con la base que esta en la columna "B".

La idea es que ese buscarv se ejecute siempre tomando en cuenta el listado que ingreso en "A3" y que el resultado de la fórmula se manifieste en la primera columna sin datos, en este caso la columna "H" (Siempre en la fila 3 hacia abajo), mañana necesito que ese resultado se manifieste en "I" y así sucesivamente.

Te adjunto imagen

Entonces lo que requieres es muy diferente a lo que planteaste inicialmente esta imagen es un ejemplo de lo que hace la macro que esta más abajo, una vez que la ejecutas, esta contara las columnas y una columna después de la ultima colocara la fórmula refrenciandola a A3, cada día que la corras ira ampliando la columna.

y esta es la macro

Sub ejemplo2()
With Range("a1").CurrentRegion
    f = .Rows.Count:    c = .Columns.Count
End With
Set datos = Range("a3").Resize(f - 2, c)
With datos
    rango = .Columns(2).Address
    .Columns(c + 1).FormulaLocal = "=BUSCARV(A3," & rango & ",1,0)"
End With
End Sub
Respuesta
1

Va

Sub ejemplo()
    Range("iv3").End(xlToLeft).Offset(0, 1).Select
    u = Range("A" & Rows.Count).End(xlUp).Row
    col = ActiveCell.Column
    With Range(Cells(ActiveCell.Row, col), Cells(u, col))
        .Formula = "=VLOOKUP(RC[-7],R3C2:R1816C2,1,)"
    End With
End Sub

sal u dos

¡Gracias! 

Dante, como siempre, muchas gracias por tu respuesta, la cual me sirvió mucho.

Ahora, esto no esta incluido en la pregunta pero ¿Existe alguna forma de que esa fórmula siempre me tome en cuenta la columna "A" y no el "-7" columnas?

Espero me puedas ayudar con este tema

La siguiente macro siempre va a buscar el valor de la columna A en el rango de celdas de la columna B

Sub Macro7()
    uf = Range("A" & Rows.Count).End(xlUp).Row
    uc = Cells(2, Columns.Count).End(xlToLeft).Column + 1
    With Range(Cells(3, uc), Cells(uf, uc))
        .FormulaR1C1 = "=VLOOKUP(RC1,R3C2:R" & uf & "C2,1,1)"
    End With
End Sub

Según tu ejemplo la coincidencia que esperas es aproximada, por eso al final de la fórmula tiene un 1, pero si quieres una coincidencia exacta entonces cambia en la fórmula a 0:

Sub Macro7()
    uf = Range("A" & Rows.Count).End(xlUp).Row
    uc = Cells(2, Columns.Count).End(xlToLeft).Column + 1
    With Range(Cells(3, uc), Cells(uf, uc))
        .FormulaR1C1 = "=VLOOKUP(RC1,R3C2:R" & uf & "C2,1,0)"
    End With
End Sub

Los valores que no encuentre te los va a regresar con #N/A

Sal u dos

Respuesta
1

Supongamos que la celda donde se encuentra la fórmula sea iv3, entonces

Range("iv3"). Copy
Range("iv4:iv" & Range("A" & Rows. Count).End(xlUp). Row). PasteSpecial xlPasteAll

Respuesta
-1

Insisto ¿cuál es el sentido de que varios respondan lo mismo?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas