Quiero hacer una función en excel para calcular el impuesto a las ganancias

Hice esta macro para hacer hacer una función definida por el usuario, algo estoy haciendo mal por que no funciona

Public Function Impuesto(Importe)

Importe = Range("T53").Value
If Importe < 47699.16 Then
Importe = Importe * 0.05
ElseIf Importe > 47699.16 < 95338.32 Then
Importe = 2383.46 + (Importe - 47699.16) * 0.09
ElseIf Importe > 95338.32 < 143007.48 Then
Importe = 6366.78 + (Importe - 95338.32) * 0.12
ElseIf Importe > 143007.48 < 190676.65 Then
Importe = 12393.88 + (Importe - 143007.48) * 0.15
ElseIf Importe > 190676.65 < 286014.96 Then
Importe = 19544.36 + (Importe - 190676.65) * 0.19
ElseIf Importe > 286014.96 < 318353.28 Then
Importe = 37658.64 + (Importe - 286014.96) * 0.23
ElseIf Importe > 318353.28 < 572029.92 Then
Importe = 59586.45 + (Importe - 318353.28) * 0.27
ElseIf Importe > 572029.92 < 762706.57 Then
Importe = 111069.14 + (Importe - 572029.92) * 0.31
ElseIf Importe > 762706.57 Then
Importe = 170178.9 + (Importe - 762706.57) * 0.35
End If
End Function

1 Respuesta

Respuesta
1

La función trabaja de la siguiente manera, recibe uno o varios parámetros y regresa un resultado.

En este caso el parámetro de entrada es un importe, ese importe puede estar en una celda.

Por ejemplo si en la celda B2 tienes el importe y quieres conocer el impuesto, entonces en la celda que quieres el resultado escribes la función, por ejemplo, pon la función en la celda C2

=Impuesto(B2)


Prueba con el siguiente código:

Public Function Impuesto(Importe As Double)
  Dim valor As Double
  Select Case Importe
    Case Is < 47699.16
      valor = Importe * 0.05
    Case Is < 95338.32
      valor = 2383.46 + (Importe - 47699.16) * 0.09
    Case Is < 143007.48
      valor = 6366.78 + (Importe - 95338.32) * 0.12
    Case Is < 190676.65
      valor = 12393.88 + (Importe - 143007.48) * 0.15
    Case Is < 286014.96
      valor = 19544.36 + (Importe - 190676.65) * 0.19
    Case Is < 318353.28
      valor = 37658.64 + (Importe - 286014.96) * 0.23
    Case Is < 572029.92
      valor = 59586.45 + (Importe - 318353.28) * 0.27
    Case Is < 762706.57
      valor = 111069.14 + (Importe - 572029.92) * 0.31
    Case Else
      valor = 170178.9 + (Importe - 762706.57) * 0.35
  End Select
  'Para retornar el resultado debes poner el nombre de la función y el resultado:
  Impuesto = valor
End Function

Encontré una fórmula para calcular el impuesto, tal vez sea más simple si tienes los valores en una lista. Puse los valores, los de la suma y los porcentajes en arreglos, pero también los podrías tener en celdas en alguna hoja.

Funciona de la misma manera, en la celda C2 escribe la función =Impuesto(B2)

Public Function Impuesto(importe As Double)
  Dim arr1 As Variant, arr2 As Variant, arr3 As Variant
  Dim j As Long
  '
  Arr1 = Array(0, 47699.16, 95338.32, 143007.48, 190676.65, 286014.96, 318353.28, 572029.92, 762706.57, 9.99E+307)
  arr2 = Array(0, 0.05, 0.09, 0.12, 0.15, 0.19, 0.23, 0.27, 0.31, 0.35)
  Arr3 = Array(0, 2383.46, 6366.78, 12393.88, 19544.36, 37658.64, 59586.45, 111069.14, 170178.9)
  '
  For j = 0 To UBound(arr1)
    If importe < arr1(j) Then
      Impuesto = arr3(j - 1) + (importe - arr1(j - 1)) * arr2(j)
      Exit For
    End If
  Next
End Function

¡Gracias! Excelente respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas