Je kan vooral inkorten omdat je nu 3x dezelfde cellen test en ook dezelfde voorwaarden test op die cellen. Als je de cellen en de test in variabelen stopt word de macro een stuk korter. omdat je simpelweg de variablen herhaald ipv steeds de test opnieuw uit te voeren.
ik heb nu hele korte variabelen gemaakt met 1 letter en een volgnummer, als je code langer is met meer variabelen kan het voor de leesbaarheid of begrijpbaarheid beter zijn om langere variabelen te gebruiken ipv "w0" LaatsteW
Code:
Sub Controle()
Dim w0, w1, w2 As Long 'w0=laatste w1= een na laatste w2 = twee nalaaste waarde
Dim wt0, wt1, wt2 As Boolean ' waarde test met uitkomst true or false
w0 = Blad1.Cells(Rows.Count, 2).End(xlUp)
w1 = Blad1.Cells(Rows.Count, 2).End(xlUp).Offset(-1)
w2 = Blad1.Cells(Rows.Count, 2).End(xlUp).Offset(-2)
wt0 = w0 < 3.6 And w0 > 2.5
wt1 = w1 < 3.51 And w1 > 2.5
wt2 = w2 < 3.51 And w2 > 2.5
If wt1 And wt0 Then Range("D12").Value = Date - 7: Range("E12").Value = "W2": Exit Sub
If wt2 And wt1 And wt0 Or wt0 = False Then Range("D12").Value = Date: Range("E12").Value = "W1"
End Sub
andere gebruikte "trucjes" om code te verkorten
- ik heb bij w0 Blad1. gebruikt om naar blad1 te verwijzen ipv sheets("blad1"), niet alleen omdat het korter is maar ook omdat het foutbestendiger is, als jij aan het einde van je macro besluit de naam van de scheet te "blad1" te veranderen dan loopt je macro vast als je blad1. gebruikt dan heb je geen last van naamswijzigingen van tabbladen/werkbladen
- omdat de uit te voeren instructies bij de If then regels kort zijn heb ik ze niet onder elkaar maar achter elkaar gezet, gescheiden door dubbele punt, als een if then instructie maar 1 regel beslaat hoef je geen end if te gebruiken.
Deze wijze van noteren in alleen nuttig bij korte if then instructies als ze langer worden kun je ze wel weer beter over meerdere regels verdelen voor de leesbaarheid
nog een opmerking, het viel me op dat bij de 3e test "Als de laatste waarde groter dan 3,5 is of kleiner dan 2,5 is " dat deze onlogisch is je werkt in alle andere testen ook met 3,51, ofwel een 2e decimaal door die laatste test valt er een gat in de testen van de laatste waarde tussen 3,51 en 3,60 die vallen dan buiten de testen, het lijkt mij dat de laatste regel altijd moet worden getest en er geen waarden overgeslagen moeten worden. om dat op te vangen heb ik in de 2e if wt0=false gebruikt ipv een nieuwe test te maken op basis van w0 <3,5 or w0 > 2,5
zo de macro code is een stuk korter en de uitleg een stuk langer
