Office: Solver aus function ohne worksheet-Berechnung?

Helfe beim Thema Solver aus function ohne worksheet-Berechnung? in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; hallo zusammen, nutze den solver für nichtlineare Fits, mit üblichen Weg der Berechnung der Abweichungsquadrate zwischen Soll- und Ist-Funktion, die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von hapevo, 15. September 2018.

  1. Solver aus function ohne worksheet-Berechnung?


    hallo zusammen,
    nutze den solver für nichtlineare Fits, mit üblichen Weg der Berechnung der Abweichungsquadrate zwischen Soll- und Ist-Funktion, die via solver minimiert werden. Ganz einfaches Beispiel:
    Sub Solver_NLS_Fit()
    Worksheets("Tabelle1").Activate
    SolverReset
    SolverOptions Precision:=0.000001
    SolverOk SetCell:=Range("SDQA"), MaxMinVal:=2, ByChange:=Range("B2:B5"), _
    Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverAdd CellRef:="$B$4", Relation:=1, FormulaText:="-150"
    SolverAdd CellRef:="$B$4", Relation:=3, FormulaText:="-250"
    SolverSolve UserFinish:=True
    SolverSave SaveArea:=Range("A13")
    End Sub

    Im worksheet wird im Range "SDQA" die Summe der Abweichungsquadrate berechnet und im Range "B2:B5" stehen die zu optimierenden Koeffizienten, die der solver anpasst. Funktioniert alles super und stabil, aber ein Teil der Rechnung erfolgt immer im worksheet. Ich möchte aber die Berechnung innerhalb einer function umsetzen, die nur die Eingabewerte (Vektoren X und Y_soll(X)) einliest und allen Berechnungen selbst ohne worksheet-Zugriff löst. Aber wie kriege ich die solver-Funktionen dazu, auf innerhalb der function berechnete Werte zuzugreifen??? Also statt z.B. SolverOk SetCell:=Range("SDQA"), ... als worksheet-Zugriff, den innerhalb der function berechneten Wert zu nutzen. Wie kann man das umsetzen??

    :)
     
  2. Hallo Hapevo,

    innerhalb des Solveraufrufs dürfte es meiner Meinung nach keine solche Möglichkeit geben, den Zellbezug der Zielzelle durch einen vba-internen Funktionsaufruf zu ersetzen.

    Dennoch solltest du in der Lage sein, komplizierte Berechnung vom Worksheet runter zu holen, indem du eine entsprechende UDF schreibst. Sprich deine gewünschte Funktion in einem allgemeinen Modul schreiben und als public deklarieren.

    Code:
    In deine Zielzelle kommt dann der entsprechend Funktionsaufruf "=MeineFormel(...)"
    Habe das eben mal anhand eines ganz simplen Ablaufs probiert. Müsste klappen.

    Besten Gruß
     
  3. Danke, aber wie das tatsächlich funktionieren soll, ist mir nicht klar. Bei SetCell:=... und ByChange:=... erwartet der solver Zell-Bezüge im worksheet und nicht einfach Variant-Werte, die ich aus Funktionen hole. Oder was mache ich hier falsch (möglichst einfaches Beispiel):

    Public Function Y_ber(ByVal X As Double, Koeff() As Variant) As Double
    'Berechnung des Fkt.-Wertes einer Beispielfkt.
    'Koeff soll hier sein Koeff(0 to 2)

    Y_ber = Koeff(0) + Koeff(1) * X / (X + Koeff(2))
    End Function

    Public Function SDQA(X_Vektor() As Double, YSoll_Vektor() As Double, Koeff() As Variant) As Variant
    'Berechnung der Summe der Abweichungsquadrate
    'Koeff soll hier sein Koeff(0 to 2)

    Dim StartIndex As Integer, EndIndex As Integer, ii As Integer
    Dim Summe_SDQA As Double

    StartIndex = LBound(X_Vektor)
    EndIndex = UBound(X_Vektor)

    Summe_SDQA = 0
    For ii = StartIndex To EndIndex
    Summe_SDQA = Summe_SDQA + Sqr(YSoll_Vektor(ii) - Y_ber(X_Vektor(ii), Koeff()))
    Next I
    SDQA = Summe_SDQA

    End Function

    Public Function Fkt_Wert_Fit(ByVal X As Double, XY_Bereich As Range) As Double
    'Berechnet Fkt-Wert an Stelle X mit gefitteten Werten aus Wertepaaren X_Vektor und Y_Vektor
    'Fkt.-Typ via Y_ber
    'XY_Bereich zwei Spalten im worksheet mit X- bzw- Y_Werten

    Dim X_Vektor() As Double, Y_Vektor() As Double
    Dim Koeff(0 To 2) As Variant 'Koeffizienten der Fkt.
    Dim Anzahl As Integer 'Anzahl Wertepaare
    Dim ii As Integer

    Anzahl = XY_Bereich.Rows.Count 'Anzahl der Wertepaare

    ReDim X_Vektor(1 To Anzahl) As Double
    ReDim Y_Vektor(1 To Anzahl) As Double

    'Einlesen XY-Werte aus Excel-Worksheet
    For ii = 1 To Anzahl
    X_Vektor(ii) = XY_Bereich.Cells(ii, 1).Value
    Y_Vektor(ii) = XY_Bereich.Cells(ii, 2).Value
    Next ii

    'Vorgabe Startwerte Koeffizienten
    Koeff(0) = 100
    Koeff(1) = -200
    Koeff(2) = 0.05

    SolverReset
    SolverOptions Precision:=0.0001
    SolverOk SDQA, _
    MaxMinVal:=2, _
    ByChange:=Koeff(), _
    Engine:=1, _
    EngineDesc:="GRG Nonlinear"
    SolverSolve UserFinish:=True

    Fkt_Wert_Fit = Y_ber(X, Koeff)

    End Function

    Die eigentliche function die den solver nutzen soll, ist FKt_Wert_Fit. Die holt sich die XY-Wertepaare aus dem Excel-Sheet als Range, die Abweichungsquadrate werden in der function SDQA berechnet, der eigentliche Funktionsweret in Y_ber. Aber wie muss der solver angesteuert werden, dass der Variantwert SDQA und die zu variierenden Variant-Werte Koeff vom Solver akzeptiert werden, anstelle von Zell-Bezügen???
     
  4. Solver aus function ohne worksheet-Berechnung?

    Also da hast du mich falsch verstanden. Sowohl der Zielwert als auch die Veränderbaren Koeffizienten müssen auf deinem Worksheet stehen und können dem Solver nur als Zell-Bezug mitgegeben werden. Das kriegst du nicht geändert.

    Ich nahm an, dass die Berechnung für den Wert in der Zelle, die du als "SDQA" benannt hast, vorher vollständig auf dem Worksheet ablief? Vermutlich mit mehreren Zwischenergebnissen? Jetzt hättest du eine Function die du auch in der Zelle "SDQA" abrufen kannst. Mehr Auslagerung nach VBA ist hier glaube ich nicht möglich.

    P.S.: Bitte nutze Zukünftig die Möglichkeit Code formatiert zu posten, ansonsten ist das Lesen echt eine Qual.
     
  5. Hans Hofmann, 18. September 2018
    #5
  6. Besten Dank,
    Fazit: den Solver kann man ohne die Berechnungen im Worksheet und den Zugriff darauf nicht nutzen.
    Wäre aber mal ein super Vorschlag an Microsoft, das zu realisieren!!! (auch wenn man die Iterationsschleife um die eigentliche solver-Funktion selbst basteln muss...). Das ist für sehr viele verschiedene Anwendungen eine sehr effektive Methode, nicht nur für Kurvenfits (Minimierung der Abweichungsquadrate), ohne jedes mal die passenden Algorithmen selbst zu schreiben oder zu "suchen"...
    Wer gibt solche Vorschläge/Wünsche weiter?
     
