2009-11-23 7 views
0

Je suit dans un morceau de code VBA:Looping Code/Skipping lignes

For i = 1 To 5 
    myArray(i) = i + 0 
Next i 
For i = 6 To 8 
    myArray(i) = i + 1 
Next i 
For i = 9 To 14 
    myArray(i) = i + 2 
Next i 

... etc

Il doit y avoir une meilleure façon de le faire, mais pour la vie de moi Je ne peux pas y penser. Quelqu'un pourrait-il aider? Peut-être quelque chose avec la syntaxe Select..Case?

Éditer: il s'agit en fait de plusieurs sous-divisions de zones de l'entreprise. les lignes que je "saute" sont des totaux calculés automatiquement desdites zones.

+0

Eh bien, il y a probablement des moyens plus gracieux, mais « mieux » dépend de ce que sont vos objectifs. Pourriez-vous décrire le contexte et ce que vous essayez d'accomplir? – anschauung

Répondre

2

Étant donné que les lignes que vous sautez ne sont pas uniformes et, à partir du son, peuvent changer vous ne voulez probablement pas les coder en dur dans plusieurs lignes d'une instruction Select. Il est peut-être plus facile de les enregistrer dans un Array:

'Create an Array of Rows to Skip 
rowsToSkip = Array(6, 9) 

'Loop over all data 
For i = 1 To 14 
    skipcount = 0 

    'For each skip row we have passed add one to the skipcount 
    For Each rownum In rowsToSkip 
     If i >= rownum Then 
      skipcount = skipcount + 1 
     End If 
    Next rownum 

    myArray(i) = i + skipcount 
Next i 
+0

J'aime beaucoup ça. Mon meilleur essai avant était quelque chose comme SkipArray = Array (0,0,0,0,0,1,1,1,2,2,2,2,2,2 ... etc Merci! –

0
For i = 1 to 14 
    select case i 
     case 1 to 5 
      myArray(i) = i + 0 
     case 6 to 8 
      myArray(i) = i + 1 
     case 9 to 14 
      myArray(i) = i + 2 
    end select 
Next i