Hallo lieber nurmik,
dein Problem hat mich doch noch eine ganze Weile beschäftigt. Natürlich haben die Kollegen die bereits geantwortet haben, vollkommen recht. Das Problem lässt sich nicht vollkommen sauber lösen. Vorher Runden ist immer die schlechteste Wahl.
Wenn aber einem keine Wahl bleibt, dann muss man es halt machen. Um dir eine Hilfe zu geben, hatte ich ursprünglich eine Formel geschrieben, die das Problem wie folgt, löst. Bei einem oder mehreren Summanden, muss eingegriffen werden. Doch bei welchem? Immer der Eintrag der am nähsten an der anderen Rundungsrichtung dran ist. Also in deinem Fall wie du schon geschrieben hast die 2,244918 nicht abrunden, sondern aufrunden. Nachdem die Formel schon fertig war, habe ich gemerkt, dass sie viel zu kompliziert ist und auch nur für drei Zahlen wie in deinem Beispiel funktioniert.
Daher habe ich nochmal von vorne begonnen und eine Benutzerfunktion geschrieben. Die Funktion habe ich SRUNDEN() getauft. Wie SummeRunden. Du kannst sie aber jederzeit umbenennen. Ist ja nur Lokal.
Sie macht genau das, was du möchtest. Automatisiert die Rundung beeinflussen. Du musst eine Matrix mit Zellen auswählen. Dort stehen bereits deine nicht gerundeten Ergebnisse. Dann brauchst du noch die Nachkommastellen und abschließend den Index des Ergebnisses. Das Problem ist nämlich das, das Ergebnis auch eine Matrix ist. Ohne den Index würde man immer nur den ersten Eintrag erhalten.
Die Funktion korrigiert eine oder mehrere Zahlen, wenn erforderlich so das die Summe der gerundeten Ergebnisse mit denen der später gerundeten übereinstimmt.
Um das mal etwas zu veranschaulichen und zu testen, habe ich eine Tabelle gemacht, die 50 Zeilen mit Zufallszahlen und 7 Summanden hat. Du kannst das gerne auch noch nach unten verlängern. Ich musste den Test etwas kürzen, um die Datei hier noch hochladen zu können. Die Summe und die gerundete Summe werden ausgegeben. Im zweiten Block wird erst gerundet und dann die Summe gebildet. In Spalte R kann man ablesen, wie oft das zu Rundungsfehlern führt. Im dritten Block wird meine Funktion verwendet. Hier werden alle Rundungsfehler ausgeglichen.
Damit bei dir die Funktion funktioniert, musst du diese zunächst bei dir als Funktion einfügen. Du musst wie folgt vorgehen: [Extras] [Makros] [Makros verwalten] [LibreOffice Basic]. Dann [MeineMakros] [Standard] anklicken und dann [Verwalten] wählen. Dann wieder bei [Standard] [Neu] klicken. Bei neues Modul „Funktionen“ schreiben und [OK] klicken. Dann links [Meine Makros] [Standard] [Funktionen] wählen und [Bearbeiten] klicken. Dort dann Code rein kopieren und [Speichern] klicken. Bitte darauf achten, dass du außerhalb eines bestehenden Sub’s bist. Leider konnte ich die *.bas Datei hier nicht hochladen. Damit hätte man den Code auch importieren können. So bitte aus dem Writerdokument heraus kopieren. Bitte darauf achten das alles aus dem Writerdokument kopiert wird. Am besten mit STRG + A alles markieren. Strg + c kopieren und dann einfügen.
An alle Besserwisser: Ich bin kein VBA Profi. Ich habe sicherlich schrecklich viele Fehler gemacht. Damit kann ich leben. Hauptsache es funktioniert. Jeder der Interesse hat, kann den Code gerne verbessern und optimieren.
Und an die Mathematik-Enthusiasten: Ja ich habe die Zahlen verändert. Das war auch das Ziel! Behaltet dahingehend euren Kommentar für euch.
SRUNDEN.odt
Beispiel SRUNDEN.ods
Eine kleine Einschränkung. Bei sehr vielen Nachkommastellen (>4), rundet Calc VBA manchmal nicht richtig. Wer das reparieren kann bitte los! Die auskommentierte Zeile 46.
So jetzt aber viel Spaß mit automatisiert Rundungsfehler ausgleichen!
lg
Jürgen