Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1388to1392
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

Nichtzusammenhängende Bereiche deklarieren

Nichtzusammenhängende Bereiche deklarieren
08.11.2014 19:49:31
Renner
Hallo liebe Experten,
Ich brauche wiedermal Eure Hilfe. Ich muss im Excel Solver 2 später vielleicht auch 3 nicht zusammenhängende Bereiche für die Binärzahlen ( Entscheidungsvariablen) angeben. Z.B. Range("A1:C3,E1:G3,I1;K3") Zusätzlich sind diese Bereich noch dynamisch. Für den Einfachen Fall benutzte ich folgenden Code (er funktioniert )
SolverOptions MaxTime:=100, Iterations:=100, Precision:=0.000001, AssumeLinear _
:=False, StepThru:=False, Estimates:=1, Derivatives:=1, SearchOption:=1, _
IntTolerance:=5, Scaling:=False, Convergence:=0.0001, AssumeNonNeg:=True
Dim A, B As Long ' für das Aufspannen der Matrix für ( Variablen und Nebenbedingung)
A = Auftragszahl - 1 ' -1 da beim späteren aufaddieren die Ausgangszelle mit Addiert wird,_
'das macht die Matrix um 1größer als die sein soll
B = Auftragszahl - 1
SolverOk SetCell:=Range("B8"), MaxMinVal:=2, _
ByChange:=Range(Cells(10, 33), Cells(10 + A, 33 + A))
'Binäre Variable Matrix1
SolverAdd CellRef:=Range(Cells(10, 5), Cells(10 + A, 5 + A)), Relation:=5 '
'Binäre Variable Matrix2
SolverAdd CellRef:=Range(Cells(10, 33), Cells(10 + A, 33 + A)), Relation:=5
USW.
Leider kann ich den nicht auf mehrere Bereiche anpassen.
Mein Versuch:
ByChange:=Range("Cells(10, 5), Cells(10 + A, 5 + A):Cells(10, 33), Cells(10 + A, 33 + A)")
Vielleicht habt Ihr eine Idee.
Vielen Dank im voraus.

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Solver - diskontinuierliche Bereiche
08.11.2014 23:02:49
{Boris}
Hi,
ByChange:=Range("Cells(10, 5), Cells(10 + A, 5 + A):Cells(10, 33), Cells(10 + A, 33 + A)")
Das ist syntaktisch nicht korrekt. Durch die "Anführungszeichen" wird der Part Cells(10, 5), Cells(10 + A, 5 + A):Cells(10, 33), Cells(10 + A, 33 + A) zu einem STRING und somit keinesfalls zu dem gewünschten Bereich.
Ich denke es ist sinnvoll, dass Du mal Deine Datei hochlädst - dann gibt`s vielleicht auch konkrete Hilfe.
VG, Boris

AW: Nichtzusammenhängende Bereiche deklarieren
09.11.2014 16:56:20
Renner
Hallo,
Danke für den Tipp.
Ich habe jetzt die Funktion herausgeschnitten, da die gesamte Datei mehrere Funktionen beinhaltet die alle auf Datenbank zugreifen usw.
Private Sub CommandButton1_Click()
Dim Auftragszahl As Long
With ActiveSheet
Auftragszahl = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row - 9 'liest die letzte Zeiel  _
aus -8 beschriebene Zeilen = Anzahl der Aufträge
SolverZurücksetzen
SolverOptions MaxTime:=1000, Iterations:=100, Precision:=0.000001, Convergence:=0.0001,  _
AssumeNonNeg:=True
Dim A, B As Long ' für das Aufspannen der Matrix für ( Variablen und Nebenbedingung)
A = Auftragszahl - 1 ' -1 da beim späteren aufadieren die Ausgangszelle mit Addiert wird,_
'das macht die Matrix um 1größer als die sein soll
B = Auftragszahl - 1
SolverOk SetCell:=Range("B8"), MaxMinVal:=2, _
ByChange:=Range("Cells(10, 5), Cells(10 + A, 5 + A)) :Cells(10, 33), Cells(10 + A, 33 +  _
A)")
' ,Engine:= 2, EngineDesc:="Simplex LP"
' Add the constraint for the model. The only constraint is that the
' number of parts used does not exceed the parts on hand--
'Binäre Variable Matrix1
SolverAdd CellRef:=Range(Cells(10, 5), Cells(10 + A, 5 + A)), Relation:=5 '
'Binäre Variable Matrix2
SolverAdd CellRef:=Range(Cells(10, 33), Cells(10 + A, 33 + A)), Relation:=5
'Ganze Zahlen Matrix1
SolverAdd CellRef:=Range(Cells(10, 5), Cells(10 + A, 5 + A)), Relation:=4
'Ganze Zahlen Matrix2
SolverAdd CellRef:=Range(Cells(10, 33), Cells(10 + A, 33 + A)), Relation:=4
'Jeder auftrag /Zeile nur ein Mal in jeder Zeile
SolverAdd CellRef:=Range(Cells(10, 59), Cells(10 + B, 59)), Relation:=2, _
FormulaText:="$AD$3"
'Jeder auftrag /Spalte nur ein Malin jeder Spalte Matrix1
SolverAdd CellRef:=Range(Cells(9, 5), Cells(9, 5 + A)), Relation:=1, _
FormulaText:="$C$9"
'Jeder auftrag /Spalte nur ein Malin jeder Spalte Matrix2
SolverAdd CellRef:=Range(Cells(9, 33), Cells(9, 33 + A)), Relation:=1, _
FormulaText:="$C$9"
MsgBox "Berechnung ist abgeschlossen!"
' Show the Solver Results dialog box.
SolverSolve UserFinish:=False
' Finish and keep the final results.
SolverFinish KeepFinal:=1
End With
End Sub

Was ich Brauche, sind 2 getrennte Bereich für den Solver.
Das Bild zeigt wie es aussehen muss.
Userbild
Doch ich weiß nicht wie ich den veränderbaren Bereich umsetzten soll.
Vielen Dank an alle.
Gruß
Dima
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige