• 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.

berekeningen gefaseerd uitvoeren

Status
Niet open voor verdere reacties.

lakizali

Gebruiker
Lid geworden
1 okt 2010
Berichten
53
goedemiddag,

sorry dat ik alweer met een vraag kom maar ik ben bezig met voor mij redelijk onbekende materie (VBA) en ik kan nergens een antwoord op mijn vraag vinden.

ik heb een model gebouwd voor de voorraad beheersing, hier zitten vier vba codes in en heel erg veel (grote) formules, het gaat om 26 kolommen en 1900 rijen.
als ik hier 5 rijen van uit laat rekenen duurt dit even maar dan geeft excel de correcte antwoorden, als ik het gehele bestand laat uitrekenen loopt mn pc volledig vast, zelfs als ik bijvoorbeeld 10 kolommen neem.
nu is mijn vraag: ik gebruik nu onderstaande code om de berekening door een knop te activeren, kan deze code zo worden gemaakt dat hij de berekeningen regel voor regel uitvoert?

Code:
Sub Calculate()
Worksheets("Besteladvies").UsedRange.Columns("A:AD").Calculate
End Sub

als iemand een opzetje zou willen/kunnen maken voor de eerste paar regels dan kan ik uiteraard zelf de code afmaken.

bij voorbaat dank,
Niels
 
Beste lakizali
;)

Is het de som dat je wilt berekenen van 1 kolom of rij of meerdere ?

Een handig hulpmiddel is het volgende:

Ga onder de balk staan van de tabbladen, dan rechtermuisklik en vink SOM aan.

Selecteer een rij of kolom, en in de balk onderaan wordt de som rechtstreeks bepaald.

Je kan ook het ganse bereik van 26 kolommen en 1900 rijen in één keer de som bepalen.

Groetjes Danny. :thumb:
 
hoi,

Nee, het gaat om formules die in iedere cel staan, deze zijn dusdanig groot dat het veel capaciteit vraagt van mn pc, als ik vijf regels uit laat rekenen duurd dat even maar het werkt wel, als ik alle regels laat berekenen dan loopt mn pc volledig vast.

Wat ik nu wil bereiken is dat ik een code heb/schrijf die er voor zorgt dat de berekening niet in een keer wordt uitgerekend maar stap voor stap, dan duurt het waarschijnlijk wel lang maar er komt wel een antwoord uit.
 
even een schopje omhoog, kan iemand me hiermee opweg helpen, is het uberhaupt mogelijk? danku
 
Lakizali, Laat dan minimaal in een voorbeeldbestandje zien met wat voor formules je aan't werk bent. Ik ben bang dat je op deze manier niet echt snel een reactie krijgt.

Groet, Leo
 
het bestand is te groot om als voorbeeld mee te sturen (11mb) ik krijg het ook niet kleiner, hieronder iig een aantal formules die ik gebruik:

Code:
=SUMPRODUCT((Afzetten!$B$2:$B$100000=A2)*('Afzetten 2'!$I$2:$I$100000=$R$1)*(Afzetten!$G$2:$G$100000))

=SUMPRODUCT(('Voorraad standen'!$A$2:$A$100000=A2)*('Voorraad standen'!$K$2:$K$100000<=NOW())*('Voorraad standen'!$J$2:$J$100000>=(NOW()+Parameters!$D$8))*('Voorraad standen'!$H$2:$H$100000))

=SUMPRODUCT(('Inkoop order regels'!$A$2:$A$99990 = A2)*('Inkoop order regels'!$I$2:$I$99990>=(NOW()+7))*('Inkoop order regels'!$I$2:$I$99990<=(NOW()+14))*('Inkoop order regels'!$F$2:$F$99990))

=((IF(U2<199;IF(V2+W2=0;4;0);0))+(IF(V2+W2=100;(IF(U2<=199;3;0));0))+(IF(((IF(V2+W2=0;4;0))+(IF(V2+W2=100;(IF(U2<=199;3;0));0)))=0;((IF(U2<=100;IF(V2=0;2;0);0))+(IF(U2<=100;IF(V2=100;IF(W2=100;2;0);0);0))+(IF(U2=200;IF(V2=0;IF(W2=100;2;0);0);0)));0)))

=SUMPRODUCT(IF((W2<=(S2/4,01));(S2*Parameters!$D$17);0))*(IF((V2<=((S2/4)*3));1;0))*(IF((T2<=(S2*1,25));1;0))*(IF((T2+U2+V2+W2)<=(S2*1,5);1;0))*(IF((U2+V2>=(S2*1,5));0;1))

het zijn dan 26 van dit soort formules ongeveer 5 daarvan zijn kort, de rest is vergelijkbaar met dit.
 
Moeten die bereiken zo groot zijn?
Afzetten!$G$2:$G$100000

Met vriendelijke groet,


Roncancio
 
ja, helaas wel, er wordt data uit de software gehaald en dat betreft vaak meer dan 100.000 regels.
als ik deze bereiken bijvoorbeeld halveer, gaat dat heel veel schelen met betrekking op de snelheid? want dan zou ik het wel kunnen overleggen namelijk.
 
Mijn idee is om door Excel de laatste rij te laten bepalen en deze in een cel te zetten, zodat je in je formule naar die cel kunt verwijzen.
Zo worden er geen rijen vergeten waar wat in staat, maar worden er geen onnodige rijen gebruikt.

Mocht je een bepaald bereik willen berekenen dan zou gebruik kunnen maken van Calculate.

Code:
Sub Rekenen()
Sheets(1).Range("A1:A10").Calculate
End Sub
Alleen het bereik A1 t/m A10 van het 1e werkblad wordt berekend.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Holy smekkeronie.... Een somproduct over 100.000 regels? Je beseft je dat een somproduct op de achtergrond een 'lus' is? En dat je dus zo'n beetje alles tegenover alles gaat zetten? Me dunkt dat dit vastloopt.

Je zou kunnen gaan overwegen om alles in VBA (dus in het werkgeheugen) te gaan berekenen. Maar dan moet je daar waarschijnlijk een behoorlijk ingewikkeld programma voor gaan schrijven.

Groet, Leo
 
Je zou overigens al de nodige tijd winnen als je een autofilter gebruikt en vervolgens een telling doet van de zichtbare cellen.

Met vriendelijke groet,


Roncancio
 
ik probeer nu om idd met een flexibel bereik te rekenen, dit scheelt zoizo mogelijk al wat loze capaciteit. de onderste regel aangeven is geen probleem maar hoe kan ik het getal dat daaruit komt in een formule gebruiken?

Als ik hem laat rekenen dan gaat het ongeveer 5 minuten goed en daarna loopt mn pc vast, volledig, zelfs ctrl alt del doet niks meer. ik heb net even getest met 20.000 regels, dan loopt alleen excel vast.

Ik ga nu eerst proberen om de berekeningen gefaseerd uit te voeren, dus per groep zodat niet alles in een keer berkend wordt, dit moet al met betrekking tot het vastlopen.

dat met een autofilter snap ik even niet? hoe werkt dat precies?

bednakt voor de ideeen iig.
 
Simpel voorbeeld:

Code:
Sub Tellen()
ActiveSheet.ShowAllData
With Range("A1:C" & Rows.Count)
    .AutoFilter 1, "Helpmij"
    .AutoFilter 2, "B"
End With
MsgBox WorksheetFunction.Sum(Range("C1:C" & Rows.Count).SpecialCells(xlCellTypeVisible))
End Sub

Van het bereik A1 t/m alle rijen (dus 65536 bij Excel 2003; 1048576 bij Excel 2007 e.v.) wordt in de A-kolom gesorteerd op Helpmij en in de B-kolom op B.
Vervolgens wordt een telling gemaakt van de C-kolom van alle nog zichtbare rijen.

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan