code optimaliseren in Excel VBA

Code optimaliseren in Excel VBA

Het Complete Boek Excel VBA voor professionals, 4e editie

Door aan de slag te gaan met code optimaliseren in Excel VBA verkort u deze niet alleen, maar maakt u ‘m ook sneller. Onderstaand fragment is afkomstig uit Het complete Boek Excel VBA voor professionals, 4e editie.

Aan de ene kant kunt u tijd besparen als u codes sneller kunt opstellen. Codewoorden uit een menu aanklikken in Excel VBA gaat sneller dan ze zelf typen (en foutloos). Codes die u kreeg door een macro op te nemen, kunt u vaak korter maken. Als u weet hoe dat gaat, kunt u ze zelf ook meteen kort typen.

Als u eenmaal een macro hebt en u wilt die door een andere procedure laten gebruiken, doet u aan hergebruik. Aan de andere kant kunt u de uitvoering van de procedure (iets) sneller laten verlopen. In de eerste plaats door overbodige opdrachten die de zaak vertragen weg te halen. Verder door eigenschappen die u tijdens een opname niet hebt gekozen, te verwijderen. Of door eigenschappen die bij hetzelfde object horen, in een blok With…End With te plaatsen. Ook zaken als schermverversing en automatisch het werkblad berekenen vragen onnodig tijd. U leest hoe u duizenden keren een dobbelsteen gooit; daarbij komen we nog even terug op het werken met variabelen.

Opgenomen macrocode inkorten

Veel codes kunt u korter maken. Als u een macro opneemt, wordt voor elke stap een regel aangemaakt. Deze opgenomen code is vrij lang en er staan vaak overbodige zaken in. U kunt opdrachten korter schrijven en zelfs hele series opdrachtregels weghalen. Daardoor is de code eenvoudiger te overzien en zal deze sneller worden uitgevoerd.

Select en Selection weghalen

Stel, u wilt een cel leeg maken met een macro. Om de code te krijgen, neemt u die handeling op: u klikt tijdens de opname bijvoorbeeld op A9 en dan op de Delete-toets. De code zal er als volgt uitzien.

Sub Macro1()
‘ Macro1 Macro
	Range("A9").Select
	Selection.ClearContents
End Sub

Cel A9 wordt geselecteerd met de opdracht:

Range(“A9").Select

Vervolgens wordt de inhoud van deze selectie gewist met:

Selection.ClearContents

Om dit in twee stappen te doen, kost extra tijd en dat kan ook in één keer. U haalt Select en Selection er tussenuit, zodat de code er als volgt uitziet.

Sub Macro1()
‘Deze macro is ingekort
	Range("A9").ClearContents
End Sub

💡 Vermijd Select
Probeer in het algemeen zo veel mogelijk het statement Select te vermijden. Want dat is vaak een onnodige tussenstop en kan maken dat het beeldscherm flikkert.

Van vier regels één maken

Als u een macro opneemt die cel A1 kopieert en plakt in A2, ziet de code er na de opname als volgt uit.

Sub Macro2()
‘Deze macro is opgenomen
	Range("A1").Select
	Selection.Copy
	Range("A2").Select
	ActiveSheet.Paste
End Sub

In de derde opdracht wordt A2 geselecteerd met:

Range(“A2").Select

De kopie wordt daarin geplakt met:

ActiveSheet.Paste

U mag ook meteen aangeven dat de kopie in A2 moet worden geplakt, door Range(“A2") achter Copy te plaatsen (u gebruikt dan stilzwijgend het argument Destination, wat in hoofdstuk 4, de paragraaf Kopiëren met een korte code van mijn boek wordt uitgelegd). Dan mag u ook ActiveSheet.Paste weglaten en is de code:

Sub Macro2()
‘Deze macro is ingekort
	Range("A1").Select
	Selection.Copy Range("A2")
End Sub

Vervolgens kunnen (zoals u zopas zag) de stappen Select en Selection eruit. Dus kunt u de vier regels van de opgenomen code vervangen door de ene regel:

Sub Macro2()
‘Deze macro is fors ingekort
	Range("A1").Copy Range("A2")
End Sub

U zult merken dat de procedure er sneller van wordt, zeker als deze meer van dit soort bewerkingen moet uitvoeren.

Gebied van cellen

Dit werkt ook bij een gebied van cellen. Onderstaande code kopieert het gebied A1 tot en met A4, gaat naar D1 en plakt de selectie; de kopie wordt geplakt in D1 tot en met D4.

Sub Macro3()
	Range("A1:A4").Select
	Selection.Copy
	Range("D1").Select
	ActiveSheet.Paste
End Sub

U geeft weer aan dat de kopie in D1 moet komen door de bestemming Range(“D1") meteen achter Selection.Copy te plaatsen, als volgt:

Sub Macro3()
	Range("A1:A4").Select
	Selection.Copy Range("D1")
End Sub

Vervolgens voegt u de beide regels samen, zodat u van de vier opdrachtregels één regel overhoudt.

Sub Macro3()
	Range("A1:A4").Copy Range("D1")
End Sub

Hier duidt D1 aan dat de kopie wordt geplakt vanaf D1, de kopie van het blok A1 tot en met A4 komt in D1 tot en met D4.

In mijn boek ga ik nog veel meer op het onderwerp optimaliseren van code in!

Het Complete Boek Excel VBA voor professionals

Als u vaak dezelfde bewerkingen in Excel uitvoert, laat ze dan door een macro doen. Die doet het automatisch, supersnel en nauwkeurig. Zo bespaart u zeeën van tijd, wordt uw werk gemakkelijker en profiteert u meer van de kracht van Excel. Macro’s worden geschreven in de taal VBA (Visual Basic for Applications). Daarin kunt u ook eigen rekenfuncties schrijven en dialoogvensters ontwerpen, waardoor u Excel nog krachtiger en veelzijdiger maakt.

In dit boek vindt u 550 macro’s en 40 rekenfuncties. Bij alle voorbeelden wordt stap voor stap uitgelegd hoe ze werken. Zo leert u in Het Complete Boek Excel VBA voor professionals de principes van VBA en kunt u ze aanpassen voor uw eigen werk.

De recentste tips over Microsoft Excel:

Al onze Excel-tips en trucs vind je HIER


 

Geef een reactie

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.