VBA: Runden von Komma-5

Hallo, allerseits!

Irgendwie habe ich gerade ein, wie unser Bobbele damals sagte, „mentales Problem“: Ich will 132,5 auf keine Nachkommastelle runden. Nach meiner Theorie sollte 133 rauskommen. Aber Round oder CInt oder CLng machen 132 draus.

Was habe ich verpeilt? Gibt’s da was anderes?

Gruß, Manfred

Ich will nicht mehr: VBA: Runden von Komma-5
Och, Leute!

Ich habe so echt keinen Bock… Also: In einer Zelle, sei sie völlig beliebig BD56, steht die Formel =WENN(SUMME(BB59:BD59)>0;SUMME(BB58:BD58)/SUMME(BB59:BD59)*100;"-")

Bei meinen Werten gibt das =26/16*100 = 162,5

Schreibe ich irgendwo in eine Tabelle rein „=RUNDEN(BD56;0)“, erhalte ich 163. Jubel bricht ins Land.

Schreibe ich unter VBA Round|CInt|CLng(.Cells(BD56)), kriege ich 162.

Ich kriege hier noch die Motten!!!

Tippe ich in eine Zelle 1,5, in die andere 162,5, kriege ich unter VBA mit besagten Funktionen 2 (si!) und 162 (ebenso si!). Was soll dieser Sch…???

Ist das nur bei mir so? Kann das jemand bei sich nachvollziehen? Oder muss ich so was nun abfangen mit „Wenn Wochentag = Donnerstag und Ich=ziemlich müde und Zufallszahl irgendwo wie sie lustig ist und Schuhgröße des Passanten=45 und Schnürsenkelfarbe=braun, dann runde wie du willst“?

Heul! Manfred

hab dein Problen nachvollzogen und bei mir funktioniert es.
in A1 hab ich zuerst deine Berechnung gestartet und anschliessend den VBA-code.
hier der Code mit dem ich es versucht habe:

Sub test()
Dim c As Double
c = Cells(1, 1)
Cells(1, 2) = Application.WorksheetFunction.Round(c, 0)
End Sub

mfg
Spaguzzi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Manfred,
die Logik nach der die Typkonversion unter VBA mit CInt und Clng erfolgt ist nicht ganz einfach nachzuvollziehen:

Wenn die Nachkommastelle genau 0,5 beträgt, wird der Wert mit CInt und CLng immer bis zur nächsten geraden Ganzzahl gerundet. So wird beispielsweise 0,5 zu 0 abgerundet und 1,5 zu 2 aufgerundet. CInt und CLng
unterscheiden sich von der Fix- und auch der Int-Funktion, die die Nachkommastellen einer Zahl nicht runden, sondern sie verkürzen. Außerdem entspricht der Rückgabetyp von Fix und Int immer dem Typ des an sie übergebenen Wertes.

Weiteres unter der VBA-Excel-Hilfe unter Typ-Umwandlungsfunktionen.

Also nicht heulen und verzweifeln, sondern gelegentlich nachschauen, welche Merkwürdigkeiten man sich bei Microsoft ausgedacht hat. Aber eventuell hat das ganze ja auch irgendeinen hochtrabenden mathematisch-theoretischen Hintergrund, der sich einem Ingenieur der Praxis entzieht.

die Funktion Runden unter Verwendung der Worksheetfunction alá
Function Rundemal(Wert)
Rundemal = WorksheetFunction.Round(Wert, 0)
End Function
scheint einwandfrei zu funktionieren.

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Franz! Hallo, Spaguzzi!

Och, Leute!

die Logik nach der die Typkonversion unter VBA mit CInt und

Halt! Komm mir hier nicht mit Logik. Das folgende erinnert mich mehr an das „Dreikantige Schnurzelspiel“. Wenn dieses komische Zeugs mal verschimmelt war, sollte man das echt nicht mehr rauchen. Und wenn man das tut, dann sollte man sich nicht an die Programmierung von Typkonvertierungsroutinen setzen…

Also nicht heulen und verzweifeln, sondern gelegentlich
nachschauen, welche Merkwürdigkeiten man sich bei Microsoft

Genau deswegen heule und verzweifle ich ja.

ausgedacht hat. Aber eventuell hat das ganze ja auch
irgendeinen hochtrabenden mathematisch-theoretischen
Hintergrund, der sich einem Ingenieur der Praxis entzieht.

Ja, nee, is klar.

die Funktion Runden unter Verwendung der Worksheetfunction alá
Function Rundemal(Wert)
Rundemal = WorksheetFunction.Round(Wert, 0)
End Function
scheint einwandfrei zu funktionieren.

Ich werde mir eine neue Funktion bauen, die die Rundungsabfrage per Mail an den Dalai Lama schickt und eine, gerne auch philosophische, Antwort als Rückgabe erwartet…

Dennoch danke Euch beiden; jetzt weiß ich wenigstens, wie ich diese Visionen Bekloppter Art (ach, jetzt weiß ich auch, wofür VBA steht) umgehen kann…

Gruß, Manfred