Supportnet / Forum / Tabellenkalkulation
Schleifen (Wiederhollungen) mit Excel erstellen
Frage
Hallo,
ich würde gerne eine Art Schleife mit Excel erstellen, weiß leider nur nicht wie.
Problem: Eine Rechenoperation (in diesem Fall Addieren von zwei Zellen) soll so lange durchgeführt (wiederholt) werden, bis ein bestimmter Wert erreicht ist.
Würde mich super über Hilfe freuen.
Danke
Antwort 1 von coros
Hi elefant,
das kann man z.B. mit einer For/Next Schleife realisieren. Asl Beispiel: Es soll 10x zu dem Wert aus Zelle A1 die Zahl 2 addiert werden. Dann würde solch eine Schleife folgendermaßen aussehen:
Dieses Makro muss in ein StandardModul Deiner Tabelle kopiert werden und einer Befehlsschaltfläche zugewiesen werden.
Wenn Du nicht weißt, wie Du das Makro in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in Anleitung zum VBA Projekt “Modul" nach. Dort habe ich eine bebilderte Anleitung dazu.
Ich hoffe, Du kommst klar. Bei Fragen oder Problemen melde Dich wieder.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
das kann man z.B. mit einer For/Next Schleife realisieren. Asl Beispiel: Es soll 10x zu dem Wert aus Zelle A1 die Zahl 2 addiert werden. Dann würde solch eine Schleife folgendermaßen aussehen:
Sub Schleife()
Dim Wiederholungen As Long
For Wiederholungen = 1 To 10
Range("A1") = Range("A1") + 2
Next
End Sub
Dieses Makro muss in ein StandardModul Deiner Tabelle kopiert werden und einer Befehlsschaltfläche zugewiesen werden.
Wenn Du nicht weißt, wie Du das Makro in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in Anleitung zum VBA Projekt “Modul" nach. Dort habe ich eine bebilderte Anleitung dazu.
Ich hoffe, Du kommst klar. Bei Fragen oder Problemen melde Dich wieder.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von elefant
Hallo Coros,
erstmal vielen Dank für den Tip.
Mein Problem ist jetzt noch wie ich es hinbekomme, dass das VBA-Modul automatisch abläuft, ohne dass ich es extra aktivieren muss.
Außerdem muss die BErechnung für eine ganze Spalte erfolgen und wenn ich die Range erweitere passiert leider gar nichts mehr.
Aus dem Grund habe ich mich entschieden eine Formel zu definieren, die aber leider nicht funktioniert. Vielleicht kannst Du mir ja sagen wieso.
Zwei Alternativen:
Function Schleif(FC, LGmin, LGSprung)
Dim prodStückzahl As Long
For prodStückzahl = 1 To FC
Range("BQ:BQ") = LGmin + LGSprung
Next
End Function
oder
Function Schleife(FC, LGa, LGb)
Dim prodStückzahl As Integer
Application.Worksheets("xy").Activate
Application.Worksheets("xy").Select
prodStückzahl = LGSprung + LGmin
Do While prodStückzahl >= FC
Schleife = prodStückzahl
Loop
End Function
erstmal vielen Dank für den Tip.
Mein Problem ist jetzt noch wie ich es hinbekomme, dass das VBA-Modul automatisch abläuft, ohne dass ich es extra aktivieren muss.
Außerdem muss die BErechnung für eine ganze Spalte erfolgen und wenn ich die Range erweitere passiert leider gar nichts mehr.
Aus dem Grund habe ich mich entschieden eine Formel zu definieren, die aber leider nicht funktioniert. Vielleicht kannst Du mir ja sagen wieso.
Zwei Alternativen:
Function Schleif(FC, LGmin, LGSprung)
Dim prodStückzahl As Long
For prodStückzahl = 1 To FC
Range("BQ:BQ") = LGmin + LGSprung
Next
End Function
oder
Function Schleife(FC, LGa, LGb)
Dim prodStückzahl As Integer
Application.Worksheets("xy").Activate
Application.Worksheets("xy").Select
prodStückzahl = LGSprung + LGmin
Do While prodStückzahl >= FC
Schleife = prodStückzahl
Loop
End Function
Antwort 3 von Primut
Hi elefant,
ich habe dir eine benutzerdefinierte Funktion gebastelt, die du über den Funktionsmanager dann aufrufen kannst (benutzerdefinierte Funktion)
Sie addiert zwei Zellen so lange, bis ein Zielwert erreicht oder überschritten ist und gibt als Ergebnis die entsprechende Additionsanzahl aus. ICh hoffe mal, das hast du gesucht:
Besten Gruß
Primut
ich habe dir eine benutzerdefinierte Funktion gebastelt, die du über den Funktionsmanager dann aufrufen kannst (benutzerdefinierte Funktion)
Sie addiert zwei Zellen so lange, bis ein Zielwert erreicht oder überschritten ist und gibt als Ergebnis die entsprechende Additionsanzahl aus. ICh hoffe mal, das hast du gesucht:
Function Schleif(Zielwert As Double, Zelle1 As Range, Zelle2 As Range)
Dim Anzahl As Integer
Dim Wert As Double
Application.Volatile
Wert = 0
Anzahl = 0
Do
Wert = (Zelle1.Value + Zelle2.Value) + Wert
Anzahl = Anzahl + 1
Loop Until Wert >= Zielwert
Schleif = Anzahl
End Function
Besten Gruß
Primut
Antwort 4 von elefant
Hallo!
Das hört sich doch schon mal gut an. Danke schön.
Allerdings brauche ich als Ergebnis nicht die Additionsanzahl sondern den Wert, d.h. das Ergebis von Zelle1 + Zelle2.
Habe versucht Deine Formel anzupassen, aber selbst dazu war ich zu blöd.
Wäre also super, wenn Du mir nochmal helfen könntest.
Danke
P.S. Warum hast Du Wert und Anzahl am Anfang = 0 gesetzt.
Das hört sich doch schon mal gut an. Danke schön.
Allerdings brauche ich als Ergebnis nicht die Additionsanzahl sondern den Wert, d.h. das Ergebis von Zelle1 + Zelle2.
Habe versucht Deine Formel anzupassen, aber selbst dazu war ich zu blöd.
Wäre also super, wenn Du mir nochmal helfen könntest.
Danke
P.S. Warum hast Du Wert und Anzahl am Anfang = 0 gesetzt.
Antwort 5 von Primut
Hi elefant,
aber hast du denn meine Funktion wenigstens zu laufen bekommen? Ansonsten hat ja Coros erklärt, wohin der Code zu kopieren ist.
Fürs Ergebnis schreib letzte Zeile:
Schleif = Wert
Wenn du also die Anzahl nicht brauchst, kannst du alles damit löschen.
PS: Mit Application.Volatile wird diese Funktion immer berechnet, wenn sich das Blatt ändert. Die Nullsetztung am Anfang ist wichtig, damit jedesmal mit definierten Anfangsbedingungen gerechnet wird.
Gruß Primut
aber hast du denn meine Funktion wenigstens zu laufen bekommen? Ansonsten hat ja Coros erklärt, wohin der Code zu kopieren ist.
Fürs Ergebnis schreib letzte Zeile:
Schleif = Wert
Wenn du also die Anzahl nicht brauchst, kannst du alles damit löschen.
PS: Mit Application.Volatile wird diese Funktion immer berechnet, wenn sich das Blatt ändert. Die Nullsetztung am Anfang ist wichtig, damit jedesmal mit definierten Anfangsbedingungen gerechnet wird.
Gruß Primut
Antwort 6 von elefant
Vielen Dank, Primut.
Läuft alles wunderbar.
Ich habe leider eine Sache nicht berücksichtigt.
In der Schleife soll berechnet werden Zelle1 + Zelle2 + Zelle2 + Zelle2 +.... so lange bis der Zielwert erreicht ist.
Auch wenn Du wahrscheinlich jetzt denkst, ist die denn total blöd, würde ich mich nochmal riesig über hilfe freuen.
Gruß Elefant
Läuft alles wunderbar.
Ich habe leider eine Sache nicht berücksichtigt.
In der Schleife soll berechnet werden Zelle1 + Zelle2 + Zelle2 + Zelle2 +.... so lange bis der Zielwert erreicht ist.
Auch wenn Du wahrscheinlich jetzt denkst, ist die denn total blöd, würde ich mich nochmal riesig über hilfe freuen.
Gruß Elefant
Antwort 7 von Primut
Hi Elefant,
na ja, ist schon nicht immer ganz so einfach, sein Problem eineindeutig und unmißverständlich darzustellen.
Versuchs einfach mit folgendem Code:
Achtung: wenn du in Zelle 2 eine 0 eingibst, bleibt die Funktion in einer Endlosschleife hängen. Da hab ich auf die Schnelle keine Fehlerbehandlung gefunden.
Gruß Primut
na ja, ist schon nicht immer ganz so einfach, sein Problem eineindeutig und unmißverständlich darzustellen.
Versuchs einfach mit folgendem Code:
Function Schleif(Zielwert As Double, AnfangsWert As Range, Step As Range)
Dim Wert As Double
Application.Volatile
Wert = AnfangsWert.Value
Do
Wert = Step.Value + Wert
Loop Until Wert >= Zielwert
Schleif = Wert
End Function
Achtung: wenn du in Zelle 2 eine 0 eingibst, bleibt die Funktion in einer Endlosschleife hängen. Da hab ich auf die Schnelle keine Fehlerbehandlung gefunden.
Gruß Primut
Antwort 8 von elefant
Danke Primut, hast mir echt super geholfen.
Läuft jetzt alles super.
Läuft jetzt alles super.
Antwort 9 von res81
Hallo,
ich hab ein ähnliches Problem. Leider habe nach hunderten Versuchen noch keine Lösung gefunden. Vielleicht könnt ihr mir helfen.
das Problem: Für "di" soll so lang eine Zahl eingesetzt werden bis "diN" = 0. Das Ergebnis der Ausgabe soll dann di sein.
Würde mich freuen, wenn ihr mir helfen könntet.
Danke & Gruss res
ich hab ein ähnliches Problem. Leider habe nach hunderten Versuchen noch keine Lösung gefunden. Vielleicht könnt ihr mir helfen.
das Problem: Für "di" soll so lang eine Zahl eingesetzt werden bis "diN" = 0. Das Ergebnis der Ausgabe soll dann di sein.
Function di(Q As Double, m As Double, cp As Double, VL, RL, R_Wert As Double, Rho As Double, kinVisk As Double, Epsylon As Double)
Const Pi As Double = 3.14159265
Dim di As Long
'Dim dir As Double
Do Until diN = 0
For di = 0 To 300 'Step 0.0000000000001
diN = (Sqr((4 * Q) / ((Sqr((2 * R_Wert * (di / 1000)) / Rho)) * (-2) * (Log((((2.51 * kinVisk) / (Sqr((2 * R_Wert * (di / 1000)) / Rho) * (di / 1000)))) + ((Epsylon / 1000) / (3.72 * (di / 1000)))) / Log(10)) * Pi * Rho * cp * (VL - RL)))) * (di / 1000)
Next di
Loop
End Function
Würde mich freuen, wenn ihr mir helfen könntet.
Danke & Gruss res