Hallo Bocculus,
Hopelijk heb je wat aan het volgende. Als je het aftelrijmpje toepast op getallen is het niet nodig dit via een lus in te lezen.
Dit stukje code genereert alle getallen to 7,3 miljard. (Let wel, het zal tijd kosten maar waarschijnlijk toch sneller dan een lus.)
For i = 1 To 1
p = 1 + 730000 * (i - 1)
Range("A1") = p
Range("A1").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
Step:=1, Stop:=730000 * i, Trend:=False
a = Range("A1:A10") '730000")
zeef a
Debug.Print r
'Stop
Next i
Iets minder groot.
Sub test2()
Dim a As Variant
a = Range("A1:A14")
Cells(1, 3).Resize(UBound(a), 1) = a
zeef2 a
End Sub
Sub zeef2(a As Variant)
Dim b() As Variant, p, x, k
Static u
k = UBound(a)
If k >= 18 Then k = k - k \ 18 Else k = k - 1
k = UBound(a) - 1
If k = 0 Then
Stop
r = a(1, 1)
Exit Sub
End If
ReDim b(1 To k, 1 To 1)
x = 18 Mod UBound(a, 1): k = 1: p = 1
If x = 0 Then x = UBound(a)
For k = x + 1 To UBound(a)
b(p, 1) = a(k, 1)
p = p + 1
Next k
For k = 1 To x - 1
b(p, 1) = a(k, 1)
p = p + 1
Next k
Cells(1, 4 + u).Resize(UBound(b), 1) = b
u = u + 1
zeef2 b
End Sub
Test2 is enkel om de "zeef" aan te roepen. Zeef2 is een recursieve sub, ze roept zichzelf telkens opnieuw op zolang als nodig.
Het resultaat:
| 1,00 |
5,00 |
10,00 |
2,00 |
11,00 |
7,00 |
7,00 |
11,00 |
2,00 |
2,00 |
11,00 |
2,00 |
2,00 |
2,00 |
| 2,00 |
6,00 |
11,00 |
3,00 |
12,00 |
8,00 |
8,00 |
12,00 |
3,00 |
3,00 |
12,00 |
3,00 |
3,00 |
|
| 3,00 |
7,00 |
12,00 |
5,00 |
13,00 |
11,00 |
11,00 |
13,00 |
7,00 |
7,00 |
2,00 |
11,00 |
|
|
| 4,00 |
8,00 |
13,00 |
6,00 |
14,00 |
12,00 |
12,00 |
14,00 |
11,00 |
11,00 |
3,00 |
|
|
|
| 5,00 |
9,00 |
14,00 |
7,00 |
2,00 |
13,00 |
13,00 |
2,00 |
12,00 |
12,00 |
|
|
|
|
| 6,00 |
10,00 |
1,00 |
8,00 |
3,00 |
14,00 |
14,00 |
3,00 |
13,00 |
|
|
|
|
|
| 7,00 |
11,00 |
2,00 |
10,00 |
5,00 |
2,00 |
2,00 |
7,00 |
|
|
|
|
|
|
| 8,00 |
12,00 |
3,00 |
11,00 |
6,00 |
3,00 |
3,00 |
|
|
|
|
|
|
|
| 9,00 |
13,00 |
5,00 |
12,00 |
7,00 |
5,00 |
|
|
|
|
|
|
|
|
| 10,00 |
14,00 |
6,00 |
13,00 |
8,00 |
|
|
|
|
|
|
|
|
|
| 11,00 |
1,00 |
7,00 |
14,00 |
|
|
|
|
|
|
|
|
|
|
| 12,00 |
2,00 |
8,00 |
|
|
|
|
|
|
|
|
|
|
|
| 13,00 |
3,00 |
|
|
|
|
|
|
|
|
|
|
|
|
| 14,00 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Bij 14 elementen zal eerst nr 4 afvallen, alle getallen daarachter komen vooraan, alle getallen daarvoor komen achteraan, enz tot we nog 1 getal over hebben. Laat maar weten als je iets anders in gedachten had, zonder expliciete oplossing van mijn kant.