Clever-Excel-Forum

Normale Version: Zielwertsuche "Makro"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

also ich möchte in meiner Excel via Makro gerne über die ganze Tabelle eine Zielsuche laufen lassen.

Die aktuelle Formel ist folgende:

Range("BI243").GoalSeek Goal:=Range("BM243"), ChangingCell:=Range("AT243")

Aktuell wird allerdings nur die eine Zeile abgeglichen - ich möchte aber, dass das ganze über jede einzelne ausgefüllte Zeile drüber läuft...Quasi:

Range("BI243").GoalSeek Goal:=Range("BM243"), ChangingCell:=Range("AT243")
Range("BI244").GoalSeek Goal:=Range("BM244"), ChangingCell:=Range("AT244")
Range("BI245").GoalSeek Goal:=Range("BM245"), ChangingCell:=Range("AT245")
.
.
.


kann mir da jemand helfen ?

Danke.
Ok ich habe das nun aktuell wie folgt gelöst:

Public Sub Zielwert()
'----------------------Versuch 2--------------------------------'

Const iMaxIterations = 800 'Anzahl der zu durchlaufenden Iterationen
Const strStartRng = "BI8" 'erster Zellbezug, ab welcher gearbeitet wird
Const strGoalRng = "BM8" 'erster Zellbezug des Goal-Wertes
Const strChngRng = "AT8" ' erster Zellbezug des ChangingCell-Wertes


'VARIABLES
'------------------------------------------------------'
Dim i As Integer
Dim rStartCell As Range
Dim rGoalCell As Range
Dim rChngCell As Range


'DEFINIERE RANGES
'------------------------------------------------------'
Set rStartCell = Range(strStartRng)
Set rGoalCell = Range(strGoalRng)
Set rChngCell = Range(strChngRng)


'SCHLEIFE
'------------------------------------------------------'
For i = 1 To iMaxIterations
        'teste auf Abbruchbedingung VOR Ausführung des Codes
        If rStartCell.Offset(i - 1, 0).Value = "" Then Exit For
        'Starte GoalSeeker
        rStartCell.Offset(i - 1, 0).GoalSeek Goal:=rGoalCell.Offset(i - 1, 0), ChangingCell:=rChngCell.Offset(i - 1, 0)
Next i
End Sub



Funktioniert alles...glaube ich. Allerdings habe ich folgendes Problem - manchmal ist eine oder zwei Zeilen leer. Ich würde gerne in der Schleife etwas drinne haben, dass er erst aufhört wenn er 10 Zeilen hintereinander nichts zu greifen hatte...

Danke für eure HILFE
Hallöchen,

baue Dir in der Schleife einen Zähler ein, der unter einer Bedingung hochgesetzt wird Wenn die maximale Zahl erreicht ist, verässt Du die Schleife oder das Makro. Im Prinzip hast Du so was ansatzweise schon in der Schleife drin.

If rStartCell.Offset(i - 1, 0).Value = "" Then Exit For

Das könnte dann so aussehen:

If rStartCell.Offset(i - 1, 0).Value = "" Then iCnt = iCnt + 1: If iCnt > 10 then Exit For

Ob rStartCell.Offset(i - 1, 0) nun der richtige Punkt zum Prüfen ist, sei mal dahingestellt.
Stimmt....das sollte den Fehler beheben. Allerdings hab ich dann einen Debugg in der Zeile darauf...vermutlich wegen dem Thema was du schon angesprochen hattest.

"Ob rStartCell.Offset(i - 1, 0) nun der richtige Punkt zum Prüfen ist, sei mal dahingestellt."

Allerding finde / sehe ich gerade den Fehler nicht...muss ich nochmal in ruhe drüber schauen.