Ga naar inhoud

For next loopt te lang door VBA in EXCEL


Aanbevolen berichten

Hoi, Ik was even iets aan het proberen in excel de volgende code [code:1:2c9b6e26d7]Sub RangeNext() Dim counter As Integer Dim i As Variant Dim Rangep1 As Range Set Rangep1 = Range("A1:A100") counter = 0 Rangep1.Select Rangep1.ClearContents For Each i In Rangep1 Rangep1.Offset(counter, 0).Value = counter counter = counter + 1 Next End Sub [/code:1:2c9b6e26d7] als ik deze code run zou de cell A1 waarde 0 krijgen en A2 1 enz enz. Het merkwaardige is nu dat de for lus doorloopt tot cell A200. ik vermoed dat variable i variant daar iets mee te maken heeft maar weet niet hoe ik dit moet oplossen
Link naar reactie
[quote:d1f9554d9c="bertjedeb"] als ik deze code run zou de cell A1 waarde 0 krijgen en A2 1 enz enz. Het merkwaardige is nu dat de for lus doorloopt tot cell A200. ik vermoed dat variable i variant daar iets mee te maken heeft maar weet niet hoe ik dit moet oplossen[/quote:d1f9554d9c] Het heeft niks te maken met counter, maar met het feit dat je een Range van 100 cellen hebt geselecteerd. Met jouw code wordt per iteratie een range van 100 cellen met dezelfde waarde gevuld. Je kan beter met een teller aan de gang. [code:1:d1f9554d9c] dim i as integer dim RangeP1 as Range Set RangeP1 = Range("A1") For i = 0 to 99 RangeP1.Offset(i,0).Value = counter counter = counter + 1 Next [/code:1:d1f9554d9c]
Link naar reactie
Met For Each benader je objecten in een collectie. Een Range is zelf een object, geen collectie, wat bijv. Rangep1.Cells weer wel is. Verder gaat je procedure nu de mist in omdat je steeds een hele range (met 1 rij naar beneden opgeschoven) van 100 cellen met een oplopende waarde vult, waardoor bij de 100ste dus rij 100-200 met waarde 99 wordt gevuld. Onderstaande doet het beter: [code:1:4211391f20] Sub RangeNext() Dim i As Integer Dim Rangep1 As Range Set Rangep1 = Range("A1:A10") Rangep1.Select Rangep1.ClearContents For i = 1 To Rangep1.Cells.Count Rangep1.Cells(i, 1).Value = i - 1 Next End Sub [/code:1:4211391f20] Waar dan een gewone For..Next wordt gebruikt. Als je het met een For Each wil doen: [code:1:4211391f20] Sub RangeNext() Dim Rangep1 As Range Set Rangep1 = Range("B1:B10") Rangep1.Select Rangep1.ClearContents counter = 0 For Each c In Rangep1.Cells c.Value = counter counter = counter + 1 Next End Sub [/code:1:4211391f20] Maar dan heb je dus een aparte variabele nodig (counter) die je steeds met 1 moet opplussen, terwijl daar in een gewone For..Next-lus al in is voorzien.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...