• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

sommen.als is heel traag

Status
Niet open voor verdere reacties.

TMCrimeZ

Gebruiker
Lid geworden
14 okt 2013
Berichten
10
Hi,

Ik laat VBA een aantal formules plaatsen, maar dit plaatsen gaat extreem traag. Dit terwijl handmatig uitrekenen aan staat, en screenupdating false

Code:
With ThisWorkbook.Sheets("PTstatusrapport")    'dit duurt heel lang
    .Range("A2").PasteSpecial xlPasteValues
    lr = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("D2:D" & lr).FormulaR1C1Local = "=SOMMEN.ALS(Idcase30!K[4];Idcase30!K;PTstatusrapport!RK[-3];Idcase30!K[19];""Pick"")"      < deze gaat traag
    .Range("E2:E" & lr).FormulaR1C1Local = "=SOMMEN.ALS(Idcase30!K[3];Idcase30!K[-1];PTstatusrapport!RK[-4];Idcase30!K[18];""Bulk"")"   < deze gaat traag
    .Range("F2:F" & lr).FormulaR1C1Local = "=ALS(RK[-2]<RK[-3];RK[-3];0)"   < deze gaat snel
End With

Is er een betere manier om dingen op te tellen op basis van 2 criteria?
 
Jazeker, via een draaitabel. SOMMEN.ALS is sowieso trager dan een draaitabel.

NB: gebruik van FormulaLocal in VBA is een slecht idee, tenzij je kunt garanderen dat er nooit iemand in je bedrijf zal zijn die je macro gaat gebruiken en zijn Excel op iets anders dan Nederlands heeft staan, of ervoor kiest om de komma als lijstscheidingsteken te gebruiken in plaats van de punt-komma. Beter is dus:
Code:
With ThisWorkbook.Sheets("PTstatusrapport")    'dit duurt heel lang
    .Range("A2").PasteSpecial xlPasteValues
    lr = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("D2:D" & lr).FormulaR1C1 = "=SUMIFS(Idcase30!C[4],Idcase30!C,PTstatusrapport!RC[-3],Idcase30!C[19],""Pick"")"      < deze gaat traag
    .Range("E2:E" & lr).FormulaR1C1 = "=SUMIFS(Idcase30!C[3],Idcase30!C[-1],PTstatusrapport!RC[-4],Idcase30!C[18],""Bulk"")"   < deze gaat traag
    .Range("F2:F" & lr).FormulaR1C1 = "=IF(RC[-2]<RC[-3],RC[-3],0)"   < deze gaat snel
End With
 
Hey Jan Karel,

Was zojuist even helpen een vrachtwagen lossen en bedacht mij ook al dat local misschien niet zo'n goed idee was haha, bedankt voor de uitleg.
Ik ga even kijken hoe ik het met een draaitabel vorm kan geven!
 
Toch nog even een vraag. Ik gebruik blijkbaar local omdat de niet local versie een foutmelding geeft:

.Range("D2:D" & lr).FormulaR1C1 = "=IFERROR(VLOOKUP(RK[-3],Draaitabel!K[-3]:K,4,0),0)"

Geeft fout 1004, wat mij niets zegt.
Doe ik iets fout?
 
plaats eens (een voorbeeld van) je bestand, ontdaan van evt "gevoelige" info
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan