Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1704to1708
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel-Solver mit VBA für mehrere Zeilen ausführen

Excel-Solver mit VBA für mehrere Zeilen ausführen
31.07.2019 11:06:42
Toby
Liebes herber-Forum,
ich stehe leider - als ziemlicher VBA-Neuling - vor einem großen Problem. ich würde gerne den Solver innerhalb einer Excel-Tabelle mehrfach anwenden.
Genauer gesagt stehen in meinem Beispiel die zu verändernen Variablenzellen in den Spalten CX,CZ,DB und DD, die zu minimierende Zielzelle steht neben dran in der Spalte DG. Zudem gibt es noch einige Nebenbedingungen. Für die in Zeile 93 stehenden Werte sieht das Solver-Makro wie folgt aus:
  • 
    Sub Solver_test()
    SolverOk SetCell:="$DG$93", MaxMinVal:=2, ValueOf:=0, ByChange:= _
    "$CX$93,$CZ$93,$DB$93,$DD$93", Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve
    End Sub
    

  • Nun zum eigentlichen Problem: Die Zeilen in welchen die jeweils zu lösenden Probleme stehen sind nicht statisch sondern variabel. Die Spalten sind hingegen fix (CX,CZ,DB,DD,DG). So soll bei der derzeitigen Ausgestaltung der Paramenter für die Tabelle der Solver für die Zeilen 33,53,73,93, ... (immer +20) ausgeführt werden. Der Zeilenabstand von 20 ergibt sich aus einer Vorgabe die ich ihn Zelle DQ5 (Zellwert = 20) tätige. Diese Vorgabe soll aber verändert werden können. Nun bin ich verzweifelt auf der Suche nach einer Möglichkeit, den Solver via Makro mit obiger Logik und Nebenbedingungen für sämtliche in der Tabelle befindlichen Zeilen, bei denen für die Spalten CX,CZ,DB & DD etc Werte bestehen, durchlaufen zu lassen (wohl wissend um die Dauer, da die Tabelle momentan bis zu Zeile 1300 geht und ständig verlängert wird).
    Hättet ihr mir hier irgendwelche Tips/Hilfestellungen? Vielen lieben Dank euch vorab dafür!!! :-)
    LG
    Toby

    4
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Excel-Solver mit VBA für mehrere Zeilen ausführen
    31.07.2019 21:23:59
    Werner
    Hallo Toby,
    ich habe bisher noch nie mit dem Solver gearbeitet geschweige denn diesen per Makro gesteuert.
    Einen Versuch will ich trotzdem wagen.
    Also bitte nicht mit deiner Originaldatei testen - aber das sollte sich von selbst verstehen.
    Sub Solver_test()
    Dim i As Long
    'Blattname anpassen
    With Worksheets("Tabelle1")
    For i = 33 To .Cells(.Rows.Count, "DG").End(xlUp).Row Step .Range("DQ5")
    If IsNumeric(.Cells(i, "DG")) And IsNumeric(.Cells(i, "CX")) _
    And IsNumeric(.Cells(i, "CZ")) And IsNumeric(.Cells(i, "DB")) _
    And IsNumeric(.Cells(i, "DD")) Then
    SolverOk SetCell:="$DG$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:= _
    "$CX$" & i & ",$CZ$" & i & ",$DB$" & i & ",$DD$" & i & "", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve
    End If
    Next i
    End With
    End Sub
    
    Gruß Werner
    Anzeige
    AW: Excel-Solver mit VBA für mehrere Zeilen ausführen
    06.08.2019 12:35:53
    Toby
    Hallo Werner,
    wow! Erstmal vielen lieben Dank für die hilfreiche Antwort. Der Code funktioniert in der Tat. Nun stehe ich jedoch vor einem weiteren Problem. Ich habe den Code um ein paar Nebenbedingungen für den Solver erweitert:
    Sub Solver_test()
    Dim i As Long
    'Blattname anpassen
    With Worksheets("daily-Daten+Historie (exSaSo)")
    For i = 33 To .Cells(.Rows.Count, "DG").End(xlUp).Row Step .Range("DQ5")
    If IsNumeric(.Cells(i, "DG")) And IsNumeric(.Cells(i, "CX")) _
    And IsNumeric(.Cells(i, "CZ")) And IsNumeric(.Cells(i, "DB")) _
    And IsNumeric(.Cells(i, "DD")) Then
    SolverOk SetCell:="$DG$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:= _
    "$CX$" & i & ",$CZ$" & i & ",$DB$" & i & ",$DD$" & i & "", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:=.Cells(i, "CY"), Relation:=2, FormulaText:=.Cells(i, "DA")
    SolverAdd CellRef:=.Cells(i, "DA"), Relation:=2, FormulaText:=.Cells(i, "DC")
    SolverAdd CellRef:=.Cells(i, "DC"), Relation:=2, FormulaText:=.Cells(i, "DE")
    SolverAdd CellRef:=.Cells(i, "DF"), Relation:=2, FormulaText:="1"
    SolverOk SetCell:="$DG$" & i, MaxMinVal:=2, ValueOf:=0, ByChange:= _
    "$CX$" & i & ",$CZ$" & i & ",$DB$" & i & ",$DD$" & i & "", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve UserFinish:=True
    End If
    Next i
    End With
    End Sub
    
    Leider führt dies bei Ausführung der Zeile
                SolverAdd CellRef:=.Cells(i, "DA"), Relation:=2, FormulaText:=.Cells(i, "DC")
    
    zu folgendem Fehler: "Solver: Unerwarteter interner Fehler, oder der verfügbare Arbeitsspeicher ist ausgeschöpft".
    Via Google habe ich gesehen, das bereits einige Leute im Zusammenhang mit Nebenbedingungen für den Solver solche Probleme hatten. Eine Lösung konnte ich jedoch nicht finden leider.
    Weiß jemand von euch Rat hierfür?
    Vielen Dank vorab für die Hilfe!!
    Lg
    Toby
    Anzeige
    AW: Excel-Solver mit VBA für mehrere Zeilen ausführen
    06.08.2019 12:50:30
    Werner
    Hallo Toby,
    schreibs mal so:
    SolverAdd CellRef:="CY" & i, Relation:=2, FormulaText:="DA" & i
    

    oder so:
    SolverAdd CellRef:=.Range("CY" & i), Relation:=2, FormulaText:=.Range("DA" & i)
    
    Gruß Werner
    AW: Excel-Solver mit VBA für mehrere Zeilen ausführen
    06.08.2019 13:04:06
    Werner
    Hallo Toby,
    oder aber so:
    SolverAdd CellRef:=.Cells(i, "CY").Address, Relation:=2, FormulaText:=.Cells(i, "DA").Adress
    
    Gruß Werner

    49 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige