Calcular con la función Si en Access

Necesito calcular el bono de antigüedad en access pero no lo consigo, si la función es simple, con una expresión, una respuesta verdadera y una falsa me sale bien, pero en el caso del bono de antigüedad tengo que poner en una sola fórmula 8 variables diferentes, y no acepta mis opciones escritas, incluso intenté colocarlo como un calculo numérico para que el resultado fuera cero, pero tampoco funcionó.

La fórmula que estoy utilizando es la siguiente:

BonoDeAntiguedad: SiInm([AñosDeAntiguedad]<2,1*0,SiInm([AñosDeAntiguedad]>2<=5,(1805*3)*(5/100),SiInm([AñosDeAntiguedad]>5<=8,(1805*3)*(11/100),SiInm([AñosDeAntiguedad]>8<=11,(1805*3)*(18/100),SiInm([AñosDeAntiguedad]>11<=15,(1805*3)*(26/100),SiInm([AñosDeAntiguedad]>15<=20,(1805*3)*(34/100),SiInm([AñosDeAntiguedad]>20<=25,(1805*3)*(42/100),(1805*3)*(50/100))))))))

Alguien por favor podría ayudarme, ya lo he intentado todo y no lo consigo.

1 Respuesta

Respuesta
2

El error lo tienes en la expresión de la condición a partir del segundo SiInm, pues si quieres analizar que el campo esté entre dos valores no puedes hacerlo así: [AñosDeAntiguedad]>2<=5, sino que has de hacerlo de esta forma: [AñosDeAntiguedad]>2 Y [AñosDeAntiguedad]<=5, e incluso, en este caso te serviría simplemente: [AñosDeAntiguedad]<=5, porque si la antigüedad ya es menor que 2 va a saltar la condición anterior.

Resumiendo, tu expresión quedaría así:

BonoDeAntiguedad: SiInm([AñosDeAntiguedad]<2,0,SiInm([AñosDeAntiguedad]<=5,(1805*3)*(5/100),SiInm([AñosDeAntiguedad]<=8,(1805*3)*(11/100),SiInm([AñosDeAntiguedad]<=11,(1805*3)*(18/100),SiInm([AñosDeAntiguedad]<=15,(1805*3)*(26/100),SiInm([AñosDeAntiguedad]<=20,(1805*3)*(34/100),SiInm([AñosDeAntiguedad]<=25,(1805*3)*(42/100),(1805*3)*(50/100))))))))

Cuando tengas expresiones con tantos SiInm encadenados, o que sean muy largas (access tiene un límite de caracteres para las expresiones) igual te conviene crear una función personalizada en código VBA. Para ello creas un módulo nuevo (lo llamas como quieras, por ejemplo mdlFunciones) y en él escribes tu función (en este caso la llamará fncAntiguedad):

Public Function fncBonoAntiguedad(laAntiguedad as Double) as Double
Select Case laAntiguedad
   Case Is <2
      laAntiguedad=0
   Case Is <=5
      laAntiguedad=(1805*3)*(5/100)
   Case Is <=8
      laAntiguedad=(1805*3)*(11/100)
   Case Is <=11
      laAntiguedad=(1805*3)*(18/100)
   Case Is <=15
      laAntiguedad=(1805*3)*(26/100)
   Case Is <=20
      laAntiguedad=(1805*3)*(34/100)
   Case Is <=25
      laAntiguedad=(1805*3)*(42/100)
   Case Else
      laAntiguedad=(1805*3)*(50/100)
End Select
End Function

Y en tu consulta simplemente pondrías:

BonoDeAntiguedad: fncBonoAntiguedad([AñosDeAntiguedad])

Un saludo.


¡Gracias! Me salvaste la vida, soy nueva en el access y aun no he llevado al vba, así que no tenía ni idea de como solucionarlo. y como en excel se me desconfiguran las fórmulas a cada rato pues no me quedó otra opción que arriesgarme con el access.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas