Clever-Excel-Forum

Normale Version: Werte über verschieden viele Zeilen summieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich möchte gern eine Investitionssumme über eine vorgegebene Nutzungsdauer hinweg abschreiben. Die Investitionssumme, Nutzungsdauer und daraus resultierende Abschreibung stehen in den Spalten, die einzelnen Jahre, die ich betrachte in den Zeilen. Bei einer Nutzungsdauer von 10 Jahren soll also in den nächsten 10 Zeilen für die Abschreibung Investitionssumme/Nutzungsdauer stehen. 
Jetzt kommen in den folgenden Jahren noch weitere Investitionen hinzu. Wenn sich der Zeitraum der Abschreibung überschneidet, sollen die beiden Werte gleich addiert werden. 
[attachment=26659]

In der Beispieldatei habe ich mein Ziel farbig markiert. 
Es wäre schön, wenn das, was ich per Hand eingetragen habe, automatisch gezogen wird, damit man nur noch die gelben Zellen befüllen muss.

Hat da jemand eine Idee? Ich hoffe das war nicht zu konfus!

Vielen Dank!
Hallo wilde.13,

in der Tat eine interessante Aufgabenstellung die Du da mitgebracht hast.

Dazu mehrere Fragen:
a) Es werden Bewertungsgrundsätze i.S.d. §252 ff. HGB angewandt (?)
b) Es wird ausschließlich lineare Abschreibung angewandt (?)
c) Eine wesentliche Veränderung kann zur Wertberichtigung führen (?)
d) Eine außerplanmäßige Abschreibung kann zur Wertberichtigung führen (?)
e) Makros sind ausdrücklich erwünscht (?)
f) Das sieht doch ziemlich nach Buchführungspflicht (Doppik) aus; Keine Software im Einsatz die einen Export ermöglicht (?)
Hallo Marco,

die Abschreibung erfolgt hier nicht nach HGB sondern nach der Netzentgeltverordnung - hier unterscheiden sich für meine Berechnung aber im Grunde nur die Nutzungsdauern, was aber für die Gesamtsumme erstmal egal ist. Und ja, es wird nur linear abgeschrieben. Wertberichtigung wird hier nicht beachtet, das erfolgt in einer späteren Tabelle. Ich möchte hier wirklich nur die linearen Abschreibungen aufsummieren.
Wenn das Ganze ohne Makros zu lösen wäre, wäre das toll. Sonst nehme ich aber auch ein Makro Wink
SAP Exporte kommen nicht in Frage, da es sich nur um Investitionsvarianten handelt, die noch nicht realisiert wurden und damit auch nicht im System stehen. Da möchte ich gern verschiedene Möglichkeiten vergleichen.

Ich wollte auch gern auf Hilfsspalten mit einem Zähler verzichten, da es ja theoretisch möglich wäre, dass in jedem Jahr eine neue Investition steht.

Ich hab auch gerade gesehen, dass in der Beispieldatei noch ein Fehler bei der Summe Afa war - hier die korrigierte Version!
[attachment=26669]

Viele Grüße
Hi wilde.13,

hier mal ein Schnellvorschlag:


Code:
Option Explicit
Const m_Investition As String = "Eingabe Investitionskosten"

Sub main()
    Dim wkb As Workbook
    Dim wks As Worksheet
    Dim rngSAV1 As Range, rngSAV2 As Range
    Dim b As Boolean
    '
    On Error GoTo err
    '
    Call TurnOffFunctionality
    '
    Set wkb = ThisWorkbook
    Set wks = wkb.Worksheets(m_Investition)
    Set rngSAV1 = wks.Range("C7:C51")
    Set rngSAV2 = wks.Range("H7:H53")
    '
    rngSAV1.Offset(0, 4).ClearContents
    rngSAV2.Offset(0, 4).ClearContents
    '
    b = addAfa(rngSAV1)
    b = addAfa(rngSAV2)
    '
err:
If err.Number <> 0 Then
    MsgBox err.Number & vbCrLf & err.Description
End If
'
Call TurnOnFunctionality
'
Set wks = Nothing: Set wkb = Nothing
End Sub

Public Sub TurnOffFunctionality()
    Application.Calculation = xlCalculationManual
    Application.DisplayStatusBar = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False
End Sub
Public Sub TurnOnFunctionality()
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayStatusBar = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Function addAfa(ByRef rng As Range) As Boolean
    Dim c As Range
    Dim dblNutzungsdauer As Double
    Dim dblAfaProRataTemporis As Double
    Dim lng As Long
    '
    For Each c In rng
        If c.Value = vbNullString Then
        Else
            dblNutzungsdauer = c.Offset(0, 3).Value2
            dblAfaProRataTemporis = c.Offset(0, 2).Value2 / dblNutzungsdauer
            For lng = 0 To dblNutzungsdauer - 1 Step 1
                c.Offset(lng, 4).Value2 = c.Offset(lng, 4).Value2 + dblAfaProRataTemporis
            Next lng
        End If
    Next c
    '
End Function

Hinweis:
Auf großartige Fehlerbehandlung und Dynamik habe ich verzichtet.
Wenn Du bspw. die Bereiche erweitern oder Ändern möchtest, bedarf es einem Eingriff oder einer Anpassung.

Jetzt bist Du wieder am Zug:
Zeichne ein Button und weise Ihm das Makro zu :)
Frage:
Da ich in der StromNev weniger unterwegs bin, gibt es Sonderfälle wo die degressive Afa zulässig wäre?
Es hat zwar eine Weile gedauert, aber ich habe deinen Code jetzt für meine Tabelle verwendet. Vielen Dank dafür - funktioniert ausgezeichnet!

Kann man das denn noch automatisieren, dass ich keinen Button drücken muss? 
Du siehst - VBA ist noch nicht wirklich meine Welt Wink
Hallo wilde.13,

das freut mich : )

Zu Deiner Frage:
An was hast Du den gedacht?