[Excel, VBA] Abschreibung / Afa
Gepostet am: May 19, 2011 4:22:16 PM
Excel bietet zwar von sich aus einige Abschreibungsfunktionen, wie LIA, GDA, GDA2 und DIA. Keine dieser Funktionen wird leider der österreichischen Rechtslage gerecht. Mit LIA kann man zwar den die GanzJahres-Abschreibung recht gut berechnen.
Will man hingegen die Höhe der Abschreibung für ein bestimmtes Jahr ermitteln, kommt man um recht komplizierte WENN-Funktionen nicht herum.
Abschreibungshoehe für ein bestimmtes Jahr
=WENN(MONAT(Anschaffungsdatum)>6;WENN(JAHR(Anschaffungsdatum)=Jahr;LIA(Anschaffungskosten;Restwert;Nutzungsdauer)/2;WENN(JAHR(Anschaffungsdatum)+Nutzungsdauer=Jahr;LIA(Anschaffungskosten;Restwert;Nutzungsdauer)/2;WENN(UND(JAHR(Anschaffungsdatum)<Jahr;JAHR(Anschaffungsdatum)+Nutzungsdauer-1>=Jahr);LIA(Anschaffungskosten;Restwert;Nutzungsdauer);"")));WENN(JAHR(Anschaffungsdatum)+Nutzungsdauer-1>=Jahr;LIA(Anschaffungskosten;Restwert;Nutzungsdauer);""))
Wie man sieht ist die kombinierte Formel, die das Anschaffungsjahr berücksichtig, recht kompliziert, was die praktische Anwendung im Alltag eigentlich unmöglich macht. Die Lösung ist in meinen Augen nur mit VBA einigermaßen praktikabel:
Afa für ein bestimmtes Jahr mit VBA
Public Function AfA(Betrag As Double, Jahre As Integer, aktuellesJahr As Integer, Anschaffungsdatum As Date, _ Optional Restwert As Double = 0, Optional ErinnerungsWert As Double = 0.01) As Double 'Diese Funktion berechnet den Abschreibungswert eines bestimmten Jahres If Year(Anschaffungsdatum) > aktuellesJahr Then AfA = 0 'dann ist das Anlagengut noch gar nicht angeschafft Else If (Month(Anschaffungsdatum) > 6) And (aktuellesJahr = Year(Anschaffungsdatum)) Then 'Halbjahresabschreibung AfA = WorksheetFunction.SLN(Betrag, Restwert, Jahre) / 2 ElseIf (Month(Anschaffungsdatum) > 6) And (aktuellesJahr = (Year(Anschaffungsdatum) + Jahre)) Then 'Halbjahresabschreibung uU um Erinnerungswert bereinigt AfA = WorksheetFunction.SLN(Betrag, Restwert, Jahre) / 2 - ErinnerungsWert ElseIf (Month(Anschaffungsdatum) > 6) And (aktuellesJahr > Year(Anschaffungsdatum)) And (aktuellesJahr < (Year(Anschaffungsdatum) + Jahre)) Then 'ganze Jahre bei der Halbjahresabschreibung AfA = WorksheetFunction.SLN(Betrag, Restwert, Jahre) ElseIf (Month(Anschaffungsdatum) <= 6) And (aktuellesJahr < (Year(Anschaffungsdatum) + Jahre - 1)) Then 'ganzJahresAbschreibung AfA = WorksheetFunction.SLN(Betrag, Restwert, Jahre) ElseIf (Month(Anschaffungsdatum) <= 6) And (aktuellesJahr = (Year(Anschaffungsdatum) + Jahre - 1)) Then 'ganzJahresAbschreibung uU um Erinnerungswert bereinigt AfA = WorksheetFunction.SLN(Betrag, Restwert, Jahre) - ErinnerungsWert Else AfA = 0 'bereits vollkommen abgeschrieben End If End IfEnd Function
Eine andere Funktion
BerechnungAfA
Public Function BerechnungAfA(AK As Double, ND As Integer, aktJ As Integer, Optional bHalbjahresabschreibung As Boolean = False) As DoubleIf bHalbjahresabschreibung = True Then If ((aktJ = 1) Or (aktJ = ND + 1)) Then BerechnungAfA = AK / ND / 2 ElseIf aktJ > ND + 1 Then BerechnungAfA = 0 Else BerechnungAfA = AK / ND End IfElse If aktJ > ND Then BerechnungAfA = 0 Else BerechnungAfA = AK / ND End IfEnd IfEnd Function
Für die kummulierte Abschreibung zwischen zwei Datumswerten:
Textfeld
Public Function kumAfa(Anschaffungskosten As Double, Nutzungsdauer As Integer, StartDatum As Date, EndDatum As Date, Optional Restwert As Double = 0) As Double Dim AfaJahr As Double Dim i As Integer AfaJahr = (Anschaffungskosten - Restwert) / Nutzungsdauer Dim kAfa As Double kAfa = 0 For i = Year(StartDatum) To Year(EndDatum) If i = Year(StartDatum) And Month(StartDatum) > 6 Then kAfa = kAfa + (AfaJahr / 2) ElseIf i = Year(EndDatum) And Month(EndDatum) < 7 Then kAfa = kAfa + (AfaJahr / 2) Else kAfa = kAfa + AfaJahr End If Debug.Print i & " = " & kAfa Next If kAfa >= (Anschaffungskosten - Restwert) Then kumAfa = (Anschaffungskosten - Restwert) Else kumAfa = kAfa End IfEnd Function