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

VBA > Waar plaats je een Array in een For/Next Loop

Status
Niet open voor verdere reacties.

Atara7

Gebruiker
Lid geworden
13 okt 2008
Berichten
34
Goedendag allemaal :)

Mede dankzij de hulpvaardige mensen hier heb ik al een leuke
'dynamishe verkoopklaar planning' in elkaar kunnen knutselen
Iedereen bedankt! :thumb:

Maar... :p

Ik heb nu een vraag over hoe ik een array in zou moeten passen in een for next loop.

Informatie:
Ik heb een blok met data welke X keer moet worden gekopieerd
De formule voor 1 copie is als volgt:

Sub Formule()
Range("D10:I23").Copy Destination:=D24
Range("G11:G23").Formula = "=IF(RIGHT(F11;6)<>"vullen";"";VLOOKUP(F11;Normering!$C$1:$E$500;2;false))"
Range("H11:H23").Formula = "=IF(ISNA(vlookup(F11;$P$1:$T$500;5;false));"";VLOOKUP(F11;$P$1:$T$500;5;false))
End Sub

UITLEG:
regel 2 kopieert eerst het hele blok inclusief opmaak
regel 3 en 4 kopieert de 2 formules erover heen. (begint 1 regel lager)
Dit vanwege het feit dat anders het zoekberijk ook mee wordt verhoogt.

Voor het idee van de herhaling:

Range("D10:I23").Copy Destination:=D24
Range("G11:G23").Formula = "=VLOOKUP(F11;Normering!$C$1:$E$500;2;false)"
Range("H11:H23").Formula = "=VLOOKUP(F11;$P$1:$T$500;5;false)"

Range("D10:I23").Copy Destination:=D38
Range("G25:G37").Formula = "=VLOOKUP(F25;Normering!$C$1:$E$500;2;false)"
Range("H25:H37").Formula = "=VLOOKUP(F25;$P$1:$T$500;5;false)"

Range("D10:I23").Copy Destination:=D52
Range("G39:G51").Formula = "=VLOOKUP(F39;Normering!$C$1:$E$500;2;false)"
Range("H39:H51").Formula = "=VLOOKUP(F39;$P$1:$T$500;5;false)"


DE BOLD aangegeven gebieden moeten dus variabel zijn.
Ik wil nu een array maken, omdat de reeks daarna niet consequent is
Dit vanwege print technische redenen, footer, header, enz...

Dus heb ik het volgende idee:

Sub Formule()
For i = 1 to 20
Range("D10:I23").Copy Destination:=AA
Range("BB").Formula = "=VLOOKUP(CC;Normering!$C$1:$E$500;2;false)"
Range("DD").Formula = "=VLOOKUP(CC;$P$1:$T$500;5;false)"
Next i
End Sub

Waarbij de array als volgt moet wezen.
AA= D24, D38, D52, D124, D138, D152
BB= G11:G23 , G25:G37, G39:G51, ...
CC= F11, F25. F39, ...
DD= H11:H23, H25:H37, H39:H51, ...


Ik weet niet of dit mogelijk is, of waar ik die array in zou moeten voegen??
In ieder geval alvast bedankt voor de moeite om dit al te lezen
Groetjes, Aat :)
 
Gebruik de funktie choose(i,...,....)
 
Maak bijvoorbeeld een string array aan met bijvoorbeeld 10 plaatsen:
Code:
Dim AA(10) as String

Gebruik deze vervolgens om je waarden in te zetten:
Code:
AA(1)=25
AA(2)=50

En verwijs in je functie vervolgens naar een attribuut uit het array:
Code:
Range("D10:I23").Copy Destination = AA(1)

Om dit in een loop te zetten:
Code:
x=1
For
    Range("D10:I23").Copy Destination = AA(x)
Next x


Dit is het wel zo'n beetje zo uit m'n hoofd dus het kan zijn dat je ergens nog een aanpassing moet maken. Maar volgens mij klopt het wel zo.
 
Whoo!, binnen zo korte tijd al twee mooie oplossingen!
Bedankt Vinnie82 en snb! :thumb:

Ik ga even kijken wat het beste voor mij gaat werken!
Groetjes, Aat :)
 
Het kan ook met een berekening

Code:
Sub Formule()
  For i = 1 to 20
    [D10:I23].Copy [D24].offset((i-1)*14)
    [G11:G23].offset((i-1)*14).Formula = "=VLOOKUP(F" & 11+(i-1)*14 & ";Normering!$C$1:$E$500;2;false)"
    [H11:H23].offset((i-1)*14).Formula = "=VLOOKUP(H" & 11+(i-1)*14 & ";$P$1:$T$500;5;false)"
  Next
End Sub
 
Laatst bewerkt:
Bedankt snb! Dat is zelfs nog mooier :)

Ga het Maandag allemaal verwerken!
Groetjes, Aat :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan