Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Runden in VBA verallgemeinern

Forumthread: Runden in VBA verallgemeinern

Runden in VBA verallgemeinern
28.08.2024 17:43:11
Chris
Hallo,

kann ich in VBA allgemein sagen, dass alle benutzten Variablen des Typs Double, bevor sie in einer Msg Box ausgegeben werden auf 3 Nachkommastellen gerundet werden sollen, oder muss ich jede Variable a la
j1Before = Round(j1Before, 3)

einzeln auflisten?

Vielen Dank
Chris
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Runden in VBA verallgemeinern
28.08.2024 17:57:34
daniel
wenn du das nur für die Messagebox brauchst, kannst du das auch in der Messagebox machen:

Msgbox Format(deineVariable, "0.000")

Gruß Daniel
AW: Runden in VBA verallgemeinern
28.08.2024 18:07:18
Chris
Hallo Daniel,

da gebe ich dir recht, aber immer noch jede Variable einzeln...
Ich schließe dann mal aus deiner Antwort, dass es allgemein nicht möglich ist..

trotzdem danke
Chris
Anzeige
AW: Runden in VBA verallgemeinern
28.08.2024 18:38:36
daniel
Es gibt in VBA nicht die Möglichkeit, eine Gruppe von Variablen als Gruppe zu bearbeiten.
man kann auch nicht eine Schleife über eine Menge von Variablen laufen lassen.

der Workaround wäre, wenn du so was benötigst, dass du nicht jede Variable einzeln anlegst, sondern ein Array mit der entsprechenden Dimensionierung
also statt
Dim A as Double

dim B as Double
dim C as Double
A = 1/7
B = 1/3
C = 1/6
A = Round(A, 3)
B = Round(B, 3)
C = Round(C, 3)

dann
dim ABC(1 to 3) as Double

ABC(1) = 1/7
ABC(2) = 1/3
ABC(3) = 1/6
for i = 1 to 3
ABC(i) = Round(ABC(i); 3)
Next

allerdings musst du dir dann die Nummern merken und hast keine sprechenden Benennungen mehr

wenn du sprechende Benennungen brauchst, kannst du auch ein Dictionary anlegen.
Das ist im Prinzip ein eindimendionales Array, welches aber einen beliebigen Freitext als index zulässt

dim dic as Object

set dic = CreateObject("Scripting.Dictionary")
dic("A") = 1/7
dic("B") = 1/3
dic("C") = 1/6
for each K in dic.Keys
dic(K) = round(dic(K), 3)
Next


hier hättest du zwar wieder eine sprechende Benennung und könntest auch mit Schleifen arbeiten, allerdings fehlt dir die Unterstützung durch die Intellisense und der Schutz von Option Explicit.

Gruß Daniel
Anzeige
AW: Runden in VBA verallgemeinern
28.08.2024 18:54:27
Christian
Hallo Daniel,

wenn ich mir die Mühe mache, jede Variable einzeln in einem Array oder Dictionary aufzulisten kann ich auch jede Variable einzeln runden.
Dann finde ich wohl oder übel meine bisherige Methode praktikabler.

Aber danke für die Erklärung und die Tipps
Christian
AW: Runden in VBA verallgemeinern
28.08.2024 19:53:34
daniel
naja genau dieses Auflisten bei der Deklaration entfällt doch beim Array oder Dictionary.
du musst jetzt jede Variable einzeln auflisten
statt
Dim Variable1
Dim Variable2
Dim Variable3
Dim Variable4
Dim Variable5
Dim Variable6
Dim Variable7
Dim Variable8
dim Variable9

schreibst du einfach
dim Variablen(1 to 9)

du scheinst das Prinzip noch nicht verstanden zu haben.

Gruß Daniel
Anzeige
AW: Runden in VBA verallgemeinern
28.08.2024 18:46:01
Yal
Hmm... Ich gehe davon aus, dass was Du als Allgemein bezeichnest, ungefähr wie in Excel "für eine ganze Spalte" oder "für alle Zellen" zu deuten ist.

In der Programmierung ist eine Variable eine Einzelelement ohne sonstige Eigenschaften. Ein String ist eine Text und Integer, Long, Double sind Zahlen. Jeweils nur Text und nur Zahl.
Eine Zelle oder eine Spalte sind Objekte. Eine Spalte ist auch zusätzlich eine Sammlung von Zellen, also ein Objekt, der verschiedenen Unter-Objekte auflistet.

Um dasselbe auf deine Variable zu erreichen, müsstest Du deine Variable j1Before als Objekt definieren, für dieses Objekt die Fähigkeit ("Methode") programmieren, nur 3 Nachkommastellen zurückzugeben und eine Auflistung kreieren (auch Objekt), die alle Objekt-Variablen sammelt und dem die Methode geben, alle untergeordneten Objekte bis zum Rückruf in Format(x, "0.000") ihre Default-Wert zurückzugeben.

Alles in einem, ja möglich, aber mit eine Komplexität verbunden, die selten wirtschaftlich ist.

Einfacher wäre eine Funktion zu haben, die Zahlen in Format 0.000 zeigt:
Sub MsgBox3nk(ByVal Wert As Variant)

If IsNumeric(Wert) Then Wert = Format(Wert, "0.000")
MsgBox Wert
End Sub


dann könntest Du
MsgBox3nk j1Before
MsgBox3nk j1After
usw. anstatt
MsgBox Format ( j1Before, "0.000")
MsgBox Format ( j1After, "0.000")
verwenden.

Nicht berauschend, aber falls aus 3 Nachkommastellen 2 werden sollten, müsstest Du mit der Funktion nur eine einzige Stelle im Code anpassen.

VG
Yal
Anzeige
AW: Runden in VBA verallgemeinern
28.08.2024 19:13:17
Chris
Hallo Yal,

funktioniert, danke.

Gruß Christian
AW: Runden in VBA verallgemeinern
28.08.2024 19:58:36
daniel
und was ist da jetzt besser als bei meiner ersten Antwort?
hier musst du doch auch immer noch jede Variable einzeln bearbeiten?
muss ich dich da verstehen?
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige