jueves, 7 de septiembre de 2017

Amortizaciones contables de Inmovilizado en Excel

Si estás leyendo este post es porque estás familiarizado con los conceptos contables y fiscales de las amortizaciones de inmovilizado.
La idea de una amortización o depreciación consiste básicamente en controlar cómo pierde valor un activo de nuestra empresa a lo largo del tiempo.
Solo necesitamos conocer algunos conceptos muy simples, que a grandes rasgos serían:
Costo: valor de compra
Valor residual: valor del bien al final de su vida
Fecha compra/adquisición: pues eso mismo
Fecha fin primer periodo: la fecha en que consideramos termina el primer periodo de vida (normalmente final de año).
Tasa o porcentaje de amortización: tasa o tanto por ciento en que se realizará la depreciación del activo (relacionado inversamente con la vida útil del bien: Vida = 1 / tasa)
Normalmente tabuladas en base a normas contables y/o fiscales.
Vida útil: en base a la tasa (tasa = 1 / vida).


Lo habitual es aplicar un método de amortización lineal o directo basado en una sencilla fórmula:
=(Costo - Valor residual) / años vida útil
aunque existen otros muchos métodos, como porcentaje constante, números dígitos, etc...

Hablando en términos de Excel, se nos ofrecen unas cuantas funciones que facilitan el cálculo de todos estos métodos.
Las funciones siguientes responden a un metodología de cálculo, tal como se indica a continuación:
AMORTIZ.LIN - Depreciación lineal prorrateada - (sistema contable francés)
AMORTIZ.PROGRE - Depreciación lineal prorrateada - (sistema contable francés)
SLN -Método directo
SYD - Método de anualidades o dígitos
DB - Método de saldo fijo
DDB - Método doble disminución
DVS-Método doble disminución


Veamos la siguiente imagen donde se despliegan todas las funciones existentes:



Repasamos rápidamente la sintáxis de cada función empleada.

En la celda C10 hemos empleado la función de AMORTIZACIÓN LINEAL
=AMORTIZ.LIN(costo; fecha_compra; primer_período; costo_residual; período; tasa; [base])

en concreto para nuestro ejemplo:
=AMORTIZ.LIN($C$1;$C$2;$C$3;$C$4;$B10;$C$5;1)

con los resultados que se observan en la imagen anterior.
Se comprueba, como curiosidad del método, que se procede al cálculo sobre el Costo, sin considerar el valor residual, i.e., en el ejemplo para cada periodo se realiza el cálculo:
=Costo/vida útil
=10.000/8 años = 1.250,00
pasando los años, hasta completar el último valor por diferencias y llegar al Valor residual.


La siguiente función que vemos es la AMORTIZACION PROGRESIVA
=AMORTIZ.PROGRE(costo; fecha_compra; primer_período; costo_residual; período; tasa; [base])

en nuestra tabla en la celda D10 tenemos:
=AMORTIZ.PROGRE($C$1;$C$2;$C$3;$C$4;$B10;$C$5;4)

Fijémonos en la particularidad de la suma tras todos los periodos de la amortización acumulada, que excede de los 8.500 esperados.
Esta función devuelve la amortización hasta el último período de vida del bien o hasta que el valor acumulado de dicha amortización sea mayor que el valor inicial de compra del bien menos el valor residual.
Ha tener presente para el cálculo interno:
Vida útil del bien(=1/tasa) //// Coeficiente de amortización
Entre 3 y 4 años //// 1,5
Entre 5 y 6 años //// 2
Más de 6 años ///// 2,5

Esta es sin duda la función más extraña y compleja de entender...


Otra función más, la más simple, es la función SLN que responde al método lineal o directo:
=SLN(costo, valor_residual, vida)


En la celda E10 tenemos:
=SI($B10<(100/$C$5/100);SLN($C$1;$C$4;1/$C$5);0)
he incorporado un condicional para controlar el exceso de la cuota de amortización sobre la vida útil determinada.
Mientra el periodo concreto de estudio (celda B10) sea menor a la vida útil, aplicaremos el cálculo.

La función SYD trabaja empleando el método de anualidades (también conocido como de dígitos)
=SYD(costo, valor_residual, vida, período)

En F10 insertamos:
=SI.ERROR(SYD($C$1;$C$4;1/$C$5;$B10);0)
Se comprueba que existe una caída en las cuotas de amortización según avanzamos en la vida del bien.


Una nueva función sería DB, que utiliza el método de saldo fijo. Su sintáxis:
=DB(costo; valor_residual; vida; período; [mes])

y en nuestro ejemplo, en la celda G10:
=SI.ERROR(DB($C$1;$C$4;1/$C$5;$B10);0)
de forma similar, no igual, a la anterior función SYD, se verifica que las cuotas disminuyen de acuerdo al paso del tiempo.


Las dos últimas funciones DDB y DVS son equivalentes según definamos ciertos arguementos.
Ambas trabajan bajo un entorno de doble disminución... si bien, este factor doble es configurable.
Sus sintáxis:
=DDB(costo, valor_residual, vida, período, [factor])
=DVS(costo, valor_residual, vida, período_inicial, período_final, [factor], [sin_cambios])

El argumento [sin_cambios] puede hacerlas iguales o con un comportamiento distinto, similar a SLN.

En nuestro ejercicio hemos escrito en H10:
=SI.ERROR(DDB($C$1;$C$4;1/$C$5;$B10);0)

y en I10:
=SI.ERROR(DVS($C$1;$C$4;1/$C$5;$B10-1;$B10);0)


En la siguiente entrada del blog replicaremos los cálculos que realizan estas funciones de manera interna para comprender mejor qué estamos obteniendo.
Una futura entrada muy interesante...

3 comentarios:

  1. Buenas!
    Artículo muy útil. Muchísimas gracias!!
    Voy a exponer una problemática que estoy encontrando y no consigo resolver, por si pudieran ayudarme.

    En resumen, necesito extraer el valor actual sobre un cuadro de amortización: VNA((8,75%/12;I2:I122) pero evitando todo el cuadro de amortización... es decir, evitando las 120 filas para obtener cada valor.
    Yo creo que estoy muy cerca... hasta ahora sólo he obtenido la siguiente forma (inviable), dónde extraigo cada mensualidad y aplico el VNA e ir sumando cada una de ellas:
    =+VNA(($B$3-$B$10)/12;+SI.ERROR(REDONDEAR((+B6)*($B$3-$B$10)/12;2);0); +SI.ERROR(REDONDEAR((+B6+(PAGO.PRINC.ENTRE(B3/12;72;B6;1;0+0;0)))*($B$3-$B$10)/12;2);0);
    +SI.ERROR(REDONDEAR((+B6+(PAGO.PRINC.ENTRE(B3/12;72;B6;1;0+1;0)))*($B$3-$B$10)/12;2);0);
    +SI.ERROR(REDONDEAR((+B6+(PAGO.PRINC.ENTRE(B3/12;72;B6;1;0+2;0)))*($B$3-$B$10)/12;2);0);
    +SI.ERROR(REDONDEAR((+B6+(PAGO.PRINC.ENTRE(B3/12;72;B6;1;0+3;0)))*($B$3-$B$10)/12;2);0);
    +SI.ERROR(REDONDEAR((+B6+(PAGO.PRINC.ENTRE(B3/12;72;B6;1;0+4;0)))*($B$3-$B$10)/12;2);0);
    +SI.ERROR(REDONDEAR((+B6+(PAGO.PRINC.ENTRE(B3/12;72;B6;1;0+5;0)))*($B$3-$B$10)/12;2);0))

    Si os fijáis, sólo tengo que conseguir la forma de aplicar la misma fórmula tantas veces como meses tiene el préstamo... incrementándose en uno el valor que muestra el periodo en cada una de las fórmulas (lo he diferenciado con 0+x)

    No sé si está muy claro lo que necesito...es mi primera consulta, la verdad... y no vale con sustituir I2:I122 por el importe total en la fórmula VNA(8,75%/12;I2:I122), ya que cada mes el VNA varía, según el capital pendiente...

    Muchas gracias de antemano!

    ResponderEliminar
    Respuestas
    1. Hola,
      no entiendo muy bien el sentido de tu fórmula...
      si empleas VNA debes informar de un rango con celdas que representes los flujos...
      Parece que con PAGO.PRINC.ENTRE tratas de descontar esos flujos, pero parece inviable realizar la operación para 120 periodos...
      quizá empleando una matricial, aunque habría que probar su comportamiento.

      No puedo orientarte demasiado porque, como te decía, se me escapa el sentido último de la fórmula

      Saludos

      Eliminar
    2. Gracias por la rápida respuesta!!
      Precisamente, intento localizar la forma de evitar informar de un rango de celdas dónde está representado el flujo...
      Ese es mi problema! y hasta ahora sólo he conseguido acercarme del modo que describía... que obviamente es inviable para 120 periodos, tal y como comenta.
      No obstante, le agradezco sinceramente la atención.

      Eliminar