Usar WorksheetFunction. Para Fórmula pero solo pegue el valor en VBA

Debido a que una hoja de mi libro de trabajo se coloca lenta para desplazarse, quiero usar el objeto worksheetFuntion para las siguientes fórmulas y que pegue solo valores en todo el recorrido de la columna que haya datos. Use el grabador de macros pero no me funciona. Las fórmulas son las siguientes:

1.  =Si.Error(Redondear(o5/30*P5,0),0) =>>con el grabador me muestra:  .FormulaR1C1 = "=IFERROR(ROUND(RC[-3]/30*RC[-2],0),0)"

2.  =si.error(redondear(si(o5>=($C$6*2),0,($C$7/30*P10))),0),0)  ==>"=IFERROR(ROUND(IF(RC[-4]>=(R6C3*2),0,((R7C3/30*RC[-3]))),0),0)"

3. =REDONDEAR(SI(Y(U12>=(+$C$6*4);U12<($C$6*16));(+U12*0.01);SI(Y(U12>=(+$C$6*16);U12<($C$6*17));(+U12*0.012);SI(Y(U12>(+$C$6*17);U12<=($C$6*18));(+U12*0.014);SI(Y(U12>(+$C$6*18);U12<=($C$6*19));(+U12*0.016);SI(Y(U12>(+$C$6*19);U12<=($C$6*20));(+U12*0.018);SI(U12>=($C$6*20);(+U12*0.02);0))))));0)   ==>>>>con el grabador de macros   >>>>.FormulaR1C1 = _
"=ROUND(IF(AND(RC[-7]>=(+R6C3*4),RC[-7]<(R6C3*16)),(+RC[-7]*0.01),IF(AND(RC[-7]>=(+R6C3*16),RC[-7]<(R6C3*17)),(+RC[-7]*0.012),IF(AND(RC[-7]>(+R6C3*17),RC[-7]<=(R6C3*18)),(+RC[-7]*0.014),IF(AND(RC[-7]>(+R6C3*18),RC[-7]<=(R6C3*19)),(+RC[-7]*0.016),IF(AND(RC[-7]>(+R6C3*19),RC[-7]<=(R6C3*20)),(+RC[-7]*0.018),IF(RC[-7]>=(R6C3*20),(+RC[-7]*0.02),0)))))),0)"
Selection.AutoFill Destination:=Range("Y10:Y37")

1 respuesta

Respuesta
1

Como no indicas en qué celda se colocan las fórmulas te paso solo un ejemplo para que puedas avanzar:

Suponiendo que la primera fórmula que mencionas se tuviese que colocar en Q5, la instrucción sería:

[Q5].FormulaR1C1 =  "=IFERROR(ROUND(RC[-3]/30*RC[-2],0),0)"

Y así con cada celda que debiera contener las fórmulas.

Luego sigue el relleno hasta el fin de rango, que suponiendo sea desde la fila 5 hasta la 37 sería así para esa columna Q:

    [Q5].AutoFill Destination:=Range("Q5:Q17"), Type:=xlFillDefault
    With Range("Q5:Q17")
        .Copy
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End With
    Application.CutCopyMode = False

Así sería para cada columna con fórmula. 

Si son columnas continuas podes seleccionar y arrastrar en rangos de columnas, por ej:

[Q5:T5].AutoFill Destination:=Range("Q5:T17"), Type:=xlFillDefault
With Range("Q5:T17")

Espero puedas resoverlo con este ejemplo sino deja todas las aclaraciones posibles. Es muy difícil enviar soluciones precisas si Uds no dejan las referencias.

Sdos y no olvides valorar la respuesta si el tema queda resuelto (opciones: excelente o buena)

Gracias por responder, tendré presente el consejo. Solo me falta por resolver el punto 3, donde esta la fórmula del SI condicional con la función Y.

El resultado (valor) lo pega en la fila 10 de la columna AC, pero al usar la fórmula desde vba el resultado que me muestra es FALSO, en cambio directamente si trabajo la fórmula desde la hoja la fórmula funciona bien.

k=10
'h3.Cells(k, 29) = FormulaR1C1 = "=ROUND(IF(AND(RC[-3]>=(+R6C3*4),RC[-3]<(R6C3*16)),(+RC[-3]*0.01),IF(AND(RC[-3]>=(+R6C3*16),RC[-3]<(R6C3*17)),(+RC[-3]*0.012),IF(AND(RC[-3]>(+R6C3*17),RC[-3]<=(R6C3*18)),(+RC[-3]*0.014),IF(AND(RC[-3]>(+R6C3*18),RC[-3]<=(R6C3*19)),(+RC[-3]*0.016),IF(AND(RC[-3]>(+R6C3*19),RC[-3]<=(R6C3*20)),(+RC[-3]*0.018),IF(RC[-3]>=(R6C3*20),(+RC[-3]*0.02),0)))))),0)"
            k = k + 1

Me toco usar la fórmula que obtuve del grabador de macros, ya que no encontré el If solo para usarlo con el objeto Application.WorksheetFuntion.

 h3.Cells(k, 18) = Application.WorksheetFunction.IfError((Application.WorksheetFunction.Round((Application.WorksheetFunction.Product((Cells(k, 15) / 30), Cells(k, 16))), 0)), 0)
            h3.Cells(k, 20) = Application.WorksheetFunction.IfError((Application.WorksheetFunction.Round((Application.WorksheetFunction.Product((Cells(k, 15) / 30), Cells(k, 17))), 0)), 0)
            h3.Cells(k, 24) = h3.Cells(k, "U").Value + h3.Cells(k, "V").Value + h3.Cells(k, "W").Value
            h3.Cells(k, 25) = h3.Cells(k, "R").Value + h3.Cells(k, "S").Value + h3.Cells(k, "T").Value + h3.Cells(k, "X").Value
            h3.Cells(k, 26) = h3.Cells(k, "R").Value + h3.Cells(k, "T").Value
            h3.Cells(k, 27) = Application.WorksheetFunction.IfError((Application.WorksheetFunction.Round((Application.WorksheetFunction.Product(Cells(k, 26), m)), 0)), 0)
            h3.Cells(k, 28) = Application.WorksheetFunction.IfError((Application.WorksheetFunction.Round((Application.WorksheetFunction.Product(Cells(k, 26), 0.04)), 0)), 0)
            h3.Cells(k, 30) = h3.Cells(k, "AB").Value + h3.Cells(k, "AC").Value
            h3.Cells(k, 35) = h3.Cells(k, "AA").Value + h3.Cells(k, "AD").Value + h3.Cells(k, "AE").Value + h3.Cells(k, "AF").Value + h3.Cells(k, "AG").Value + h3.Cells(k, "AH").Value
            h3.Cells(k, 36) = h3.Cells(k, "Y").Value - h3.Cells(k, "AI").Value
            h3.Cells(k, 29) = FormulaR1C1 = "=ROUND(IF(AND(RC[-3]>=(+R6C3*4),RC[-3]<(R6C3*16)),(+RC[-3]*0.01),IF(AND(RC[-3]>=(+R6C3*16),RC[-3]<(R6C3*17)),(+RC[-3]*0.012))),0)"
            k = k + 1
      

También he visto que se puede usar el if de la siguiente manera pero no la tengo muy clara ya que sería más 5 condiciones

If (condición) Then
      (lo que hace)
  Else
      If  (condición 2)  then
            (lo que hace)
      Else
          (en caso contrario)
         End If
End If

La opción de programar con el bucle IF ... else.... End If es para cuando quieras dejar 'resultados' sino tenés que dejar la fórmula. Y es mejor dejar la que te entrega la grabadora, pero tenés un error de sintaxis al inicio.

Así estaría correcta y observa en la imagen que no da Falso:

h3.Cells(k, 29).FormulaR1C1 = "=ROUND(IF(AND(RC[-3]>=....sigue

Sdos!

Lo que quiero es dejar el resultado, por eso el deseo de aplicar los resultados de las fórmulas mediante vba, ya que me ralentiza la hoja con tantas fórmulas así sea pocos registros (30 o 50)

Corregí el el error de sintaxis y ahora si me funciona bien, pero no deseo la fórmula sino el resultado

Eso ya te lo había respondido al inicio con el ejemplo [Q5].Autofill.... Búscalo por favor en mi primer respuesta...no lo puedo copiar desde aquí.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas