web-dev-qa-db-fra.com

Tableau dans Excel vba

Je veux avoir une liste de tableau dans vba, donc j'ai une variante déclarée dans Excel vba comme:

Dim Students(10) as variant

Maintenant, je veux stocker des numéros dans la liste des étudiants. les chiffres ne sont pas continus. Parfois, comme:

Students(2,7,14,54,33,45,55,59,62,66,69)

Comment puis-je faire cela dans vba? aussi comment puis-je accéder aux éléments de la liste?

9
user793468

Les étudiants doivent être déclarés comme un tableau dynamique. C'est un tableau dont les limites peuvent être changées. Dim Students(10) donne un tableau dont les limites ne peuvent être changées ni chargées depuis un tableau.

Dim Students() As Variant

Pour charger des étudiants:

Students = Array(2,7,14,54,33,45,55,59,62,66,69)

Pour accéder aux éléments:

Dim Inx As Long

For Inx = LBound(Students) to UBound(Students)
  Debug.Print Students(Inx)
Next

LBound (limite inférieure) et UBound signifient que la boucle for s'ajuste au nombre réel d'éléments dans Students.

11
Tony Dallimore

C'est trop complexe pour vous en ce moment, et vous ne rencontrerez probablement jamais une situation dans laquelle vous en aurez besoin, mais:

J'utilise la méthode suivante pour former des tableaux plus efficaces en mémoire (car Variant utilise le plus de mémoire de tous les types de variables) tout en conservant l'avantage de déclarer le contenu du tableau sur une ligne. Pour suivre votre exemple:

Dim Students() As Long
Dim Array2() As String

Array2() = Split("2,7,14,54,33,45,55,59,62,66,69", ",")

ReDim Array1(0) As Long
For Loop1 = LBound(Array2()) To UBound(Array2())
    ReDim Preserve Array1(0 To (UBound(Array1) + 1)) As String
    Array1(Loop1) = Array2(Loop1)
Next Loop1
ReDim Preserve Array1(0 To (UBound(Array1) - 1)) As Long

Erase Array2

Voici un exemple d'accès:

For Loop1 = LBound(Students) to UBound(Students)
    Msgbox Students(Loop1)
Next Loop1

J'ai appris cela ici: http://www.vbforums.com/showthread.php?669265-RESOLVED-VBA-Excel-Assigning-values-to-array-in-a-single-line&p=4116778&viewfull=1# post4116778

5
puzzlepiece87

Vous pouvez ajouter des valeurs à un tableau comme celui-ci ...

For i = 1 to 10
    Students(i) = i
Next i

Ou comme ça

Students = Array(2,7,14,54,33,45,55,59,62,66,69)

Ensuite, vous pouvez accéder aux valeurs dans le même manoir. Notez que si vous utilisez la deuxième option, vous devrez le déclarer comme suit:

Dim Students() As Variant
3
Skytunnel

Cela dépend de la manière dont vous fournissez les valeurs du tableau. Pourriez-vous obtenir les valeurs de Worksheet.Range ou de TextBox ou ListBox , mais le code ressemblerait à quelque chose comme cette :

Dim students(10) as Integer
Dim Carrier as Integer
For i = LBound(students) To UBound(Students)
     'some code to get the values you want to from whatever is your source
     'then assign the value to Carrier

     students(i)=Carrier
Next i

Il est déconseillé de graduer un tableau sous la forme Variant si vous savez que vous n'utiliserez que des entiers, car il consommera beaucoup de mémoire inutile. Vous devez également connaître les limites des nombres qui vont être attribués. Si elle dépasse la limite Integer, vous devez utiliser Double ou Float. Ceci est ma première participation sur le site, à la vôtre.

0
Mohammed Ehsan