Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Spalten Schleife für Solver Makro

Spalten Schleife für Solver Makro
15.05.2013 09:46:56
Wile
Hallo Zusammen
Bin gerade bei meiner Masterarbeit ein SolverMakro am generieren. Ich muss dabei eine Zahl (Varianz) mit gewissen Bedigungen minimieren. Das ist mir gelungen. Anstatt nun aber für jede Spalte ein neues Makro zu generieren, würde ich das gerne als Schleife lösen (von der erster Spalte (I) zur zweiten Spalte (J) hüpfen usw. - ca. 30 Spalten). Hier bin ich aber leider schon an meine VBA Grenzen gestossen.
--------------------------------
Sub EffFron()
SolverOk SetCell:="$I$35", MaxMinVal:=2, ValueOf:="0", ByChange:="$I$38:$I$44"
SolverAdd CellRef:="$I$33", Relation:=2, FormulaText:="$I$34"
SolverOk SetCell:="$I$35", MaxMinVal:=2, ValueOf:="0", ByChange:="$I$38:$I$44"
SolverAdd CellRef:="$I$63", Relation:=2, FormulaText:="1"
SolverOk SetCell:="$I$35", MaxMinVal:=2, ValueOf:="0", ByChange:="$I$38:$I$44"
SolverSolve (True)
End Sub

------------------------------
Herzlichen Dank für euer Hilfe.
Gruss Wile
Userbild

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten Schleife für Solver Makro
15.05.2013 09:57:37
Klaus
Hi Wile,
ungetestet mangels Musterdatei (dein Bild tippe ich nicht ab) könnte es so gehen:
Sub SolverJumpCols()
Const iColFirst As Long = 9 'in Spalte I anfangen (A=1, B=2 usw)
Const iColJump As Long = 30 '30 Spalten hüfpfen
Dim iCol As Long
For iCol = iColFirst To (iColFirst + iColJump)
SolverOk SetCell:=Cells(35, iCol).Address, MaxMinVal:=2, ValueOf:="0", ByChange:=Range( _
Cells(38, iCol), Cells(44, iCol)).Address
SolverOk SetCell:=Cells(35, iCol).Address, MaxMinVal:=2, ValueOf:="0", ByChange:="Range( _
Cells(38, iCol), Cells(44, iCol)).Address"
SolverAdd CellRef:=Cells(33, iCol).Address, Relation:=2, FormulaText:=Cells(34, iCol). _
Address
SolverOk SetCell:=Cells(35, iCol).Address, MaxMinVal:=2, ValueOf:="0", ByChange:=Range( _
Cells(38, iCol), Cells(44, iCol)).Address
SolverAdd CellRef:=Cells(63, iCol).Address, Relation:=2, FormulaText:="1"
SolverOk SetCell:=Cells(35, iCol).Address, MaxMinVal:=2, ValueOf:="0", ByChange:=Range( _
Cells(38, iCol), Cells(44, iCol)).Address
SolverSolve (True)
Next iCol
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Spalten Schleife für Solver Makro
15.05.2013 11:18:20
Wile
Hi Klaus
Der Code ist super. Habe nur noch ein Problem: Die Bedingung, dass die Summe der Akitenindices (MSCI...) 100% sein soll, funktioniert noch nicht. An was könnte das liegen?
Die Datei ist leider zu gross zum Hochladen. Ich könnte dir diese aber auch schnell schicken.
Sub EffFron()
Const iColFirst As Long = 9 'in Spalte I anfangen (A=1, B=2 usw)
Const iColJump As Long = 30 '30 Spalten hüfpfen
Dim iCol As Long
SolverReset
For iCol = iColFirst To (iColFirst + iColJump)
SolverOk SetCell:=Cells(35, iCol).Address, MaxMinVal:=2, ValueOf:="0", ByChange:=Range( _
Cells(38, iCol), Cells(61, iCol)).Address
SolverAdd CellRef:=Cells(33, iCol).Address, Relation:=2, FormulaText:=Cells(34, iCol). _
Address
SolverOk SetCell:=Cells(35, iCol).Address, MaxMinVal:=2, ValueOf:="0", ByChange:=Range( _
Cells(38, iCol), Cells(61, iCol)).Address
SolverAdd CellRef:=Range(Cells(38, iCol), Cells(61, iCol)).Address, Relation:=3, FormulaText:=" _
0"
SolverAdd CellRef:=Cells(63, iCol).Address, Relation:=2, FormulaText:="1"
SolverSolve (True)
Next iCol
End Sub

Und noch eine zusätzliche Ergänzung. Wie kann ich einen Stopp setzen. Z.B. nach 30 Wiederholungen?
Herzlichen Dank für deine Hilfe. Du hast mich tausend Schritte weiter gebracht.

Anzeige
AW: Spalten Schleife für Solver Makro
15.05.2013 11:59:34
Klaus
Hi Wile,
Die Bedingung, dass die Summe der Akitenindices (MSCI...) 100% sein soll, funktioniert noch nicht. An was könnte das liegen?
keine Ahnung, Solver kann ich nicht. Ich hab nur stumpf aus deinem Code die absoluten Zellbezeichnungen gegen variablen getauscht. Wenn dein Code vorher ging und jetzt nicht mehr, hab ich irgendwo einen Tippfehler gemacht.
Wie kann ich einen Stopp setzen. Z.B. nach 30 Wiederholungen?
Was meinst du mit STOP? Und was mit Wiederholungen? Der Code läuft jetzt 30 mal, von Spalte 9 bis Spalte 39. Die Anzahl der Spalten sowie die Anfangsspalte kannst du oben in den "Const" verändern.
Grüße,
Klaus M.vdT.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige