fiasco
Goto Top

Runden von Zahlen in Excel über Makro

Hallo Community

Ich habe eine Frage zum Runden von Zahlen mit/in einem Excel Makro. Ich habe folgende Situation:


In Excel werden Werte aus einem anderen Programm übertragen. Hier in Feld C4 ist es die Zeit in Stunden. Diese Zahl wird hier über
2ec7379baa4dd4ffad41c8a0b35b9d10
=RUNDEN('Aspen Custom Modeler Language'|alles_im_ggw.acmf!\awite02.laufzeit;3)

aus dem Programm ausgelesen. Hier ist bereits mein erster Versuch die Zahl zu runden.


In meinem Makro wird nun (siehe Bild2 oder hier der Code)
2720364c0c9920497bb319c4489626f3
time = Cells(4, 5)
runtime = Round(Cells(4, 3).Value, 3)
Cells(time, 8) = Round(runtime, 3)

der Wert der Zelle C4 (andere Schreibweise 4,3 ) der Variable runtime zugewiesen. (Hier mit Round der zweite Versuch die Zahl zu runden)

Der Wert der Variable Runtime wird nun in eine Zelle einkopiert. Hier der dritte Versuch die Zahl zu runden.

Wenn ich jetzt (siehe Bild3) nachschaue, ob die Zahl wirklich gerundet wurde seh ich:
23d4d080a812a5182978dccbc396b915
NOPE!!
Für Excel ist es nach wie vor die Zahl 0,00899999961256981 und nicht einfach 0,009 (was ich aber haben will)

Meine Frage lautet nun, was mach ich falsch bzw. wie bekomm ich diese Zahl nun entgültig gerundet!!!

Vielen Dank im Voraus

Mit freundlichen Grüßen

fiASco

EDIT: OK die Bilder habe ich zwar hochgeladen aber ich selber seh sie nicht. Aber eigentlich steht eh alles wichtige im Text drin.

Content-Key: 275639

Url: https://administrator.de/contentid/275639

Printed on: April 16, 2024 at 07:04 o'clock

Mitglied: 114757
114757 Jun 25, 2015 updated at 09:40:06 (UTC)
Goto Top
Beispiel:
Sub TestRunden()
    Dim zahl As Double
    zahl = 8.99999961256981E-03
    With Range("A1")  
        .NumberFormat = "0.000"  
        .Value = Round(zahl, 3)
    End With
End Sub
Geht einwandfrei ...

Vermutlich hast du irgendwo den Wert nicht als Zahl sondern als Text vorliegen, dann solltest du ihn erst mit CDbl() konvertieren.
Gruß jodel

EDIT: OK die Bilder habe ich zwar hochgeladen aber ich selber seh sie nicht.
p.s. Wie du Bilder deinem Beitrag richtig hinzufügst, kannst du in der Formatierungs-FAQ nachlesen.
Aber eigentlich steht eh alles wichtige im Text drin.
Für ein Verständnis was du genau meinst wäre es aber schön wenn du sie trotzdem noch ergänzt.
Member: fiASco
fiASco Jun 25, 2015 at 11:18:22 (UTC)
Goto Top
Viele Dank für deine Antwort jodel

Mit dem Code:

With Range(time, 8)
.NumberFormat = ("0.000")
.Value = Round(runtime, 3)
End With

Erhalte ich den Fehler:
Laufzeitfehler '1004'
Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen

OK, kanns wenn Range nicht klappt, dann ja vielleicht Cells, aber mit

With Cells(time, 8)
.NumberFormat = ("0.000")
.Value = Round(runtime, 3)
End With

habe ich nach wie vor das gleiche Problem
Mitglied: 114757
114757 Jun 25, 2015 updated at 11:21:29 (UTC)
Goto Top
Dann musst du das Sheet mit angeben:
With ActiveSheet.Range(time,8)
oder wenn es ein bestimmtes und nicht das aktive Sheet sein soll:
With Sheets(1).Range(time,8)
Member: fiASco
fiASco Jun 25, 2015 at 11:23:22 (UTC)
Goto Top
f010f09ff4b35ce99dca45429f1e4055

Hab nur 1 Sheet
Mitglied: 114757
114757 Jun 25, 2015 updated at 11:32:06 (UTC)
Goto Top
Och mönsch ...wozu gibt's den Debugger face-sad
http://we.tl/mTUAgq6sf7

Du weißt schon was ein Range ist ?
Wenn du eine Zelle mit deren Position in Zahlen ansprechen willst musst du ActiveSheet.Cells(time,8) nehmen
Member: fiASco
fiASco Jun 25, 2015 at 11:53:36 (UTC)
Goto Top
Danke für deine Hilfe jodel

Ganz ehrlich, den genauen Unterschied zwischen Range und Cells weiß ich nicht, (klar hab ichs schon mal gegoogelt aber meine IT Kenntnisse in dieser Richtung sind eher beschränkt und es bleibt auch nicht lang drin.) Für die Sachen die ich bisher in VB gemacht/gebraucht habe war es eigtl egal was ich von beiden verwendet hab ^^ )


Hab jetzt noch nen Kollegen am Lehrstuhl gefragt und mit

time = Cells(4, 5)
runtime = Round(Cells(4, 3).Value, 3)
Cells(time, 8) = Round(runtime, 3)
Cells(time, 8) = Round(Cells(time, 8), 3)

funktioniert es.

Merkwürdigerweise war in VB der Wert gerundet.
1fdbfe3e8f1e9816cf2aaaba5efac473

Aber wird dann trotzdem ungerundet in Excel kopiert.

10fbcc88364397ad79e4b60e2541b76d

Deinen Link schau ich mir aber auch gleich an!
Member: Xolger
Xolger Jun 25, 2015 at 12:14:02 (UTC)
Goto Top
Hallo,

es sollte auch so funktionieren:
Cells(time, 8) = Format(time, "0.000")  

Als Alternative.


Gruß
Xolger