Introducir una variable en una FormulaR1C1 VBA

Tengo el siguiente código

ActiveCell.FormulaR1C1 = "=R[-55]C"

Y lo que quiero es remplazar el [-55] por una variable X asiendo esta:}

X = Cells.Find(what:="s27").Offset(0, 1)

Lo escribí de la siguiente manera pero me sale error

ActiveCell.FormulaR1C1 = "=R[&X&]C"

Como se podría escribir ese código? 

Teniendo en cuenta que el codigo completo va asi:

ult = Range("A" & Rows.Count).End(xlUp).Row
rang = ult
Cells(ult + 3, 2).Select
X = Cells.Find(what:="s27").Offset(0, 1)
ActiveCell.FormulaR1C1 = "=R[-55]C"    'código a cambiar por la variable X
Range(Cells(ult + 3, 2), Cells(2 * ult - rang + 3, 2)).AutoFill Destination:=Range(Cells(ult + 3, 2), Cells(ult + 3, 51)), Type:=xlFillDefault

1 respuesta

Respuesta
1

H o l a:

Antes de darte una solución, te explico cada parte de tu código:

Esto significa que toma la última fila con datos de la columna A, a la última fila le suma 3 y selecciona la celda de esa fila y columna B:

ult = Range("A" & Rows.Count).End(xlUp).Row
rang = ult
Cells(ult + 3, 2).Select

Lo que hace esta instrucción

ActiveCell.FormulaR1C1 = "=R[-55]C"

Pone en la celda activa el dato que tienes en la misma columna, pero 55 filas hacia arriba.


Supongo que lo que quieres hacer es encontrar el dato "s27" en la columna A, si lo encuentra, entonces tomar el número de fila donde se encuentra el dato "s27" y ponerlo en la fórmula.

Podría ser así:

    ult = Range("A" & Rows.Count).End(xlUp).Row
    rang = ult
    Cells(ult + 3, 2).Select
    Set b = Columns("A").Find(what:="s27")
    If Not b Is Nothing Then
        ActiveCell = "=B" & b.Row
        Range(Cells(ult + 3, 2), Cells(2 * ult - rang + 3, 2)).AutoFill Destination:=Range(Cells(ult + 3, 2), Cells(ult + 3, 51)), Type:=xlFillDefault
    End If

Prueba y me comentas, si no es lo que necesitas, entonces explícame con ejemplos qué es lo que necesitas y te envío el código.


¡Gracias! Es precisamente lo que necesitaba, además de que quedara formulado ya que lo había logrado de otra forma pero no me quedaba formulado.

Me gustaría que me explicaras esta instrucción

If Not b Is Nothing Then
        ActiveCell = "=B" & b.Row

quisiera entender bien como funciona o en que consiste.

Primero establezco en el variable b el objeto de la celda si es que encuentra el valor buscado:

Set b = Columns("A").Find(what:="s27")

Para saber si encontró el valor buscado, se utiliza lo siguiente:

If Not b Is Nothing Then

Significa que b no está vacío.

Entonces, como en b tengo el objeto celda, puedo obtener el valor de la fila de esa celda con b.row

Y por último, en la celda activa, le digo que ponga la fórmula:

B que significa la columna "B" y b.row, que significa la fila,

Entonces te queda la fórmula:

=B15 por ejemplo.

eso mismo se podría utilizar en este código:

ActiveCell.FormulaR1C1 = "=0.94*R[-28]C+(1-0.94)*R[-1]C"

para remplazar el [-28] por la variable y que de igual forma quede formulado se pueda realizar el Autofill?

Crea una nueva pregunta por cada petición.

Mejor me explicas qué quieres conseguir, ay que esto depende de la celda en la que se encuentra el cursor de excel, a esa ubicación le resta 28 filas, pero yo no sé en qué fila se encuentra el cursor, mejor dime de dónde empezar y en dónde quieres acabar. Todo explicado con lujo de detalle y con ejemplos, pero en una nueva pregunta.

ActiveCell.FormulaR1C1 = "=0.94*R[-28]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas