# Excel Zielwertsuche



## BlockeR (10. Oktober 2008)

Hallo,
Hab ein kleines Problem mit meiner Exceltabelle. Bin da nicht so der Fuchs. Ich weiß es muss irgendwo eine Zielwertsuche geben die ich benötige.

Hier die Beschreibung von meinem Problem:

Im Blatt 'Endstücklänge 1xT' ist ein frei wählbares Feld (gelber Hintergrund). Dieser Wert wird von mir noch mauell eingetragen. Er sollte aber automatisch berechnet werden. Diese Zielwertsuche für dieses Feld sollte heißen: wie groß muss C19 sein, damit B36 = H45 ist! Also ich hab keine Ahnung wie ich so eine Zielwertsuche einfüge, ob das überhaupt der richtige Weg ist oder wie auch immer. Hoffe ihr könnt mir da helfen was ich wo reinschreiben muss.


----------



## ronaldo84 (10. Oktober 2008)

Wenn ich dich richtig verstehe mußt du der Zelle C19 einfach nur =H45-B36 zuweisen.


----------



## Zvoni (10. Oktober 2008)

Dann bekommst du aber einen Zirkelbezug.
Wenn ich es richtig verstanden habe, wird B36 von C19 beeinflusst, und nicht umgekehrt!


----------



## duckdonald (10. Oktober 2008)

Hallo,

wenn in den Optionen unter Berechnung die Iteration aktiviert ist, dann kann sehr wohl mit Zirkelbezügen gerechnet werden - auch wenn es nicht gerade die feine englische ist.
Excel versucht dann trotzdem einen Wert zu finden, wenn sich nicht allzu komplizierte Formeln hinter den anderen Zellen verbergen kommt meißt auch ein Ergebnis, ansonsten quittiert er das halt wie gewohnt mit einen Formelfehler.

DD


----------



## BlockeR (13. Oktober 2008)

So, falls es funktioniert mit der Datei, dann könnt ihr mal sehen was ich da so für tolle bezüge und so habe! Dann seht ihr ja die Abhängigkeiten. Auf jeden Fall soll dieses gelbe Kästchen(C19) alleine ausgerechnet werden, für den Fall das somit H45 = B36 wird.


----------



## duckdonald (13. Oktober 2008)

Eine halbautomatische Variante wäre noch die Option "Zielwertsuche..." im Menü Extras.

Im erscheinenden Fenster als Zielzelle H45, als Zielwert die Zahl aus B36 (also 71,23) und als Veränderbare Zelle C19. Nach ein klick auf OK präsentiert Excel die korrekte Zahl . . . . . aber dabei ist halt noch selbst Hand anzulegen.


Aber: da sich das gesamte als Makro aufzeichnen lässt, hat man die Aktion, die der Ausführt.
Rechtsklick auf den Tabellenreiter und dann "Code anzeigen" und folgendes 1:1 einfügen:
	
	
	



```
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("H45").GoalSeek Goal:=Range("B36"), ChangingCell:=Range("C19")
End Sub
```

Von nun an sollte er das selber immer bei jeder Änderung im Tabellenblatt nachrechnen.

DD


----------



## BlockeR (13. Oktober 2008)

funktioniert irgendwie nicht...wie füge ich den Code ein? Hab versucht es bei Makro bearbeiten einzufügen aber irgendwie t das nicht...muss ich das einfach nur einfügen und ausführen?


----------



## Zvoni (13. Oktober 2008)

Menü "Extras - Makro - Visual Basic Editor..."
Dort Doppelclick auf Tabelle1 (oder halt das Blatt auf was es angewendet werden soll) und dort den Code reinpasten


----------



## duckdonald (13. Oktober 2008)

duckdonald hat gesagt.:


> *Rechtsklick* auf den *Tabellenreiter* und dann "*Code anzeigen*" und folgendes 1:1 einfügen:
> 
> 
> 
> ...



Der Tabellenreiter ist in dem Fall unten wo "Tabelle 1" dasteht. dann öffnet sich ein Fenster an genau der richtigen Stelle und da kopierste den Code rein - Fertig!
Und "Änderung" heißt nichts anderes als Änderung, also erst sowie du irgendeine Zelle im Tabellenblatt bearbeitet hast macht der was - und das automatisch, immer. (Vorraussetzung natürlich Makros sind erlaubt -> Menü Extras->Makro->Sicherheit)

DD


----------



## BlockeR (13. Oktober 2008)

habe Excel 2007, da gibts keine Extras..xD.....habe mit ALT+X+W die Zielwertsuche aufgerufen, jedoch macht er es dann nur ein mal und nicht permanent. So müsste ich für jeden neuen Fall eine neue Zielwertsuche eingeben. Hinzu kommt noch das ich in dem nächsten Fall zwei veränderbare Zellen habe, die aber beide auch voneinander abhängen. In der anhängenden Datei habe ich manuell die gesuchten Werte schon eingetragen(somit ist H45 fast B36)...allerdings habe ich Sie durch probieren (wie eine mauelle iteration) herausgefunden. Dies sollte aber auch automatisch exakt ausgerechnet werden.


----------



## duckdonald (13. Oktober 2008)

Aber auch unter Office07 gibt es die Makroeinstellungen (Entwicklertools->Makrosicherheit)

Weiterhin funktioniert das einfügen des Codes genauso, allerdings muss nach dem ändern der Makrosicherheit die Arbeitsmappe neu geöffnet werden.

Und die automatische Anpassung der 2. Zelle schließt sich ja schon aus, da die erste Zahl ermittelt wird und somit schon H45=B36 ist, also eine darauffolgende Zielwertermittlung einfach übersprungen werden würde.

DD


----------



## BlockeR (13. Oktober 2008)

Habe die Datei mal mit Skizzen eingefügt, um das Problem besser sichtbar zu machen. Eine kleine Problemstellung bzw. Randbedingung steht mit rotem Text in der Datei.


----------



## BlockeR (13. Oktober 2008)

So, habe noch einmal etwas geändert und das Problem wieder mit in die Datei geschrieben. Die zwei Skizzen sollten etwas mehr Klarheit in mein Thema bringen.

Trotzdem schon einmal ein Danke an euch!


----------



## duckdonald (14. Oktober 2008)

Auf Basis des Scriptes der automatischen Zielwertsuche nun noch eine manuelle drumrum gestrickt.

Soll heißen beide Zellen auf 0 setzen, dann Zielwertsuche für D19 (Bedingung C26=0)
und nun 
solange B36 > H45 addiere zu C19 +0,001 und automatische Zielwertsuche für D19 (Bedingung C26=0)

Achtung das Script ist nur so dahingeworfen und braucht (bei mir) ca 65sek zur Lösungsfindung!
Mit ein paar Anpassungen lässt sich das noch senken (aber nicht um diese Uhrzeit :suspekt.

DD


----------



## BlockeR (15. Oktober 2008)

Oh Top...das funktioniert. Wenn ich das richtig mitbekomme habe, dann braucht meiner 170sek dafür. So ein bisschen seh ich sogar durch(bei der Erklärung zumindest). Mein letzter Wunsch: kreigst du das auch noch für 3Rollen hin? Habe mal wieder die Werte per manueller Itteration herausbekommen. Die 2. Rolle würde demnach mit einer Kraft von 0,5N andrücken (siehe Anhang). Das wäre der letzte Fall für meine Betrachtung übrigens

Danke für die bisherigen Bemühungen!


----------



## duckdonald (15. Oktober 2008)

Zuersteinmal Codeoptimierung - tausche den vorhandenen durch diesen aus:
	
	
	



```
Sub losung()
'  zeit = Timer
  Range("C19:D19").Value = 0
  Range("C26").GoalSeek Goal:=0, ChangingCell:=Range("D19")
  Do
    If (Cells(36, 2).Value - Cells(45, 8).Value) * -1 > 0.5 Then
      Cells(19, 3) = Cells(19, 3) + 0.01
    Else
      Cells(19, 3) = Cells(19, 3) + 0.001
    End If
    If Cells(26, 3) <> 0 Then
      i = 0
      Range("C26").GoalSeek Goal:=0, ChangingCell:=Range("D19")
    End If
  
  Loop Until Cells(36, 2).Value > Cells(45, 8).Value
  
'  zeit = Timer - zeit
'  Cells(2, 1).Value = "Aktualisierungszeit: " & zeit & "sek"

End Sub
```
 Solange die Differenz H45 und B36 groß ist, mache große Schritte, ansonsten kleinere. Bei mir braucht das Script nun nur noch 11 sekunden zur Lösungsfindung.

Und zu den Problem mit 3 Rollen . . . . . . . egal welche der 3 Zellen ich verändere (und in welchen ausmaße) die Zelle H45 bleibt gleich, Ursache wird wohl die veränderte Zelle C26 sein. Aber so, lässt dich das Script nicht anwenden.

DD


----------

