Supportnet Computer
Planet of Tech

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:

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

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:

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.

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

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

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:


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.

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.

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: