Avatar billede u.l.johansen Praktikant
21. marts 2011 - 23:04 Der er 8 kommentarer og
1 løsning

Makro til målsøgning/problemløser

Jeg har brug for noget hjælp til en makro som skal lave en masse målsøgninger. I forenklet form kan "makroen" skrives som nedenstående:
MEN problemet er at jeg faktisk har nogle afrundinger på alle formlerne, hvilket gør at den ikke altid kan finde en løsning og så står den bare og kører. Har forsøgt at sætte maks iterationer til 10, men det giver også nogle mærkelige resultater.
Derfor søger jeg nok nærmere en makro, som stopper når den bare når "tæt" på det ønskede resultat. Jeg kan godt definere et interval som kunne være acceptabelt, hvis dette er nødvendigt. Jeg skal lave omkring 120 målsøgninger hver dag, så jeg har virkelig brug for en makro.

Sub Målsøgning()
'
    Range("C13").GoalSeek goal:=Range("C14"), changingcell:=Range("C3")
    Range("D13").GoalSeek goal:=Range("D14"), changingcell:=Range("D3")
    Range("E13").GoalSeek goal:=Range("E14"), changingcell:=Range("E3")
    Range("F13").GoalSeek goal:=Range("F14"), changingcell:=Range("F3")
    ........         
End Sub
Avatar billede jens48 Ekspert
22. marts 2011 - 04:22 #1
Har du overvejet at lade makroen lave afrundingen efter målsøgningen?
Avatar billede u.l.johansen Praktikant
22. marts 2011 - 18:53 #2
Hej Jens48
Er ikke helt sikker på at jeg forstår denne løsning. Jeg kan sagtens lave en afrunding til sidst på totalen, men min første problemstilling er stadig at få målsøgningen til at komme forholdsvis tæt på den total som jeg ønsker.
Avatar billede jens48 Ekspert
22. marts 2011 - 21:46 #3
Nu ved jeg ikke hvor mange steder i regnearket du har afrundinger, men jeg har haft et lignende problem i et ark med mange afrundinger. Det blev løst ved i begyndellsen af makroen at sætte en celle (S2) til 1 og så i alle celler med afrunding at bruge en formel à la:
=IF($S$2=1;$H18*O18/100;ROUND($H18*O18/100;2))
I slutningen af makroen (efter målsøgning) blev S2 så sat til 0 igen.
Avatar billede u.l.johansen Praktikant
22. marts 2011 - 23:46 #4
Hej Jens
Problemet er at jeg har 120 varenumre, som skal afrundes til hele paller og at summen skal give en bestemt produktionsmængde.
Varenummer 1 er måske 98 stk i den ene uge og i næste uge 105 stk (Rounding value på 7 stk)
Det er vigtigt for mig at summen af varenummer 1-120 giver tilnærmelsesvis 5.000 stk (+/- 20 stk), så derfor kan jeg ikke bare manipulere med resultatet til sidst, da jeg faktisk skal bruge resultaterne for alle 120 varenumre.

Jeg kan godt sende et eksempel i excel, hvis det skulle hjælpe.
Avatar billede jens48 Ekspert
23. marts 2011 - 04:35 #5
Du skal være velkommen til at sende et eksempel, men da jeg har en stram plan jeg vil ikke love at kigge på den de første par dage. Du kan sende den til kober_soerensen(snabel-a)hotmail.com
Avatar billede u.l.johansen Praktikant
23. marts 2011 - 20:28 #6
Hej Jens
Jeg har sendt eksempel på mail, som du kan kigge på når du får tid.
Avatar billede jens48 Ekspert
24. marts 2011 - 18:47 #7
Hej,
Har lidt problemer med min mail, så du får lige her en detaljeret beskrivelse af hvad jeg har gjort.
I det ark du sendte har jeg indsat nedenstående formel i celle D5
=IF($A$1;C5*D$1+3,5;CEILING(C5*D$1;7))
Den består af en ikke afrundet del og en afrundet del. Den ikke afrundede del bruges under målsøgning og den anden bagefter. Det bestemmes af A1, hvor jeg i begyndelsen af makroen indsætter 1, som igen slettes efter målsøgningen. D5 er kopieret til hele området D5:K23.
Makroen er ændret som følger:

Sub Goalseek()
'
' Goalseek Makro
'
Cells(1, 1) = 1
    Range("D26").Goalseek Goal:=Range("D27"), ChangingCell:=Range("D1")
    Range("E26").Goalseek Goal:=Range("E27"), ChangingCell:=Range("E1")
    Range("F26").Goalseek Goal:=Range("F27"), ChangingCell:=Range("F1")
    Range("G26").Goalseek Goal:=Range("G27"), ChangingCell:=Range("G1")
    Range("H26").Goalseek Goal:=Range("H27"), ChangingCell:=Range("H1")
    Range("I26").Goalseek Goal:=Range("I27"), ChangingCell:=Range("I1")
    Range("J26").Goalseek Goal:=Range("J27"), ChangingCell:=Range("J1")
    Range("K26").Goalseek Goal:=Range("K27"), ChangingCell:=Range("K1")
Cells(1, 1) = 0
End Sub
Avatar billede u.l.johansen Praktikant
25. marts 2011 - 19:05 #8
Hej Jens

Tusind tak for hjælpen. Egentlig simpelt nok, når man bare får ideen! Læg et svar, så får du dine velfortjente point.
Avatar billede jens48 Ekspert
25. marts 2011 - 19:31 #9
Ja, det drillede også lidt da jeg selv havde problemet. Men godt at du kunne bruge løsningen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester