AW: Schleife programmieren und Zellen auslesen
fcs
Hallo Simon,
da du ja iterativ rechnen willst, muss der Wert aus C17 zwangsläufig immer am Ende jedes Durchlaufs durch den Wert in C22 ersetzt werden.
Du muss also den Startwert in C17 in einer Variablen zwischenspeichern.
Nach Abschluß der Iteration muss dann der gemerkte Wert wieder in C17 eingetragen werden.
Nach meinem Verständnis schaut das dann etwa wie folgt aus. Die max. Anzahl an Iterationen muss du halt ggf. noch ein wenig anpassen.
Gruß
Franz
Private Sub CommandButton1_Click()
Dim dblDruckabfall As Double, dblDurchmesser As Double, dblLaenge As Double
Dim dblArrh As Double, dblTakt As Double, dblTnull As Double
Dim dblVisNull As Double, dblCarreauB As Double, dblCarreauC As Double
Dim dblVisExp As Double, dblDichte As Double, dblVolStromStart As Double
Dim dblVolStromNeu As Double, dblVisRep As Double, dblScherRep As Double
Dim dblDurchsatz As Double
Dim dblVolumenstromAlt As Double, lngCounter
'Variablen füllen
dblDruckabfall = Range("C3")
dblDurchmesser = Range("C4")
dblLaenge = Range("C5")
dblArrh = Range("C9")
dblTakt = Range("C10")
dblTnull = Range("C11")
dblVisNull = Range("C12")
dblCarreauB = Range("C13")
dblCarreauC = Range("C14")
dblVisExp = Range("C15")
dblDichte = Range("C16")
dblVolStromStart = Range("C17")
dblVolumenstromAlt = dblVolStromStart
lngCounter = 0
Do
'berechnungen durchführen
'beispiel
dblVolStromNeu = dblDruckabfall * dblLaenge
dblDurchsatz = dblVolStromNeu * dblDichte
'Ergebnis ausgeben
Range("C22") = dblVolStromNeu
Range("C26") = dblDurchsatz
If Abs(dblVolumenstromAlt - dblVolStromNeu) < 0.0001 * Abs(dblVolumenstromAlt) Then Exit Do
dblVolumenstromAlt = dblVolStromNeu
Range("C17") = dblVolStromNeu
Me.Calculate
lngCounter = lngCounter + 1
If lngCounter = 500 Then 'Notausstiegnach 500 Iterationen
MsgBox "Nach " & lngCounter & " Iterationen Genaugigkeit nicht erreicht"
Exit Do
End If
Loop
Range("C26") = dblDurchsatz
Range("C17") = dblVolStromStart
MsgBox "Iterationen: " & lngCounter
End Sub