abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Excel-Formel zur exakten Berechnung der tariflichen Einkommensteuer

42
letzte Antwort am 28.08.2025 17:34:36 von LuPi1801
Dieser Beitrag ist geschlossen
0 Personen hatten auch diese Frage
bklahn
Beginner
Offline Online
Nachricht 31 von 43
3238 Mal angesehen

Wenn man lediglich die Steuerlast zu einem gegebenen zvE wissen möchte, dann ist die BMF-Formel zweifellos ein gutes Mittel.

 

Wenn man hingegen innerhalb eines Excel-Programms, das zunächst ein oder mehrere zvE berechnet hat, das dann die zugehörigen ESt-Werte benötigt, um diese in Folgeschritten weiter zu verarbeiten, dann ist es ziemlich unpraktisch, wenn man an der Stelle der ESt-Ermittlung - unter Unterbrechung der Rechnung - mittels des BMF-Programms manuell nachhelfen muss, diesen Rechenschritt zu vollziehen. Dann ist es wünschenswert, dass das Excel-Programms diese Berechnung autonom - ohne äußeren Eingriff - selbst vollzieht. Dazu braucht man dann die Excel-Steuerformel.

 

Beispiel hierfür: Man möchte berechnen, welches Netto-Einkommen sich aus Einkünften diverser Quellen (etwa gesetzliche Rente, Firmenrente, Kapitaleinkünften - unter Berücksichtigung von Einkommensteuer, Lohnsteuer und Steuervorauszahlungen) innerhalb eines Jahres Monat für Monat ergibt, wobei unterjährig auch noch Anpassungen der Renten stattfinden. Möchte man zusätzlich etwa auch noch einen Vergleich mit dem vorausgehenden Jahr erhalten, dann erweist sich die in das Excel-Programm integrierte Steuerformel als noch unentbehrlicher.

0 Kudos
bklahn
Beginner
Offline Online
Nachricht 32 von 43
3229 Mal angesehen
 
0 Kudos
LuPi1801
Beginner
Offline Online
Nachricht 33 von 43
3203 Mal angesehen

@vogtsburger ,

 

bitte gerne, bin auch gespannt - geben Sie mal Bescheid!

 

Auf ähnliche Weise lassen sich übrigens auch Abrufe für Bodenrichtwerte, Wertpapiere, Wechselkurse, Lebenserwartungen sowie sämtliche Faktoren und Werte des Bewertungsgesetzes in handliche Excel-Formeln verpacken...

 

Der Vorteil solcher Lösungen liegt - neben der Aktualität - auch darin, dass die Funktionen relativ einfach kanzleiweit in allen Excel-Mappen verfügbar gemacht werden können.

bklahn
Beginner
Offline Online
Nachricht 34 von 43
3166 Mal angesehen

Hallo Herr Eberhardt,

 

will man lediglich eine Steuerlast aus einem gegebenen zvE bestimmen, dann ist die BMF-Formel zweifellos die richtige Wahl. Darin stimme ich Ihnen zu.

 

Wenn hingegen eine Excel-Anwendung aus diversen Einkünfte-Daten ein oder auch mehrere zvE-Werte ermittelt hat, zu denen die zugehörigen Steuerlasten (ESt) zu bestimmen sind, um diese in einem Folgeschritt weiter zu verarbeiten, dann wäre die Bestimmung mittels BMF-Formel außerhalb des Excel-Programms (also unter Unterbrechung der Weiterbearbeitung durch einen manuellen Zwischenschritt), wenig praktikabel. Da braucht es dann die in die Excel-Anwendung integrierte Excel-Steuerformel. Damit läuft die gesamte Rechnung ohne das händische Zutun eines Anwenders in einem einzigen Schritt automatisch ab. Dazu ist die Steuerformel derzeit im 2-Jahres-Rhythmus lediglich um die gesetzlich neu festgelegten Parameter (derzeit 2 Parameter je Steuerjahr) zu ergänzen.

 

Beispiel einer solchen Anwendung: Ein Anwender möchte das Netto-Einkommen aus all seinen Brutto-Einkünften (z. B. gesetzliche Rente, Firmenrente, Kapitaleinkünfte) für ein Jahr Monat für Monat – unter Berücksichtigung von Einkommensteuer, Lohnsteuer, Steuern auf Kapitalerträge und Steuervorauszahlungen – ermitteln und dabei auch noch einen Vergleich mit dem vorausgehenden Jahr vornehmen.

 

Grüße an den Bodensee aus dem Raum Ulm

B. Klahn

0 Kudos
bodensee
Allwissender
Offline Online
Nachricht 35 von 43
3145 Mal angesehen

Alles klar.

 

Kein thema wenn Sie permanent Variablen verändern und damit auch das zvE dann wird das mit dem Internetrechner etwas lästig, da ist natürlich eleganter ich habe ein Excel Tool mit eingebauter Funktion. 

 

Das habe ich so dem ursprünglichen Sachverhalt nicht entnommen. 

 

Grüße vom wunderschönen Bodensee
U.K.Eberhardt
0 Kudos
MF_Absteiger_87
Beginner
Offline Online
Nachricht 36 von 43
2412 Mal angesehen

Wie christian_kunz, nur ohne WENN, aber für 2025:

E = auf volle € abgerundetes zu versteuerndes Einkommen
Splittingtarif: 2 x Grundtarif für E/2.

=GANZZAHL(
(E>12096)*(E<=17443)*((14%+(E-12096)*932,3*10^-8)*(E-12096))+
(E>17443)*(E<=68480)*((23,97%+(E-17443)*176,64*10^-8)*(E-17443)+1015,13)+
(E>68480)*(E<=277825)*(42%*E-10911,92)+(E>277825)*(45%*E-19246,67))

Stuttgart74
Beginner
Offline Online
Nachricht 37 von 43
323 Mal angesehen

Hi @LuPi1801 , vielen Dank für den Code! Bei mir läuft Get_ESt_Tarif() nicht, der Debugger zeigt:

 

stam.png

 

Ich kann allerdings nicht so viel damit anfangen und wäre für einen Hinweis dankbar 🙂

0 Kudos
LuPi1801
Beginner
Offline Online
Nachricht 38 von 43
289 Mal angesehen

... hey @Stuttgart74, freut mich, dass es endlich mal jemand probiert!

 

Ursache: Im Gesetzestext auf der Website, auf die zurückgegriffen wird, ist das Multiplikationssymbol (nach dem der Code unter anderem sucht, um zu "verstehen" welche Zeichen was sind) geändert worden. Deshalb highlighted der Debugger auch die Codezeile, die nach dem Multiplikationspunkt  sucht - weil er den nicht findet (am Ende der gelben Zeile, das Zeichen zwischen den Anführungsstrichen).

 

Lösung: Gehe auf die Seite www.gesetze-im-internet.de > rufe den Tarif (32a EStG) auf, kopiere dort einen der Multiplikationspunkte und ersetze den bisher im Code verwendeten Multiplikationspunkt mit dem aktuellen Zeichen (müsste an mehreren Stellen vorkommen).

 

Sag gerne Bescheid, obs klappt oder nicht oder falls du noch Fragen hast!

Stuttgart74
Beginner
Offline Online
Nachricht 39 von 43
245 Mal angesehen

Vielen Dank @LuPi1801 ! Jetzt läuft es, aber irgendwie falsch: =FESTZUSETZENDE_EST(100000, FALSE) ergibt -1049192...

0 Kudos
RAHagena
Meister
Offline Online
Nachricht 40 von 43
243 Mal angesehen

Alter Schwede, schön geschrieben 😍 werde ich mal ausprobieren 👍 

Einfache Anbindung aller Mandanten ans DMS mit meineKanzlei.io 
Kollegenseminar buchen: Next Level Digitalisierung mit DATEV

0 Kudos
LuPi1801
Beginner
Offline Online
Nachricht 41 von 43
231 Mal angesehen

@Stuttgart74 ich vermute, dass du aus Versehen einen normalen Punkt mit ausgetauscht hast und daher falsche Werte berechnet wurden (die Dinger sehen sich aber auch **bleep** ähnlich!)

 Vergleich Punkte.jpg

 

Hier einmal der aktualisierte Abschnitt ("Sub") zum kopieren und Austauschen am Stück:

 

Sub Get_ESt_Tarif()

Dim objHTTP As Object
Dim objHTML As Object
Dim objListOfElements As Object
Dim strURL As String

Dim strGrundfreibetrag As String
Dim strStufe2 As String
Dim strStufe2Var1 As String
Dim strStufe2Var2 As String
Dim strStufe3 As String
Dim strStufe3Var1 As String
Dim strStufe3Var2 As String
Dim strStufe3Var3 As String
Dim strStufe4 As String
Dim strStufe4Var1 As String
Dim strStufe5Var1 As String

    strURL = "https://www.gesetze-im-internet.de/estg/__32a.html"
    
    Set objHTTP = CreateObject("MSXML2.XMLHTTP")
    
    objHTTP.Open "GET", strURL, False
    objHTTP.Send

    Do While objHTTP.Status <> 200
    
        DoEvents
        If objHTTP.Status > 400 Then Exit Sub
               
    Loop
    
    Set objHTML = CreateObject("htmlfile")
    objHTML.body.innerHTML = objHTTP.responseText
    
    Set objListOfElements = objHTML.getElementsByTagName("dd")
    
    '1.
    strGrundfreibetrag = objListOfElements.Item(0).ChildNodes.Item(0).innerText
    strGrundfreibetrag = Replace(strGrundfreibetrag, " ", "")
    strGrundfreibetrag = Right(strGrundfreibetrag, Len(strGrundfreibetrag) - (InStr(1, strGrundfreibetrag, "bis") + 2))
    strGrundfreibetrag = Left(strGrundfreibetrag, InStr(1, strGrundfreibetrag, "Euro") - 1)
    
    '2.
    strStufe2 = objListOfElements.Item(1).ChildNodes.Item(0).innerText
    strStufe2 = Replace(strStufe2, " ", "")
    strStufe2 = Right(strStufe2, Len(strStufe2) - (InStr(1, strStufe2, "bis") + 2))
    strStufe2 = Left(strStufe2, InStr(1, strStufe2, "Euro") - 1)
    
    strStufe2Var1 = objListOfElements.Item(1).ChildNodes.Item(1).innerText
    strStufe2Var1 = Replace(Replace(Replace(strStufe2Var1, " ", ""), ";", ""), ".", "")
    strStufe2Var2 = strStufe2Var1
        
    strStufe2Var1 = Right(strStufe2Var1, Len(strStufe2Var1) - 1)
    strStufe2Var1 = Left(strStufe2Var1, InStr(1, strStufe2Var1, "•") - 1)
    
    strStufe2Var2 = Right(strStufe2Var2, Len(strStufe2Var2) - InStr(strStufe2Var2, "+"))
    strStufe2Var2 = Left(strStufe2Var2, InStr(1, strStufe2Var2, ")") - 1)
    
    '3.
    strStufe3 = objListOfElements.Item(2).ChildNodes.Item(0).innerText
    strStufe3 = Replace(strStufe3, " ", "")
    strStufe3 = Right(strStufe3, Len(strStufe3) - (InStr(1, strStufe3, "bis") + 2))
    strStufe3 = Left(strStufe3, InStr(1, strStufe3, "Euro") - 1)
    
    strStufe3Var1 = objListOfElements.Item(2).ChildNodes.Item(1).innerText
    strStufe3Var1 = Replace(Replace(Replace(strStufe3Var1, " ", ""), ";", ""), ".", "")
    strStufe3Var2 = strStufe3Var1
    strStufe3Var3 = strStufe3Var1
    
    strStufe3Var1 = Right(strStufe3Var1, Len(strStufe3Var1) - 1)
    strStufe3Var1 = Left(strStufe3Var1, InStr(1, strStufe3Var1, "•") - 1)
    
    strStufe3Var2 = Right(strStufe3Var3, Len(strStufe3Var3) - InStr(strStufe3Var3, "+"))
    strStufe3Var2 = Left(strStufe3Var2, InStr(1, strStufe3Var2, ")") - 1)
    
    strStufe3Var3 = Right(strStufe3Var3, Len(strStufe3Var3) - InStrRev(strStufe3Var3, "+"))
    
    '4.
    strStufe4 = objListOfElements.Item(3).ChildNodes.Item(0).innerText
    strStufe4 = Replace(strStufe4, " ", "")
    strStufe4 = Right(strStufe4, Len(strStufe4) - (InStr(1, strStufe4, "bis") + 2))
    strStufe4 = Left(strStufe4, InStr(1, strStufe4, "Euro") - 1)
    
    strStufe4Var1 = objListOfElements.Item(3).ChildNodes.Item(1).innerText
    strStufe4Var1 = Replace(Replace(Replace(strStufe4Var1, " ", ""), ";", ""), ".", "")
    strStufe4Var1 = Right(strStufe4Var1, Len(strStufe4Var1) - InStr(1, strStufe4Var1, "x") - 1)
    
    '5.
    strStufe5Var1 = objListOfElements.Item(4).ChildNodes.Item(1).innerText
    strStufe5Var1 = Replace(Replace(Replace(strStufe5Var1, " ", ""), ";", ""), ".", "")
    strStufe5Var1 = Right(strStufe5Var1, Len(strStufe5Var1) - InStr(1, strStufe5Var1, "x") - 1)
    
    dblGrundfreibetrag = strGrundfreibetrag
    dblStufe2 = strStufe2
    dblStufe2Var1 = strStufe2Var1
    dblStufe2Var2 = strStufe2Var2
    dblStufe3 = strStufe3
    dblStufe3Var1 = strStufe3Var1
    dblStufe3Var2 = strStufe3Var2
    dblStufe3Var3 = strStufe3Var3
    dblStufe4 = strStufe4
    dblStufe4Var1 = strStufe4Var1
    dblStufe5Var1 = strStufe5Var1

End Sub

 

0 Kudos
Stuttgart74
Beginner
Offline Online
Nachricht 42 von 43
135 Mal angesehen

Danke, komischerweise kriege ich auch damit das Ergebnis -1049192 für =FESTZUSETZENDE_EST(100000, FALSE)

0 Kudos
LuPi1801
Beginner
Offline Online
Nachricht 43 von 43
103 Mal angesehen

🤔hmm, vielleicht können/wollen wir zwei uns da mal kurzschließen? Bin sicher, das lässt sich machen! Siehe unten: LuPi1801_0-1756395197392.png

 

42
letzte Antwort am 28.08.2025 17:34:36 von LuPi1801
Dieser Beitrag ist geschlossen
0 Personen hatten auch diese Frage