01. marts 2002 - 16:00Der er
6 kommentarer og 1 løsning
Målsøgning (GoalSeek, mange iterationer tager lang tid)
Hej Jeg har opbygget et regneark i Excel, hvor der foretages en "Målsøgning" (GoalSeek, regnefunktion i Excel) i hver linie. Målsøgningerne er foretaget med en "makro". Jo længere ned i regnearket beregningerne kommer jo længere tid tager det at udføre beregningerne. Der skal foretages 8760 målsøgninger, dvs. der er 8760 linier i arket som skal beregnes. Dette vil tage 2 til 3 timer med den nuværende struktur. Det ser ud til at det muligvis er en opdatering af arket som tager tiden. Jeg har forsøgt, i menulinien, at slå diverse funktioner fra og til, men det hjælper ikke. Beregningerne skal foretages med forskellige parametervariartioner og vil tage flere dage med den nuværende opbygning. Er der nogle som har idé til, hvad der kan gøres for at formindske beregningstiden væsentligt samt evt. hvad som bevirker at beregningerne tager så lang tid. Makroen ser ud på følgende måde: Sub IterationCopy() ' For i = 1 To 8760
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
prøv lige at teste denne makro Sub IterationCopy() Range("aa2").Select For i = 0 To 8760 ActiveCell.Offset(i, 0).GoalSeek Goal:=0#, ChangingCell:=ActiveCell.Offset(i, 3) Range(ActiveCell.Offset(i, -26), ActiveCell.Offset(i, -1)).AutoFill Destination:=Range(ActiveCell.Offset(i, -26), ActiveCell.Offset(i + 1, -1)) Next End Sub
Sub IterationCopy() Range("aa2").Select For i = 0 To 8760 ActiveCell.Offset(i, 0).GoalSeek Goal:=0#, ChangingCell:=ActiveCell.Offset(i, 3) Range(ActiveCell.Offset(i, -26), ActiveCell.Offset(i, 0)).AutoFill Destination:=Range(ActiveCell.Offset(i, -26), ActiveCell.Offset(i + 1, 0)) Next End Sub
Lige under sub IterationCopy() kan du skrive Application.Screenpdating=False så vil skærmen ikke stå og opdatere mens programmet kører. Dette vil forøge hastigheden noget
Selvom min kode nok er hurtigere, tilføjer du jo stadig flere og flere formler som skal genberegnes for hver linie. Du kan slå automatisk genberegning fra ved at indsætte denne linie Application.Calculation = xlCalculationManual Når koden er færdig (før end sub) skriver du Application.Calculation = xlAutomatic
En anden ide er at slette formlerne igen efter hver Goalseek, hvis du ikke skal bruge dem mere. Så skal der ikke genberegnes nogen formler. Hvis det er en mulighed så indsæt denne linie før next
Du er velkommen til at sende mig et uddrag af dit regneark til tommybak@netscape.net Så skal jeg prøve at optimere det for dig. Hvis formlerne kan slettes igen efter hvert goalseek vil jeg anslå at beregningstiden kommer under 1 minut (P350) ellers omkring 15 min. afhængig af antallet af formler. Bak
Synes godt om
Ny brugerNybegynder
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.