Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hilfe beim Makro schreiben

Hilfe beim Makro schreiben
14.08.2015 13:56:31
Julia559
Hallo zusammen,
ich bin absoluter Neuling in Sachen VBA. Allerdings benötige ich dringend ein Makro, dass folgendes erledigen soll:
Ich habe auf einem Excel-Tabellenblatt bereits verschiedene Berechnungen mittels Formeln vorgenommen. Nun möchte ich die Zelle E52 (Dezimalzahl) dieses Tabellenblatts schrittweise um 0,01 erhöhen. Durch die bereits hinterlegten Formeln wird durch die Veränderung in E52 jeweils eine neue Zahl in der Zelle G45 (Dezimalzahl) berechnet. Die Zelle E52 soll nun solange um 0,01 erhöht werden, bis erstmalig der dadurch berechnete Wert in G45 kleiner dem in dem vorherigen Schritt ermittelten Wert von G45 ist, d.h. bevor ich E52 um 0,01 erhöht habe. Wenn dieser Fall eintritt, soll mir der entpsrechende Wert von G45 als Dezimalzahl in einem neuen Tabellenblatt "Ergebnis" Zelle B5 angezeigt werden.
Ich denke, dass mir eine Schleife helfen könnte. Allerdings habe ich überhaupt keine Ahnung, wie der Code dazu lautet.
Ich bin um jede Hilfe und jeden Rat dankbar.
Schon jetzt vielen Dank!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe beim Makro schreiben
14.08.2015 15:33:38
Michael
Hi Juli,
versuch's mal so:
Sub iteration()
Dim i As Long
Dim wert As Double
i = 0 ' Notnagel zur Verhinderung einer Endlosschleife
Do
wert = Range("G45").Value
Range("E52") = Range("E52") + 0.01
i = i + 1
Loop Until (Range("G45")  998 Then
Sheets("Ergebnis").Range("B2").Value = "Iterationen: " & i
Else
Sheets("Ergebnis").Range("B2").Value = Range("g45")
End If
End Sub
Schöne Grüße,
Michael

AW: Hilfe beim Makro schreiben
14.08.2015 16:51:37
Julia559
Hallo Michael,
vielen Dank für deine Hilfe. Es hat super geklappt. Ich habe nun einen Button eingefügt, der per Mausklick das Makro ausführt. Sofern sich der Button auf dem gleichen Tabellenblatt befindet, wie die Zellen E52 und G45 selbst ("Rechnungen"), funktioniert das Ganze. Füge ich den Button in einem anderen Tabellenblatt ein ("Basis"), dann wird das Makro falsch ausgeführt. Weißt du woran das liegt bzw. wie man diesen Fehler umgehen kann, wenn ich den Button gerne in dem Tabellenblatt "Basis" einfügen möchte?
Ist es möglich das Makro derart abzuändern, dass jedes mal wenn der Button betätigt wird das Ergebnis in dem Tabellenblatt "Ergebnis" angezeigt und quasi gespeichert wird? Also beim ersten Mausklick steht das Ergebnis in Zelle B5 und wird gespeichert, bei dem zweiten Mausklick in der Zelle B6 und wird gespeichert, bei dem dritten Mausklick in der Zelle B7 und wird gespeichert, usw.
Vielen Dank für die Tipps!
Liebe Grüße,
Julia

Anzeige
zum Verständnis
14.08.2015 17:42:41
Michael
Hi Juli,
das Makro bezieht sich (sofern keine konkreten Angaben Sheets(...) gemacht werden) immer auf das Blatt, in dem es steht: *wenn* es in einem Blatt steht, und das scheint bei Dir der Fall zu sein.
Füge ein Modul ein (im VB-Editor Einfügen/Modul), schneide den Code im Blatt aus und kopiere ihn dorthin,
und die Sache sollte flutschen: wenn das Ding im Modul steckt, wird (ohne konkrete Angaben) immer das gerade "aktive" Blatt genommen, also das, von dem das Makro aufgerufen wird.
Vergiß nicht, die Buttons neu zuzuweisen, denn das Makro ist jetzt woanders als zuvor.
So. Jetzt schreibst Du ins Blatt "Ergebnis" in eine freie Zelle, z.B. B1, eine 2 und verwendest das Makro mit den folgenden, kleinen Änderungen:
Sub iteration()
Dim i As Long, j As Long
Dim wert As Double
j = Sheets("Ergebnis").Range("B1").Value
i = 0 ' Notnagel zur Verhinderung einer Endlosschleife
Do
wert = Range("G45").Value
Range("E52") = Range("E52") + 0.01
i = i + 1
Loop Until (Range("G45") j = j + 1
If i > 998 Then
Sheets("Ergebnis").Range( "B" & j ).Value = "Iterationen: " & i
Else
Sheets("Ergebnis").Range( "B" & j ).Value = Range("g45")
End If
Sheets("Ergebnis").Range("B1").Value = j
End Sub
Dadurch "merkt" sich Excel die zuletzt verwendete Ausgabezeile und nimmt immer die nächsthöhere.
Schöne Grüße,
Michael

Anzeige
AW: zum Verständnis
16.08.2015 18:15:28
Julia559
Hallo Michael,
vielen vielen Dank für die Ratschläge und die super guten Erklärungen.
Es hat alles geklappt!!!!
Viele Grüße,
Julia

freut mich, danke für die Rückmeldung,
16.08.2015 20:19:17
Michael
Julia,
und vielen Dank für das "supergut"!!!
Schöne Grüße,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige