Excel, Runden auf bestimmte Nachkommastellen?

7 Antworten

Ohne Makro geht's nicht ohne Hilfsspalten.

Anmerkung: um zu testen, ob die Formel nicht mit Zeilen und Spalten durcheinander kommt, habe ich einen 4. Centbetrag eingeführt. In der Formel müsste ggf. überall "$A$1:$A$4" durch "$A$1:$A$3" ersetzt werden. (Oder man arbeitet gleich mit einem benannten Bereich, womöglich in einer eigenen Tabelle.)

In A1 bis A4 habe ich folgende Werte eingetragen: 0,99; 0,75; 0,49; 0,29

Ich habe in Spalte C die Eingangswerte eingetragen, in Spalte D die Ausgangswerte und Spalten E bis G sind Hilfsspalten.

Hier gebe ich die Formeln für Zeile 1 an; für die folgenden Zeilen die Formeln kopieren oder "herunterziehen".

Formel für Spalten E bis G (Matrixformel -- Eingabe über Strg+Umschalt+Enter):

=MIN(INDEX(ABS(REST($C1;1)+{-1.0.1}-$A$1:$A$4);;{1.2.3}))

Formel für Spalte D (Matrixformel möglich, aber nicht erforderlich):

=WENN($C1="";"";WENN($C1<MIN($A$1:$A$4);MIN($A$1:$A$4);$C1-INDEX(REST($C1;1)+{-1.0.1}-$A$1:$A$4;VERGLEICH(MIN(ABS(REST($C1;1)+{-1.0.1}-$A$1:$A$4));INDEX(ABS(REST($C1;1)+{-1.0.1}-$A$1:$A$4);0;VERGLEICH(MIN(ABS(REST($C1;1)+{-1.0.1}-$A$1:$A$4));$E1:$G1;0));0);VERGLEICH(MIN(ABS(REST($C1;1)+{-1.0.1}-$A$1:$A$4));$E1:$G1;0))))

(die erste Wenn-Abfrage dient dazu, die Ausgabe hübscher zu machen, wenn nichts in Spalte C drinsteht, die zweite dazu, zu kleine Beträge auf den kleinsten Zielbetrag aufzurunden.)

PWolff  05.05.2018, 21:35

Hab was ohne Hilfsspalten gefunden -- muss allerdings als Matrixformel eingegeben werden, damit es zuverlässig funktioniert:

=WENN($C1="";"";WENN($C1<MIN($A$1:$A$4);MIN($A$1:$A$4);$C1-INDEX(REST($C1;1)-$A$1:$A$4-{-1.0.1};MAX(VERGLEICH($A$1:$A$4;$A$1:$A$4;0)*(ABS(REST($C1;1)-$A$1:$A$4-{-1.0.1})=MIN(ABS(REST($C1;1)-$A$1:$A$4-{-1.0.1}))));MAX({1.2.3}*(ABS(REST($C1;1)-$A$1:$A$4-{-1.0.1})=MIN(ABS(REST($C1;1)-$A$1:$A$4-{-1.0.1})))))))

(Wie oben steht in C1 der Ausgangswert und in $A$1:$A$4 die "erlaubten" Nachkommastellen. Die Liste $A$1:$A$4 ist ggf. anzupassen (verkürzen/verlängern) oder durch einen benannten Bereich zu ersetzen.)

-----

Zu blöd, dass man Funktionen, die man auf diese Weise durch eingebaute Funktionen darstellen kann, nicht durch Makro-Formeln übersichtlicher darstellen kann, ohne gleich Makros erlauben zu müssen.

D. h. ich wünsche mir, dass man z. B. einstellen kann, dass man nur Makro-Funktionen verwenden kann, die keine Schleifen und keinen Rückgriff auf Methoden, die keine Worksheet-Funktionen sind, enthalten, diese dann aber auch ohne Makros zu erlauben verwenden kann.

Also eine eigene Art von "garantiert ungefährlichen" Makros, die lediglich solche komplizierten Ausdrücke übersichtlicher machen, ohne dabei die Funktionalität zu erweitern.

0
PWolff  05.05.2018, 21:47
@PWolff

Hab vergessen, dass man auch eigene Klassen ausschließen müsste.

Und "For Each" müsste man sinnvollerweise erlauben, um über Zellbereiche iterieren zu können.

0

Ich habe jetzt leider keine Zeit mehr, das weiter zu testen und ggf. zu optimieren, aber schau mal, ob DAS hier in etwa klappt:

=INDEX({0,99;0,75;0,49};VERGLEICH(A1-GANZZAHL(A1);{0,99;0,75;0,49};-1))+GANZZAHL(A1)

Falls nicht, beschreibe, was falsch ist. Ich schaue heute Nacht wieder rein.

Kann sein, dass es auch viel einfacher geht. Vlt. hat einer der Anderen Experten hier eine Idee?!

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Oubyi, UserMod Light  04.05.2018, 15:04

Sind, glaube ich, noch Fehler drin. Teste mal genau. Ich schau morgen nochmal nach.

0
Oubyi, UserMod Light  05.05.2018, 16:33
@Oubyi, UserMod Light

SO, jetzt habe ich den Fehler - glaube ich - raus. Es gibt da in Excel eine Ungenauigkeit mit den Nachkommastellen, wenn man von der Zahl die Ganzzahl abzieht. Da tauchen an 13. bis 15. Stelle noch Ziffern auf, die da nicht hingehören.
Teste alo nochmal AUSFÜHRLICH diese verbesserte Formel:

=INDEX({0,99;0,75;0,49};VERGLEICH(RUNDEN(A1-GANZZAHL(A1);2);{0,99;0,75;0,49};-1))+GANZZAHL(A1)

