ich habe folgendes Problem und finde einfach keinen Lösungsansatz:
Ich möchte über VBA den Solver in Excel aufrufen. In meinem aktuellen Beispiel habe ich 9 Werte, die vom Solver so angepasst werden sollen, bis das Ergebnis den höchstmöglichen Wert erreicht hat (es handelt sich um eine logistische Regressionsrechnung).
Ich habe nun einen Code geschrieben, der zunächst abfragt, welche Variablen in die Berechnung einfließen sollen, danach wird zunächst die erste Variable vom Solver angepasst und das Ergebnis in einem zweiten Tabellenblatt dokumentiert. Danach wird die zweite Variable hinzugefügt und der Solver verändert beide Variablen so, bis das Ergebnis sein Minimum erreicht hat und so weiter. Allerdings funktioniert die Eingabe nur, wenn ich eine Range angebe, d.h. die Eingabe muss in Form von "Variable 3 bis Variable 7" erfolgen werden.
Ich möchte aber, dass die ausgewählten Variablen in jeder möglichen Kombi einmal vom Solver berechnet und das Ergebnis dokumentiert wird, damit man sich hinterher anschauen kann, welche Kombi an Variablen zum besten Ergebnis führt. Ich schaffe es nur leider nicht, eine Schleife o.ä. zu bauen, die mir alle möglichen Kombis rausspuckt, damit ich diese dann an den Solver übergeben kann.
Mein aktueller Code sieht so aus:
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
Sub LogV1()
Dim s As Object, e As Object
Set s = Worksheets(1)
Set e = Worksheets("Erg")
Dim r As Long
Dim startvar As Long
z = 0
Worksheets(1).Range("C2:K2").Value = 0
Worksheets("Erg").Cells.ClearContents
Items = 0
outputrow = 1
startvar = InputBox("Bitte eine Startvariable eingeben: ", "Startvariable")
Endvar = InputBox("Bitte eine Endvariable eingeben: ", "Endvariable")
For r = startvar To Endvar
startcell = "$" + Col_Letter(startvar) + "$2"
cell = "$" + Col_Letter(r) + "$2"
cell_ges = startcell + ":" + cell
SolverOk SetCell:="$S$7", MaxMinVal:=1, ValueOf:=0, ByChange:=cell_ges, _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve UserFinish:=True
LogLikelihood = s.Cells(7, 19)
Klassifikation_richtig = s.Cells(3, 18)
Klassifikationsergebnis = s.Cells(3, 19)
outputrow = outputrow + 1
e.Cells(1, 1) = "Schritt"
e.Cells(1, 1).Font.Bold = True
z = z + 1
e.Cells(outputrow, 1) = "Schritt " & z
e.Cells(1, 2) = "LogLikelihood"
e.Cells(1, 2).Font.Bold = True
e.Cells(1, 3) = "Klassifikation_richtig"
e.Cells(1, 3).Font.Bold = True
e.Cells(1, 4) = "Klassifikationsergebnis"
e.Cells(1, 4).Font.Bold = True
e.Cells(outputrow, 2) = LogLikelihood
e.Cells(outputrow, 3) = Klassifikation_richtig
e.Cells(outputrow, 4) = Klassifikationsergebnis
Next r
End Sub
Ich würde gerne ganz auf die Inputbox mit start- und endvar verzichten und von vornherein zählen lassen, wie viele Variablen es gibt und alle vorhandenen verwenden, um die verschiedenen Kombis zu rechnen.
Ich hoffe meine Erläuterungen sind soweit verständlich und jemand hat eine Idee, wie ich das hinbekommen könnte.
VG
N_N