Declaratie in VBA

Anoniem
2017-03-14T15:53:33+00:00

Beste community-leden,

Ik ben getallen en een matrix nodig tot 10 miljard.

Wat gaat er mis in onderstaande declaratiecode.

Ook de knop F8 werkt niet meer.

Function (Celwaarde as Long) as Long

Aantal = Celwaarde

Dim Aantal As Long

Dim a(Aantal) As Long

Het maximum dat geaccepteerd wordt is 32000.

Ik gebruik Excel 2007

Groet,

Bocculus

Microsoft 365 en Office | Excel | Voor thuisgebruik | Windows

Vergrendelde vraag. Deze vraag is gemigreerd vanuit de Microsoft Ondersteuning-community. U kunt met een stem aangeven of de inhoud nuttig is, maar u kunt geen opmerkingen of antwoorden toevoegen of de vraag volgen.

0 opmerkingen Geen opmerkingen
Antwoord geaccepteerd door vraagauteur
Anoniem
2017-03-31T12:27:34+00:00

Bocculus,

Als ik dezelfde site heb gevonden als waar jij naar kijkt, dan zou ook bij jou moeten blijken dat het de juiste oplossing is.

Althans, ik heb hem op deze manier gecontroleerd:

http://tenvoorde.org/geocaching/GC677CX/checker?oplossing=7231042289

waarbij ik dus aan het eind van de link de oplossing heb gezet i.p.v. de cijfers die er oorspronkelijk stonden.

Hiervan werd gezegd dat de oplossing juist was.

Als jij een andere controle mogelijkheid hebt gevonden zou je de link ervan hier willen plaatsen?

Jan

Was dit antwoord nuttig?

0 opmerkingen Geen opmerkingen

22 extra antwoorden

Sorteren op: Meest nuttig
  1. Anoniem
    2017-03-28T15:08:06+00:00

    Beste JP Ronse,

    Van het eerste gedeelte van de code heb ik een functie gemaakt (Function Aftellen ()  ).

    Ik kreeg een foutmelding voor zeef2, daar heb ik zeef van gemaakt, ook de sub heb ik zeef genoemd. In de sub test staat ook een zeef2, maar geeft geen foutmelding. Deze wordt dan ook niet aangeroepen.

    Voor 14 krijg ik als resultaat 5, waar het 2 moet zijn.

    Ook heb ik geprobeerd de functie het argument Cel mee te geven om via het werkblad aan te kunnen roepen. Geeft geen resultaat, de naam van de functie verschijnt niet in het popupvenster.

    Heb je gezien, dat je 730 duizend gebruikt in je code?

    Ik heb een werkende functie gemaakt, maar die gaat enkel tot ongeveer 90 miljoen. Deze geeft 14 als uitkomst 2, wat dus goed is.

    Mijn idee was om in gedeelten te werken en dan ieder gedeelte te doorlopen om de array te beperken.

    Het is nog de vraag of dit gaat werken. 90 miljard / 18 geeft een overflow.

    Groet,

    Bocculus

    Was dit antwoord nuttig?

    0 opmerkingen Geen opmerkingen
  2. Anoniem
    2017-03-27T17:34:04+00:00

    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.

    Was dit antwoord nuttig?

    0 opmerkingen Geen opmerkingen
  3. Anoniem
    2017-03-24T21:23:37+00:00

    Beste JP Ronse,

    Bij een aftelrijmpje sta je in een kring. Een van de kinderen zegt een versje op en wijst bij iedere lettergreep een volgend kind aan. Degene die wordt aangewezen bij de laatste lettergreep valt af en stapt uit de kring. Het aftellen gaat verder met het aanwijzen van de volgende. Dit gaat net zo lang door tot er een over blijft.

    Zo'n rijmpje heeft natuurlijk een vaste lengte, in dit geval 18 tellen, zodat iedere keer een vast aantal wordt overgeslagen.

    De deelnemers worden genummerd , te beginnen bij 1. Maar 7,3 miljard geeft geheugenproblemen. Je zult dus moeten splitsen in kleinere groepen en daar alvast beginnen met aftellen om het aantal binnen de perken te houden. Inlezen door een lus: a(x) = x.

    Wat mij opviel, is, dat bij een aantal van 350.000 en daar omheen de lus wordt overgeslagen. En ook, dat vanaf ongeveer 1,93 miljoen de aantallen niet meer juist worden ingelezen, de a(x) komt niet meer overeen met x.

    Ik heb er geen verklaring voor.

    Groet,

    Bocculus

    Was dit antwoord nuttig?

    0 opmerkingen Geen opmerkingen
  4. Anoniem
    2017-03-20T17:57:23+00:00

    Hallo Bocculus,

    Ik zie niet direct een oplossing voor je probleem en het is al zo lang geleden dat ik nog aftelrijmpjes heb gehoord...

    Kan je iets meer uitleg verstrekken? Ik beloof niets maar je weet nooit.

    Was dit antwoord nuttig?

    0 opmerkingen Geen opmerkingen