ich habe eine Tabelle mit einer Spalte, in der nur Zahlen stehen. Die Zahlen wurden manuell erfasst, mit keiner, einer oder max. 2 Kommastellen. Es sind 558 Zahlen. Wenn ich am Ende eine Summe mache, und die Ergebniszelle mit 8 Kommastellen formatiere, kommt eine Zahl heraus, die an der 8. Stelle eine 1 hat. Ich habe alle Zahlen kontrolliert, es ist keine dabei mit mehr als 2 Kommastellen. Wenn ich Zellen einzeln nacheinander markiere und rechts unten im Excel die Summe beobachte, kommt plötzlich nach der 346 Zahle diese 1 dazu. Die Summe der Zahlen bis dahin liegt bei 5.995.156,96000000 Die nächste Zahl ist 3.231,23 und dann ist die Summe plötzlich 5.998.388,19000001 Ich habe auch versucht die Zahlen mittels runden in einer neuen Spalte umzuwandeln und zu summieren. Immer das gleiche Ergebnis!
02.02.2017, 18:15 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2017, 18:16 von Ego.)
Hallo Herbert,
ist dir aufgefallen, dass sich die "falsche" 1 auf der 15. (=letzte) signifikanten Stelle der Zahl befindet. Das ist die Genauigkeit von Gleitkommazahlen. Durch die Art der Binärdarstellung und Berechnung dieser Zahlen kann es in der letzten Ziffer schon einmal zu Rundungsdifferenzen kommen. Das ist auch der Grund warum man berechnete Gleitkommazahlen nie auf Gleichheit prüfen soll.
Wenn dich das wirklich stört must du Excel dazu bringen die Ziffern ganzzahlig zu berechnen (hier ist der Rechner genau; bei deinen Zahlen ist dies möglich).
zB mit der selbst geschriebenen Funktion in einem allgemeinen Modul:
Code:
Option Explicit Public Function LngSummeR(rngSumme As Range, intAnz As Integer) As Double Dim lngS1 As Long Dim lngS2 As Long Dim rngZelle As Range
lngS2 = 0 For Each rngZelle In rngSumme lngS1 = Round(rngZelle.Value, intAnz) * 10 ^ intAnz lngS2 = lngS2 + lngS1 Next rngZelle
LngSummeR = lngS2 / 10 ^ intAnz
End Function
Kannst diese Funktion einmal in die Zelle neben deiner normalen Summe nutzen und anschliessend über Formeln prüfen ob die Werte gleich sind und ob die Differenz gleich 0 ist . Du wirst dich (vielleicht jetzt nicht mehr) wundern.
ps. Das Runden hat natürlich nichts gebracht, da es die Zahlen nur kopiert hat.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Wenn dich das interessiert kannst du in den Spalten B-G einmal folgende Formeln schreiben und die Zahlen mit genügend vielen Nachkommastellen darstellen:
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Wie kann es bei Zahlen, die nicht mehr als 2 Kommastellen haben (weil sie manuell eingetragen wurden und nicht berechnet) und die nur addiert werden eine Gleitkommastelle vorkommen?
(02.02.2017, 18:31)herbert0803 schrieb: Wie kann es bei Zahlen, die nicht mehr als 2 Kommastellen haben (weil sie manuell eingetragen wurden und nicht berechnet) und die nur addiert werden eine Gleitkommastelle vorkommen?
Moin, ganz "platt" gesagt: Es ist nun einmal so. Und wenn du nur die ersten 4-5 Beiträge aus dem Link, den dir Steve im Beitrag#2 gegeben hat auch gelesen hättest, dann müsste dir auch klar sein, dass das nicht änderbar ist. Auch wenn das "Warum" nicht unbedingt für Jedermann nachvollziehbar ist. In Excel gibt es dafür aber noch die Möglichkeit, alles "wie angezeigt" berechnen zu lassen.
Beste Grüße Günther
Excel-ist-sexy.de …schau doch mal rein! Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
a) Nachkommazahlen = Gleitkommazahlen Sorry hätte auch "Zahlen mit der Möglichkeit Nachkommastellen zu haben" schreiben können.
b) zur Nutzun der Funktion:
1) Im Menu "Entwicklertools" "Code anzeigen" anklicken. Hierdurch wir der VBA-Editor in einem neuen Fenster angezeigt. 2) Im Projektfenster (links) das VBA-Projekt der Datei rechts anklicken und im Kontextmenu "Einfügen" und "Modul" auswählen. Hierdurch werden im Projektfenster das Objekt "Module" und das Objekt "Module1" angelegt. 3) Im Projektfenster (links) das Objekt "Module1" doppelklicken. Hierdurch wird der Curser in den Editor für dieses Modul gesetzt. 4) Meinen Code in den Editor kopieren. 5) Das Fenster für VBA-Editor schliessen.
6) Wenn du jetzt in einer Zelle nach dem "=" die Funktion "LngSummeR" schreiben willst, solltest du sie schon nach dem "L" zur Auswahl angezeigt bekommen.
Achtung! Da die Datei jetzt ein Makro (Die Funktion) enthält muss sie als "Excel-Arbeistmappe mit Makros (*.xlsm)" abgespeichert werden. Ansonsten wird das Makro nicht mit abgespeichert und ist beim nächsten Öffnen nicht mehr vorhanden.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität. Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen." Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.