VBA a-t-il une structure de dictionnaire ? Comme un tableau clé<>valeur ?
Réponses
Trop de publicités?Oui.
Définir une référence au runtime de MS Scripting
Set dict = CreateObject("Scripting.Dictionary")
ou
Dim dict As New Scripting.Dictionary
Exemple d'utilisation :
If Not dict.Exists(key) Then
dict.Add key, value
End If
N'oubliez pas de régler le dictionnaire sur Nothing
lorsque vous avez fini de l'utiliser.
Set dict = Nothing
VBA dispose de l'objet collection :
Dim c As Collection
Set c = New Collection
c.Add "Data1", "Key1"
c.Add "Data2", "Key2"
c.Add "Data3", "Key3"
'Insert data via key into cell A1
Range("A1").Value = c.Item("Key2")
Le site Collection
effectue des recherches basées sur des clés en utilisant un hachage, ce qui est rapide.
Vous pouvez utiliser un Contains()
(tirée de ici ) pour vérifier si une collection particulière contient une clé :
Public Function Contains(col As Collection, key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
Contains = True
obj = col(key)
Exit Function
err:
Contains = False
End Function
VBA ne dispose pas d'une implémentation interne d'un dictionnaire, mais à partir de VBA, vous pouvez toujours utiliser l'objet dictionnaire de la MS Scripting Runtime Library.
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "aaa"
d.Add "b", "bbb"
d.Add "c", "ccc"
If d.Exists("c") Then
MsgBox d("c")
End If
Un exemple supplémentaire de dictionnaire qui est utile pour contenir la fréquence d'apparition.
En dehors de la boucle :
Dim dict As New Scripting.dictionary
Dim MyVar as String
Dans une boucle :
'dictionary
If dict.Exists(MyVar) Then
dict.Item(MyVar) = dict.Item(MyVar) + 1 'increment
Else
dict.Item(MyVar) = 1 'set as 1st occurence
End If
Pour vérifier la fréquence :
Dim i As Integer
For i = 0 To dict.Count - 1 ' lower index 0 (instead of 1)
Debug.Print dict.Items(i) & " " & dict.Keys(i)
Next i
- Réponses précédentes
- Plus de réponses