Aber anscheinend interessierst Du Dich sowieso nicht mehr für Deine Frage.

Oder?
0
PWolff  05.05.2018, 18:05
@Oubyi, UserMod Light

Liefert allerdings für 2,05 nicht 1,99 sondern 2,49

(Ich hab den Fragesteller so verstanden, dass immer auf den nächstliegenden "passenden" Wert auf- bzw. abgerundet werden soll.)

1
Oubyi, UserMod Light  05.05.2018, 19:46
@PWolff

Wie ich schon bei @Dietwals angemerkt habe:

auf den jeweils nächsten Wert von -,99 ; -,75 und -,49 rundet.

DAS verstehe ich so, dass immer aufgerundet werden soll. Und dass das nicht gleichmäßig verteilt ist, z.B. die 0,24 oder 0,25 fehlt, ist für mich die Herausforderung.

Ist aber wohl wirklich Auslegungssache. Als Sinn sehe ich dahinter Verkaufspreise festzulegen, die "schön aussehen" und da würde ich dann eher aufrunden, um die Marge nicht geringer sondern größer zu machen.

0

Abrunden würde ich so:

=GANZZAHL(A1)+WENNNV(VERWEIS(REST(A1;1);{0,49;0,75;0,99});-0,01)

Aufrunden so:

=GANZZAHL(A1)+WAHL(VERGLEICH(REST(A1;1);{0,99;0,75;0,49};-1);0,99;0,75;0,49)

Das Problem beim Aufrunden ist, dass die Verweisfunktionen dafür den Parameter nicht vorgesehen haben. Deswegen sehe ich auf Anhieb nur die Möglichkeit, mit VERGLEICH auf die Suche zu gehen und dann den Fund rück zu transferieren.

Iamiam  07.05.2018, 00:47

sehr interessanter Ansatz!

Auch wenn Verweis keinen FALSCH-Parameter hat, könnte man aufrunden (zB 0,5), indem man alles negativ setzt:

=-VERWEIS(-0,5;{-0,99;-0,74;-0,49;-0,01})

Man muss dafür allerdings die Liste dann andersrum aufbauen. SVerweis hätte einen FALSCH-Parameter:

=-SVERWEIS(-0,5;{-0,99;-0,74;-0,49;-0,01};1;1)

das ändert aber nichts an der Sache, eher dann schon

=INDEX({0,24;0,49;0,74;0,99};VERGLEICH(0,5;{0,24;0,49;0,74;0,99};1)+1) oder

=INDEX({0,24;0,49;0,74;0,99};VERGLEICH(0,5;{0,24;0,49;0,74;0,99};1)+1)

nur so als Idee, müsste man alles erst noch ausfeilen, wie du es mit Ganzzahl und Rest vorgeführt hast.

Ich halte aber die 0,75 für einen Flüchtigkeitsfehler und das ganze dann für viel einfacher lösbar!

2
Suboptimierer  07.05.2018, 07:56
@Iamiam

Das mit dem Negieren halte ich wiederum für eine brilliante Idee. Die besten Ideen sind immer so einfach, dass man sich fragt, weshalb man nicht selbst darauf gekommen ist.

Ich halte die Werte 0,49, 0,75 und 0,99 für sinnvoll, bzw. nicht unrealistisch. Offensichtlich sollen Preise kalkuliert werden und 0,74 ist wahrscheinlich für das Auge nicht so ästhetisch wie 0,75.

1

Etwas komischer Wunsch. Auf was soll z. B. -,87 gerundet werden? Gleich weit von -,75 und -,99 entfernt. Oder -,62? Oder willst Du vielleicht immer abrunden?

Auf -,99 rundet man, indem man erst 0,01 hinzuzählt, dann auf -,00 rundet und schließlich wieder 0,01 abzieht. Bei -,49 klappte es vielleicht mit +0,51, runden auf -,00 und -0,51. Aber 0,75?? Das fällt aus jedem Schema.

Oubyi, UserMod Light  05.05.2018, 16:42
auf den jeweils nächsten Wert von -,99 ; -,75 und -,49 rundet.

DAS verstehe ich so, dass immer aufgerundet werden soll. Und dass das nicht gleichmäßig verteilt ist, z.B. die 0,24 oder 0,25 fehlt, ist für mich die Herausforderung.

0

Dazu brauchst Du nicht mal eine Formel.

Auf den entsprechenden Feldern: Rechte Maustaste -> Zellen formatieren -> Zahl -> Dezimalstellen: 0 einstellen.

Ansonsten hilft die Funktion RUNDEN (Funktion)

Näheres findest Du in der Hilfe, die du über F1 Taste erreichst. Suche einfach mal nach runden.

Jackie251  04.05.2018, 13:52

Das ist vollig falsch (die Formatänderung, ändert nur das Format nicht die Zahl in der Zelle).
Und zudem noch falsch, weil man der Funktion Runden nicht die hier gewünschten Rundungschritte beibringen kann.

2
odine  04.05.2018, 13:54
@Jackie251

Dann konnte ich wohl das geschriebene nicht richtig deuten...

0
Iamiam  07.05.2018, 00:11
@odine

Nimm den Klartext von Jackie nicht übel: Es gibt hier oft Angeber, die großspurig irgendwas behaupten, ohne im geringsten durchzublicken. Für so jemand hat Jaclie dich wohl gehalten und da wäre ihr Klartext auch richtig gewesen.

Und dann gibt es Leute, die einfach mal was missverstehen oder fehlinterpretieren, was jedem von uns mal oder auch öfter passiert. Scheint hier der Fall zu sein.

2