Ik heb een klein stukje code geschreven in VBA om divisors in triangle numbers te calculeren. Het idee is dat bij elk triangle number het aantal divisors wordt weergeven.
De (werkende) code die ik hiervoor gebruik is:
Het stuk For i = 1 To Sqr(TriNum) is cruciaal. Door de wortel te gebruiken is de calculatie heel veel vlotter. Voorheen deed ik dit zonder 'Sqr'. De calculatie tijd was erg lang hierdoor.
Bijkomend probleem is dat Excel/VBA crashed als de calculaties te zwaar / te lang duren. Ik weet niet precies hoe dit komt. Uiteraard is een slimme en snelle oplossing beter dan 'dom' rekenwerk maar ik vraag me af hoe je kan voorkomen dat je code crashed op basis van zware berekeningen.
Iemand een idee?
De (werkende) code die ik hiervoor gebruik is:
Visual Basic: TriangleNumbers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| Sub Triangles2() Dim divisors As Integer, number As Long, i As Long Dim ws As Worksheet Dim y As Long, x As Long Dim Finder As Range Dim TriNum As Long Application.ScreenUpdating = False Set ws = ActiveWorkbook.Worksheets("Sheet2") Set Finder = ws.Range("A:A").Find("*", , xlFormulas, xlPart, xlByRows, xlPrevious, False) y = Finder.Row + 1 TriNum = 1 Stop Stop 'Tri Do Until y = 20001 'divisors >= 500 TriNum = ((y - 1) * ((y - 1) + 1)) / 2 ws.Cells(y, 1) = TriNum For i = 1 To Sqr(TriNum) If TriNum Mod i = 0 Then divisors = divisors + 1 Next i divisors = divisors * 2 ws.Cells(y, 2) = divisors divisors = 0 y = y + 1 Loop MsgBox "DONE" Application.ScreenUpdating = True End Sub |
Het stuk For i = 1 To Sqr(TriNum) is cruciaal. Door de wortel te gebruiken is de calculatie heel veel vlotter. Voorheen deed ik dit zonder 'Sqr'. De calculatie tijd was erg lang hierdoor.
Bijkomend probleem is dat Excel/VBA crashed als de calculaties te zwaar / te lang duren. Ik weet niet precies hoe dit komt. Uiteraard is een slimme en snelle oplossing beter dan 'dom' rekenwerk maar ik vraag me af hoe je kan voorkomen dat je code crashed op basis van zware berekeningen.
Iemand een idee?