Tipp 11.5 - Abschreibungsplan

Wie kann ich einen optimalen Abschreibungsplan ermitteln?

Unternehmen, die an hohen Abschreibungsbeträgen interessiert sind, machen von der Möglichkeit des Übergangs von der geometrisch-degressiven auf die lineare Abschreibung Gebrauch, und zwar in dem Jahr, in dem die lineare Abschreibung vom aktuellen Restbuchwert die geometrisch-degressive überschreitet.

Ein kleines Beispiel: Eine Maschine, die 40.000 Euro kostet, soll innerhalb von 10 Jahren abgeschrieben werden. Man kann entweder geometrisch-degressiv oder linear abschreiben.

Um den optimalen Abschreibungsbetrag zu ermitteln, kombinieren wir unsere Abschreibungsmethoden DDB und SLN. Auf unser o.g. Beispiel bezogen, würde die Prozedur nun folgendermaßen ausschauen:

Beispiel:

' Optimaler Abschreibungsplan
Sub AfaPlan(pcWert As Currency, pcRestwert As Currency, piDauer As Integer)
 
  '// -----------------------------------------------------
  '// Methode   | Berechnet einen optimalen Afa-Plan
  '// -----------------------------------------------------
  '// Parameter | pcWert     - Anschaffungswert
  '               pcRestwert - Restbuchungswert
  '               piDauer    - Nutzungsdauer
  '// -----------------------------------------------------
  '// Erstellt  | Stefan Kulpa
  '//           | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Beispielaufruf im Direktfenster z.B.:
  '   AfaPlan 40000,0,10
  '// -----------------------------------------------------
 
  Dim iLoop As Integer
  Dim sMsg As String
  Dim sFormat As String
 
  Dim cLia As Currency
  Dim cGda As Currency
  Dim cRestLia As Currency
  Dim cRestGda As Currency
  Dim cWert As Currency
 
  Dim lChange As Long
 
  On Error GoTo AfaPlan_Err
 
  sFormat = "###,##0.00"
 
  ' Kopfzeile definieren
  sMsg = "Afa-Plan" & vbCrLf & String$(35, "=")
  sMsg = sMsg & vbCrLf & "Anschaffungswert: " & Format$(pcWert, sFormat)
  sMsg = sMsg & vbCrLf & "Nutzungsdauer:    " & piDauer & " Jahre"
 
  ' Diese spezielle Formatierung wird angewendet, um
  ' eine rechtsbündige Formatierung im Direktfenster
  ' zu realisieren
  sMsg = sMsg & vbCrLf & String$(35, "-") & vbCrLf
  sMsg = sMsg & "Jahr"
 
  ' dito, siehe zuvor
  sMsg = sMsg & Space(Len(Format$(pcWert, sFormat)) + 1 - Len("Afa")) & "Afa"
  sMsg = sMsg & Space(Len(Format$(pcWert, sFormat)) + 1 - Len("Rest")) & "Rest"
  sMsg = sMsg & Space(4 - Len("Typ")) & "Typ" & vbCrLf
 
  ' Abschreibungsbetrag errechnen
  cLia = CCur(SLN(pcWert, pcRestwert, piDauer))
  ' Rest-/Startwert zuweisen
  cRestLia = pcWert
  cRestGda = pcWert
 
  ' Für die rechtsbündige Formatierung,
  ' damit die Abstände gleich bleiben
  cWert = pcWert
 
  ' Initialisierung des Wechsels:
  ' die geometrisch-degressive Afa lohnt sich
  ' erst bei einer Abschreibungsdauer von über
  ' 5 Jahren
  If piDauer > 5 Then
    lChange = 0
  Else
    lChange = 2
  End If
 
  ' Schleife über die Nutzungsdauer
  For iLoop = 1 To piDauer
    ' Wenn noch kein Wechsel erfolgt
    If lChange = 0 Then
      ' Abschreibungsbetrag errechnen
      cGda = DDB(pcWert, pcRestwert, piDauer, iLoop)
      ' Restwert berechnen
      cRestGda = cRestGda - cGda
 
      ' Wenn der GDA-Betrag kleiner als der LIA-Betrag ist
      ' Wechsel initiieren
      If cGda < cLia Then lChange = 1
    End If
 
    ' Falls noch kein Wechsel oder die Initialisierung
    ' erfolgt ist
    If lChange = 0 Or lChange = 1 Then
      ' Ausgabe der Abschreibungswert, Formatierung s.o.
      If lChange = 0 Then
        sMsg = sMsg & FormatAfaPlan(iLoop, cWert, cGda, cRestGda, "d")
      Else
        sMsg = sMsg & FormatAfaPlan(iLoop, cWert, cGda, cRestGda, "d / Ü: LIA")
      End If
      ' Falls die Initialisierung erfolgt ist
      If lChange = 1 Then
        ' Wechsel auf liniare Abschreibung
        lChange = 2
        ' Restjahre für den Wechsel zuweisen
        piDauer = iLoop
        ' Startwert für den Wechsel zuweisen
        pcWert = cRestGda
        ' Restwert für den Wechsel zuweisen
        cRestLia = pcWert
      End If
      ' Wechsel auf liniare Afa
    Else
      ' Abschreibungsbetrag errechnen
      cLia = CCur(SLN(pcWert, pcRestwert, piDauer))
      ' Restwert errechnen
      cRestLia = cRestLia - cLia
      ' Ausgabe der Abschreibungswert, Formatierung s.o.
      sMsg = sMsg & FormatAfaPlan(iLoop, cWert, cLia, cRestLia, "l")
    End If
  Next iLoop
 
  ' Ausgabe im Direktfenster
  Debug.Print sMsg
 
AfaPlan_Exit:
  On Error GoTo 0
  Exit Sub
 
AfaPlan_Err:
  MsgBox "Fehler " & Err.Number & ": " & _
         Err.Description, vbCritical, _
         "modFinancial.AfaPlan"
  Resume AfaPlan_Exit
 
End Sub
 
' Hilfsfunktion für die rechtsbündige Formatierung
Public Function FormatAfaPlan(piYear As Integer, _
                              pcWert As Currency, _
                              pcAfa As Currency, _
                              pcRest As Currency, _
                              psTyp As String) _
                              As String
 
  Dim sMsg As String
  Dim sFormat As String
 
  On Error GoTo FormatAfaPlan_Err
 
  sFormat = "###,##0.00"
 
  sMsg = sMsg & Space(4 - Len(CStr(piYear))) & CStr(piYear)
  sMsg = sMsg & Space(Len(Format$(pcWert, sFormat)) + 1 _
                      - Len(Format$(pcAfa, sFormat))) _
                      & Format$(pcAfa, sFormat)
  sMsg = sMsg & Space(Len(Format$(pcWert, sFormat)) + 1 _
                      - Len(Format$(pcRest, sFormat))) _
                      & Format$(pcRest, sFormat)
  sMsg = sMsg & Space(Len(psTyp) + 1 - Len(psTyp)) & psTyp
  sMsg = sMsg & vbCrLf
 
  FormatAfaPlan = sMsg
 
FormatAfaPlan_Exit:
  On Error GoTo 0
  Exit Function
 
FormatAfaPlan_Err:
  MsgBox "Fehler " & Err.Number & ": " & _
         Err.Description, vbCritical, _
         "modFinancial.FormatAfaPlan"
  Resume FormatAfaPlan_Exit
 
End Function
Das Ergebnis im Direktfenster
Afa-Plan
===================================
Anschaffungswert: 40.000,00
Nutzungsdauer:    10 Jahre
-----------------------------------
Jahr       Afa      Rest Typ
   1  8.000,00 32.000,00 d
   2  6.400,00 25.600,00 d
   3  5.120,00 20.480,00 d
   4  4.096,00 16.384,00 d
   5  3.276,80 13.107,20 d / Ü: LIA
   6  2.621,44 10.485,76 l
   7  2.621,44  7.864,32 l
   8  2.621,44  5.242,88 l
   9  2.621,44  2.621,44 l
  10  2.621,44      0,00 l

Je nachdem, ob Sie gleich bleibende oder zunächst hohe Abschreibungssätze wünschen, wählen Sie die Abschreibungsmethode. Wenn Sie an ständig hohen Abschreibungssätzen interessiert sind, können Sie von der degressiven zur linearen Abschreibung übergehen, nicht jedoch umgekehrt. Es lohnt sich, wenn der lineare Abschreibungssatz vom aktuellen Buchwert höher als der geometrisch-degressive Satz ist. Im Beispiel sind lineare und degressive Sätze vom Buchwert des 6. Jahres gleich:

  • degressiv: 2.621,44 Euro
  • linear: 13.107,20 Euro / 5 = 2.621,44 Euro

Sie können im sechsten oder einem späteren Jahr umsteigen. Oben sind die Werte für den Wechsel im 6. Jahr berechnet.