Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Excel: Macro die waardes op sheet zit is traag

Pagina: 1
Acties:

Vraag


  • Frankyie
  • Registratie: September 2009
  • Laatst online: 16-08-2024
Excuus voor de typefout in de titel 8)7 Dit mag ik niet meer aanpassen :(

Beste mensen,

Ik heb een probleem met een vba macro die in Excel draait. De macro is erg traag aan het worden.

Kort samengevat doet de macro het volgende. Als je op de startknop op de sheet drukt dan:
1) Circa 60 waardes uit de excelsheet halen
2) Berekeningen daar op uitvoeren
3) Uitkomsten op de sheet wegschrijven. In het meest extreme geval zijn dit 50000 waardes

Stap 1 en 2 duren max 2 seconden. Stap 3 duurt meerdere minuten. De snelheid van stap 3 is erg afhankelijk van de pc en de versie van excel. De beste prestaties heb ik op een 10 jaar oude pc waar nog office XP op staat :? Gloednieuwe pc's met moderne software zijn veel trager.
De wachttijd begint aardig irritant te worden aangezien ik de macro meerdere keren per dag achterelkaar gebruik .

De manier waarop de data op de sheet gezet wordt gaat als volgt.

Worksheets("Visualisatie").Range("BJ" & GeselecteerdeRij).Value = KoppelMotoren(i, 1)
GeselecteerdeRij=GeselecteerdeRij+1
i=i+1
Loop

Voordat ik de data op de sheet plaatst voer ik deze code nog uit. Ik heb niet het idee dat dit veel helpt.
Application.ScreenUpdating = False

De waardes worden op een verborgen tabblad geplaatst.

Verder wordt er met de weggeschreven data op het verborgen tabblad niets gedaan. Het enige wat ik er mee doe is de waardes gebruiken om circa 30 grafieken weer te geven.

Verder zitten er in de excelsheet nog tig andere macro's en heel veel andere data, maar die worden niet getriggered door die grote trage macro.

Iemand enig idee hoe ik dit sneller kan krijgen?

Alle reacties


  • Atanamir
  • Registratie: December 2014
  • Laatst online: 09-11 07:44
Lastig om met weinig details te zeggen waar het door komt.
Als je bestand veel formules bevat kan het erg lang duren doordat Excel na iedere wegschrijfactie alles gaat herberekenen. Dat kan je uitzetten door dit bovenaan je code te zetten:
Application.Calculation = xlmanual

En dit onderaan je code zodat je werkboek wel gewoon blijft werken.
Application.Calculation = xlautomatic

Overigens is de methode van 1 voor 1 door iedere rij heengaan ook niet de snelste. Ik heb wel eens gelezen dat de "Do While" methode sneller is, en ik heb zelf wel goede resultaten behaald door ipv waardes weg te schrijven 1 formule naar een range te kopieren, en vervolgens die range door waardes te vervangen...

  • Frankyie
  • Registratie: September 2009
  • Laatst online: 16-08-2024
Beste Atanamir,

Wat voor details kan ik je nog meer geven? Ik kan van alles vertellen maar helaas mag ik de excel sheet niet toe sturen.

Ik heb thuis even de "Application.Calculation = xlmanual" geprobeerd en hier thuis scheelt het wel wat. Ik zal het op mijn werk ook proberen.

Ik kwam dit ook nog tegen.
https://blogs.office.com/...ce-coding-best-practices/
Hier staat inderdaad ook al iets over hoe je waardes op de sheet zet.
Ik ga hier eens mee spelen.
Bedankt! :)

  • Frankyie
  • Registratie: September 2009
  • Laatst online: 16-08-2024
Vandaag op mijn werk de nodige testruns gedaan. Naast dat stukje code dat je aanraden heb ik ook nog de stukjes code toegevoegd van die link die ik plaatste. De winst is enorm! Zelfs met de grootste berekeningen was de pc nu in seconden klaar. De lichtere berekeningen zelfs in minder dan een seconde. Dus dat is fantastisch! :D

Ik heb uiteindelijk geen tijd meer besteed aan het beter programmeren van de manier waarop ik de waardes op de sheet plaats. De berekeningen gaan nu zo snel dat dat verbeteren mijn tijd niet waard is.

Heel erg bedankt voor je hulp! :)

  • Atanamir
  • Registratie: December 2014
  • Laatst online: 09-11 07:44
Cool, goed om te horen! Ik denk dat de tijdswinst voornamelijk zit in de link die je zelf plaatste, aangezien het 1 voor 1 door de regels heengaan sowieso niet echt snel is :)

Oh ik snap nu dat het aanpassen van dat 1 voor 1 dus niet eens nodig was. Helemaal goed dan :)

[ Voor 22% gewijzigd door Atanamir op 10-02-2017 14:04 ]


  • Frankyie
  • Registratie: September 2009
  • Laatst online: 16-08-2024
Klopt. Dat is me bespaard gebleven :)
Pagina: 1