Que tengo mal en el siguiente código que no deja la celda bien formulada?

Tengo el siguiente código:

ult = Range("A" & Rows.Count).End(xlUp).Row 'conteo de dilas hasta el ultimo valor en "A"
Set n = Columns("A").Find(What:="1")
Set b = Columns("A").Find(What:="trimestres").Offset(1, 0)
If Not b Is Nothing And Not n Is Nothing Then
Cells(ult + 4, 2) = "=IF(A" & n.Row & "="""","""",IF(A" & n.Row & "=1,B" & b.Row & ",IF(A" & n.Row & "=27,B" & b.Row & ",IF(A" & n.Row & "=55,B" & b.Row & ",0.94*B" & b.Row & "+(1-0.94)*R[-1]C))))"
End if

Pero cuando veo la celda de Excel en la que queda la formula, la celda muestra esto "#¿NOMBRE?" pero formulada de la siguiente manera:

=SI('A263'="";"";SI('A263'=1;'B263';SI('A263'=27;'B263';SI('A263'=55;'B263';0,94*'B263'+(1-0,94)*B351))))

Como logro que quede pero sin esas comillas que impiden que tome la celda o el rango que le indico, la idea es que no tenga esto ' .

Y aun mejor, como podría lograr para que cada rango de "A" que tabulado, mas bien que quede formulada de esta forma:

SI($A263="";"";SI($A263=1;B263;SI($A263=27;B263;SI($A263=55;B263;0,94*B263+(1-0,94)*B351))))

1 respuesta

Respuesta
1

Prueba con la siguiente:

    ult = Range("A" & Rows.Count).End(xlUp).Row 'conteo de dilas hasta el ultimo valor en "A"
    Set n = Columns("A").Find(What:="1")
    If Not n Is Nothing Then
        fila = n.Row
        Set b = Columns("A").Find(What:="trimestres").Offset(1, 0)
        If Not b Is Nothing And Not n Is Nothing Then
            Cells(ult + 4, 2) = "=IF(A" & fila & "="""","""",IF(A" & fila & "=1,B" & b.Row & ",IF(A" & fila & "=27,B" & b.Row & ",IF(A" & fila & "=55,B" & b.Row & ",0.94*B" & b.Row & "+(1-0.94)*B" & b.Row + 2 & "))))"
        End If
    End If

Gracias es más o menos lo que requiero, pero no se si es posible que el rango A quede absoluto, solo la columna, no el valor y que el ultimo valor de la fórmula tome el valor de la fila de arriba en la que se activa la fórmula.

SI($A263="";"";SI($A263=1;B263;SI($A263=27;B263;SI($A263=55;B263;0,94*B263+(1-0,94)*B351))))

El B351 sea algo así como un R[-1]C.

Esto a razón de que al hacerle un Autofill, las celdas de la fórmula que corresponden a "A" no se deben correr y pasar a "B" si no que deben seguir fijas en A, solo se moverá de fila y no de columna al hacer un Autofill.

No se si me explique bien

Macro actualizada:

    ult = Range("A" & Rows.Count).End(xlUp).Row 'conteo de dilas hasta el ultimo valor en "A"
    Set n = Columns("A").Find(What:="1")
    If Not n Is Nothing Then
        fila = n.Row
        Set b = Columns("A").Find(What:="trimestres").Offset(1, 0)
        If Not b Is Nothing And Not n Is Nothing Then
            Cells(ult + 4, 2) = "=IF($A" & fila & "="""","""",IF($A" & fila & "=1,B" & b.Row & ",IF($A" & fila & "=27,B" & b.Row & ",IF($A" & fila & "=55,B" & b.Row & ",0.94*B" & b.Row & "+(1-0.94)*B" & b.Row + 2 & "))))"
        End If
    End If

Esto no lo entiendo: "El B351 sea algo así como un R[-1]C."

Según la macro, te debe de poner la fórmula en B352 y por lo tanto te debe poner *B351.

Si no es así, envíame tu archivo para revisar cómo están los datos, ya que como comprenderás, no estoy probando con tus datos y no sé qué es lo que esperas.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Alejandro Guerrero” y el título de esta pregunta.

Si ya se solucionó la fórmula. Recuerda valorar.

S a l u d o s . D a n t e   A m o r

Ya te envié el documento al correo. Muchas gracias por la ayuda que me estas brindando. 

Así quedaría la macro:

    ult = Range("A" & Rows.Count).End(xlUp).Row
    Set b = Columns("A").Find(What:="trimestres")
    If Not b Is Nothing Then
        fila = b.Row + 1
        Cells(ult + 4, 2) = "=IF($A" & fila & "="""","""",IF($A" & fila & "=1,B" & fila & ",IF($A" & fila & "=27,B" & fila & ",IF($A" & fila & "=55,B" & fila & ",0.94*B" & fila & "+(1-0.94)*B" & ult + 3 & "))))"
    End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas