Bei manchen Kalkulationen ist es das Ziel, entweder den Netto- oder den Bruttobetrag „glatt” zu gestalten, also volle Euro ohne Cent. Oder aber auch einem Wunsch-Centbetrag. Mit einem kleinen Makro lässt sich das gut bewerkstelligen:
Dahinter steckt dieses kleine Makro:
Option Explicit
Private Sub WorkSheet_Change(ByVal Target As Range)
Dim MwSt As Single
Dim Ze As Integer
MwSt = 0.19
If Target.Column = 2 Or Target.Column = 3 Then
On Error GoTo ErrorHandler
Ze = Target.Row
Application.EnableEvents = False
If Target.Column = 2 Then
Cells(Ze, 3) = CCur(Target / (1 + MwSt))
Else
Cells(Ze, 2) = Target + Target * MwSt
End If
End If
ErrorHandler:
Application.EnableEvents = True
End Sub
Wenn in eine der Spalten B:C etwas eingetragen wird, dann ändert sich entsprechend der Wert der Nachbarspalte automatisch. So ist es möglich, einen normal kalkulierten Netto-Wert in Spalte C einzutragen und dann zu überprüfen, ob der Brutto-Preis den Wünschen entspricht. Erforderlichenfalls ändere ich den Bruttopreis entsprechend ab, der Netto-Preis wird dann automatisch angepasst. Gleiches gilt, wenn Sie ausgehend von einem einen gegebenen Brutto-Preis einen möglichst „runden” Netto-Preis erarbeiten wollen. Sie ändern den Netto-Preis in die eine oder andere Richtung auf den Wunschbetrag und der Brutto-Preis passt sich entsprechend an. Natürlich geht das auch mit den „berühmten” 95 oder 99 Cent-Beträgen (nach dem Komma). Das können Sie in dieser Datei nachvollziehen. – Die Variable MwSt
kann selbstredend auch durch eine Zelladresse „gefüllt” werden.
Ergänzung: Bei einer Eingabe der Preise von Hand kann es durchaus vorkommen, dass der „runde” Wert ohne Nachkommastellen eingegeben wird. Wenn dann die Zelle nicht als Währung formatiert ist, sieht das nicht so schön aus, selbst wenn die Berechnung korrekt durchgeführt wird. Das wird mit dem folgenden Code verbessert.
Eine weitere Fehlermöglichkeit wird ausgeschaltet: Wenn eine Zelle in Spalte B oder in Spalte C gelöscht wird, dann kommt es im obigen Code zu einer Fehlermeldung, dass der Daten-Typ nicht passt. Auch diese Fehlermöglichkeit wird hier geblockt. In dem Fall werden Nullwerte eingetragen, die Sie aber per Zahlenformat ausblenden können.
Private Sub WorkSheet_Change(ByVal Target As Range)
Static MwSt As Single
MwSt = 0.19
If Target.Column = 2 Or Target.Column = 3 Then
Application.EnableEvents = False
With Target
If IsNumeric(Target) Then
If .Column = 2 Then
.Value = CCur(Target)
.Offset(0, 1) = CCur(Target / (1 + MwSt))
Else
.Value = CCur(Target)
.Offset(0, -1) = CCur(Target * (1 + MwSt))
End If 'Column = 2
End If 'IsNumeric
End With
End If 'Column 2 Or 3
ErrorHandler:
Application.EnableEvents = True
End Sub
[NachObenLetzte Verweis=„CS: Brutto-Netto Glatte Summen”]