Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Makro Zielwertsuche

Betrifft: Makro Zielwertsuche von: Stefan Breunninger
Geschrieben am: 25.07.2014 12:12:25

Hallo Zusammen,
ich hab hier mein Makro mit ner Zielwertsuche und er funktioniert eigentlich. ABER,

Kann man den Code nicht kürzer schreiben mit ner Schleife oder sowas?
2. Es kommt nicht immer 11 % genau raus, sonder auch mal darunter z.B 10.98 %. Gibt es hier nicht auch noch die Möglichkeit, das immer mindestens 11 % errechnet? Also wenn kleiner als 11 % dann neu berechnen?
3. Das Makro soll auch, wenn möglich über die ganze Spalte (K:K) (L:L) und funktionieren, aber nur solange bis in Spalte L was drin steht.

Anbei mein Code. Ich habe hier bis Zeile 50 den code geschreiben. Leider bekomme ich wie bereits oben beschrieben diesen Laufzeitfehler wenn ich nur 20 Zeilen zum ausrechnen benötige. Gibt es die Möglichkeit die ganze Spalte mit diesem Zielwert (Range) zu programmieren aber eben nur soviele Zeilen ausrechnet wie auch befüllt?

Range("K5").Select
Range("K5").GoalSeek Goal:=0.11, ChangingCell:=Range("L5")
Range("K6").Select
Range("K6").GoalSeek Goal:=0.11, ChangingCell:=Range("L6")
Range("K7").Select
Range("K7").GoalSeek Goal:=0.11, ChangingCell:=Range("L7")
Range("K8").Select
Range("K8").GoalSeek Goal:=0.11, ChangingCell:=Range("L8")
Range("K9").Select
Range("K9").GoalSeek Goal:=0.11, ChangingCell:=Range("L9")
Range("K10").Select
Range("K10").GoalSeek Goal:=0.11, ChangingCell:=Range("L10")
Range("K11").Select
Range("K11").GoalSeek Goal:=0.11, ChangingCell:=Range("L11")
Range("K12").Select
Range("K12").GoalSeek Goal:=0.11, ChangingCell:=Range("L12")
Range("K13").Select
Range("K13").GoalSeek Goal:=0.11, ChangingCell:=Range("L13")
Range("K14").Select
Range("K14").GoalSeek Goal:=0.11, ChangingCell:=Range("L14")
Range("K15").Select
Range("K15").GoalSeek Goal:=0.11, ChangingCell:=Range("L15")
Range("K16").Select
Range("K16").GoalSeek Goal:=0.11, ChangingCell:=Range("L16")
Range("K17").Select
Range("K17").GoalSeek Goal:=0.11, ChangingCell:=Range("L17")
Range("K18").Select
Range("K18").GoalSeek Goal:=0.11, ChangingCell:=Range("L18")
Range("K19").Select
Range("K19").GoalSeek Goal:=0.11, ChangingCell:=Range("L19")
Range("K20").Select
Range("K20").GoalSeek Goal:=0.11, ChangingCell:=Range("L20")
Range("K21").Select
Range("K21").GoalSeek Goal:=0.11, ChangingCell:=Range("L21")
Range("K22").Select
Range("K22").GoalSeek Goal:=0.11, ChangingCell:=Range("L22")
Range("K23").Select
Range("K23").GoalSeek Goal:=0.11, ChangingCell:=Range("L23")
Range("K24").Select
Range("K24").GoalSeek Goal:=0.11, ChangingCell:=Range("L24")
Range("K25").Select
Range("K25").GoalSeek Goal:=0.11, ChangingCell:=Range("L25")
Range("K26").Select
Range("K26").GoalSeek Goal:=0.11, ChangingCell:=Range("L26")
Range("K27").Select
Range("K27").GoalSeek Goal:=0.11, ChangingCell:=Range("L27")
Range("K28").Select
Range("K28").GoalSeek Goal:=0.11, ChangingCell:=Range("L28")
Range("K29").Select
Range("K29").GoalSeek Goal:=0.11, ChangingCell:=Range("L29")
Range("K30").Select
Range("K30").GoalSeek Goal:=0.11, ChangingCell:=Range("L30")
Range("K31").Select
Range("K31").GoalSeek Goal:=0.11, ChangingCell:=Range("L31")
Range("K32").Select
Range("K32").GoalSeek Goal:=0.11, ChangingCell:=Range("L32")
Range("K33").Select
Range("K33").GoalSeek Goal:=0.11, ChangingCell:=Range("L33")
Range("K34").Select
Range("K34").GoalSeek Goal:=0.11, ChangingCell:=Range("L34")
Range("K35").Select
Range("K35").GoalSeek Goal:=0.11, ChangingCell:=Range("L35")
Range("K36").Select
Range("K36").GoalSeek Goal:=0.11, ChangingCell:=Range("L36")
Range("K37").Select
Range("K37").GoalSeek Goal:=0.11, ChangingCell:=Range("L37")
Range("K38").Select
Range("K38").GoalSeek Goal:=0.11, ChangingCell:=Range("L38")
Range("K39").Select
Range("K39").GoalSeek Goal:=0.11, ChangingCell:=Range("L39")
Range("K40").Select
Range("K40").GoalSeek Goal:=0.11, ChangingCell:=Range("L40")
Range("K41").Select
Range("K41").GoalSeek Goal:=0.11, ChangingCell:=Range("L41")
Range("K42").Select
Range("K42").GoalSeek Goal:=0.11, ChangingCell:=Range("L42")
Range("K43").Select
Range("K43").GoalSeek Goal:=0.11, ChangingCell:=Range("L43")
Range("K44").Select
Range("K44").GoalSeek Goal:=0.11, ChangingCell:=Range("L44")
Range("K45").Select
Range("K45").GoalSeek Goal:=0.11, ChangingCell:=Range("L45")
Range("K46").Select
Range("K46").GoalSeek Goal:=0.11, ChangingCell:=Range("L46")
Range("K47").Select
Range("K47").GoalSeek Goal:=0.11, ChangingCell:=Range("L47")
Range("K48").Select
Range("K48").GoalSeek Goal:=0.11, ChangingCell:=Range("L48")
Range("K49").Select
Range("K49").GoalSeek Goal:=0.11, ChangingCell:=Range("L49")
Range("K50").Select
Range("K50").GoalSeek Goal:=0.11, ChangingCell:=Range("L50")

Danke im Voraus
Stefan

  

Betrifft: AW: Makro Zielwertsuche von: Martin
Geschrieben am: 25.07.2014 12:20:18

Hallo Stefan,

so ist es kürzer:

Sub Makro1()
    Dim iRows As Integer
    
    For iRow = 5 To 50
        Cells(iRow, 11).GoalSeek Goal:=0.11, ChangingCell:=Cells(iRow, 12)
    Next
End Sub
Viele Grüße

Martin


  

Betrifft: ...kleine Korrektur... von: Martin
Geschrieben am: 25.07.2014 12:30:08

Hallo Stefan,

ich habe gerade einen kleinen Fehler bei meiner Variablenbezeichnung entdeckt: iRows / iRows

Also nochmal:

Sub Makro1()
    Dim iRow As Integer
    
    For iRow = 5 To 50
        Cells(iRow, 11).GoalSeek Goal:=0.11, ChangingCell:=Cells(iRow, 12)
    Next
End Sub
Eine andere Möglichkeit:
Sub Makro2()
    Range("K5").GoalSeek Goal:=0.11, ChangingCell:=Range("L5")
    Range("K5").AutoFill Range("K5:K50"), xlFillCopy
End Sub
Viele Grüße

Martin


  

Betrifft: AW: Makro Zielwertsuche von: Stefan Breunninger
Geschrieben am: 26.07.2014 14:55:55

Hallo Martin, ^super klasse genau so Tausend Dank!!!

Nun habe ich aber noch folgende Probeme:

1. Er zeigt mir auch immer Ergebisse mit knapp unter 0.11 an. Das ist aber das minimum was raus kommen muss.

Gibt es hier die Möglichkeit noch zusätzlich ein Makro einzupflegen der nachträglich nochmal kalkuliert bei allen Zellen deren Wert in Spalte K:K < 11 % und > 11.02 %.

2. Sobald ich nur 10 Zeilen berechnen möchte kommt die Error Message Laufzeitfehler 1004. Gibt es hier vielleicht noch die Möglichkei, dass er nur die Zeilen berechnung Soll wo in Spalte I auch was drin steht ohne dass eine Error- Message erscheint? Also quasi wenn ich Spalte I <> 0 dann berechne ansonsten eben nicht.

Ziemlich viel Fragen ich weiß, aber hoffe mit kann nochmal jemand helfen :-)

Liebe Grüße
Stefan


  

Betrifft: AW: Makro Zielwertsuche von: Stefan Breunninger
Geschrieben am: 26.07.2014 20:01:36

OK nun funktioniert alles. Nur für die Werte unter 11% muss ich irgenwie noch wegbekommen.

Code:

Private Sub CommandButton1_Click()	
Dim iRow As Integer	
    	
    For iRow = 5 To 50	
        Cells(iRow, 11).GoalSeek Goal:=0.1101, ChangingCell:=Cells(iRow, 12)	
    Next	
End Sub


Ergebnis sieht folgendermaßen aus:

10,961% 1.144,90 nicht ok
11,004% 62,37 ok
10,998% 238,03 nicht ok
11,008% 499,00 ok
11,005% 60,63 ok
10,968% 20,39 nicht ok
10,992% 47,04 nicht ok
10,954% 52,24 nicht ok


Kann ich beim Goal:=0.1101 noch irgenwie verändern, dass es nicht => 0.1101 ?

Hab das schon versuch. Leider ohne Erfolg :-(

Vielleicht hat hier ja irgendjemand ne Idee?

Komm leider nicht von alleine draus.

Danke im Voraus + Viele Grüße
Stefan


P.S: Wenn ich jetzt nur 10 Zeilen ausrechnen will bekomm ich immer einen Laufzeitfehler angezeigt. Kann man das noch irgenwie optimiert, dass wenn in Spalte L keine Summe eingetragen ist, keine Rechnung erfolgt und somit auch keine Fehlermeldung mehr erscheint?

DANKE


 

Beiträge aus den Excel-Beispielen zum Thema "Makro Zielwertsuche"