Thema:

Solver aus function ohne worksheet-Berechnung?

Die Seite wird geladen...
  1. Solver aus function ohne worksheet-Berechnung? - Similar Threads - Solver function worksheet

  2. Excel Probleme bei Eingabe einer Nebenbedingung

    in Microsoft Excel Hilfe
    Excel Probleme bei Eingabe einer Nebenbedingung: Hallo zusammen, ich benötige Hilfe bei der Eingabe einer Nebenbedingung bei Lösung durch den Excel Solvier. Die Nebenbedingung ist, dass alle 15 Personen ein zusätzlicher Raum ohne Personen...
  3. Solver

    in Microsoft Excel Hilfe
    Solver: Hallo, ich müsste mit Solver den Schnittpunkt von 10^x und 1/x² berechnen. Kann mir jemand sagen wie ich das mache? Lieben Gruß 363196
  4. Erkennen und Lösen eines Problems mithilfe von Solver

    in Microsoft Excel Tutorials
    Erkennen und Lösen eines Problems mithilfe von Solver: Erkennen und Lösen eines Problems mithilfe von Solver Excel für Microsoft 365 Excel für Microsoft 365 für Mac Excel für das Web Excel 2019 Excel 2016...
  5. Laden des Solver-Add-Ins

    in Microsoft Excel Tutorials
    Laden des Solver-Add-Ins: Laden des Solver-Add-Ins Excel 2016 Excel 2013 Excel 2010 Excel 2007 Mehr... Weniger Bei...
  6. Planen Ihrer Mitarbeiter mithilfe von Solver

    in Microsoft Excel Tutorials
    Planen Ihrer Mitarbeiter mithilfe von Solver: Planen Ihrer Mitarbeiter mithilfe von Solver Excel für Microsoft 365 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Mehr......
  7. Ermitteln des optimalen Produktmix mithilfe von Solver

    in Microsoft Excel Tutorials
    Ermitteln des optimalen Produktmix mithilfe von Solver: Ermitteln des optimalen Produktmix mithilfe von Solver Excel 2016 Excel 2013 Excel 2010 Excel 2007 Mehr... Weniger...
  8. Verwenden von Solver für die Kapital Budgetierung

    in Microsoft Excel Tutorials
    Verwenden von Solver für die Kapital Budgetierung: Verwenden von Solver für die Kapital Budgetierung Excel für Microsoft 365 Excel für Microsoft 365 für Mac Excel 2019 Excel 2016 Excel 2019 für Mac...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden