wat is efficient?

Status
Niet open voor verdere reacties.

Interface

Gebruiker
Lid geworden
27 jan 2009
Berichten
156
een niet probleem vraag, maar meer een vraag wat wijs is...

Ik ben nu al een kleine twee jaar bezig met programeren in excel VBA.

Omdat de meeste functies nu wel duidelijk zijn ben ik nu vooral bezig met het meten(tijd berekenen)van mijn lussen...

Vanuit de meeste boeken en ook hier krijg ik het idee dat een do...loop statement altijd het meest efficient is.

In de bijlage een bestand waarbij ik de 3 meest gebruikte lussen zijn verwerkt met allemaal dezelfde opdracht.

Hoe kan het zijn dat for...each ruim 2 seconde sneller is dan een do....loop?

Daarbij heb ik nog een vraag, je kunt zoeken met een lus maar ook met de functie .find, hoe kan het zijn dat .find maar een milliseconde langzamer is dan een do...loop in een kolom? Zodra ik de lus uitbreid over een matrix van 1000 rijen en 256 kolommen dan is .find sneller?!

Dus mijn vraag wat is wijs? en dus het meest efficient en in welke situatie?
 

Bijlagen

  • timer.xls
    36,5 KB · Weergaven: 31
Had je deze al getest ?
Code:
Sub vullen4()
  begin = timer
  With Sheets(1)
    sq = .Columns(2)
    For j = 1 To UBound(sq)
      sq(j, 1) = j
    Next
    .Columns(2) = sq
    .Range("k2") = timer - begin
  End With
End Sub
 
nee nog niet

ik zal het eens even doen...

Maar liever had ik een uileg, over waarom.... En wat ik heb gedaan is de meest standaard lusjes te gebruiken...
 
getest en....

Is duidelijk langzamer, ik zal de variabelen eens declareren.. en eens ff kijken...
 
Is bij mij 50% sneller, want 65000 maal schrijven in een worksheet gaat trager dan het wijzigen van een matrixvariabele die dan in 1 keer naar het werkblad wordt geschreven.
Het werken met variabelen gaat sowieso immer sneller dan het bewerken van het werkblad: het werkblad hoeft niet aangepast te worden (screenupdating), evenmin hoeven formules opnieuw te worden berekend.
 
opmerkelijk dan

Wow, hij indd wel heel erg snel.

Ik zal eens application.screenupdating eens uit zitten....

Uitleg is duidelijk, thanx!!!

Maar wat is beter en in welke situatie(bijvoorbeeld uitlezen/zoeken array)
 
application.screenupdating brengt geen verschil...

Eerste lus uit het bestand is een seconde langzamer....


Toevoeging: Blijkt achteraf toch twee seconden sneller te zijn.....
 
Laatst bewerkt:
ingevoegd bestandje met de sneel oplossing van snb

Maar wanneer is wat het meest efficient?Duidelijk is dat zodra er geen interface is dit aanzienlijk scheelt in rekentijd...
 

Bijlagen

  • timer.xls
    40 KB · Weergaven: 24
Hoe minder interaktie met een werkboek hoe sneller de code is.
Als er wél interaktie is met het werkboek (lezen/schrijven/filteren, etc.) zorgt screenupdating=False voor een aanzienlijk sneller verloop van de code.
Het uitzetten van automatische herberekeningen kan dan ook een slok op een borrel schelen (afhankelijk van het aantal formules in het werkboek).
Het werken met variabelen is altijd sneller dan het werken met een werkboek.
Beschouw in VBA het inlezen en schrijven als het begin en het einde van de VBA-opdracht (tenzij je gebruik wil maken van ingebouwde Excel-faciliteiten die anders niet zo 1-2-3 in VBA na te bootsten zijn (filter en advancedfilter bijv.). Maw. het werkboek is het gegevensmagazijn, VBA is de 'medwerker', die wat met die gegevens doet en het resultaat weer in het magazijn plaatst.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan