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