VBA a-t-il une structure de dictionnaire? Comme le tableau de valeurs de la clé <>?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
la source
la source
keyed
.Dim dict As New Scripting.Dictionary
sans la référence. Sans la référence, vous devez utiliser laCreateObject
méthode de liaison tardive pour instancier cet objet.VBA a l'objet de collection:
L'
Collection
objet effectue des recherches basées sur des clés à l'aide d'un hachage, donc c'est rapide.Vous pouvez utiliser une
Contains()
fonction pour vérifier si une collection particulière contient une clé:Edit 24 juin 2015 : Plus court
Contains()
merci à @TWiStErRob.Edit 25 septembre 2015 : Ajouté
Err.Clear()
grâce à @scipilot.la source
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; une personne qui ne lit que l'invocation peut la confondre pour vérifier qu'elle contient une valeur particulière.VBA n'a pas d'implémentation interne d'un dictionnaire, mais à partir de VBA, vous pouvez toujours utiliser l'objet dictionnaire de MS Scripting Runtime Library.
la source
Un exemple de dictionnaire supplémentaire qui est utile pour contenir la fréquence d'occurrence.
En dehors de la boucle:
Dans une boucle:
Pour vérifier la fréquence:
la source
À partir de la réponse de cjrh , nous pouvons créer une fonction Contains ne nécessitant aucune étiquette (je n'aime pas utiliser d'étiquettes).
Pour un de mes projets, j'ai écrit un ensemble de fonctions d'aide pour rendre un
Collection
comportement plus semblable à unDictionary
. Il permet toujours des collections récursives. Vous remarquerez que Key vient toujours en premier car il était obligatoire et plus logique dans ma mise en œuvre. J'ai aussi utilisé seulementString
clés. Vous pouvez le modifier si vous le souhaitez.Ensemble
J'ai renommé cela pour définir car il écrasera les anciennes valeurs.
Avoir
Le
err
truc est pour les objets puisque vous passeriez des objets en utilisantset
et des variables sans. Je pense que vous pouvez simplement vérifier si c'est un objet, mais j'étais pressé par le temps.A
La raison de ce post ...
Retirer
Ne jette pas s'il n'existe pas. S'assure juste qu'il est supprimé.
Clés
Obtenez un tableau de clés.
la source
Le dictionnaire d'exécution de script semble avoir un bogue qui peut ruiner votre conception à des stades avancés.
la source
Oui. Pour VB6 , VBA (Excel) et VB.NET
la source
Si, pour une raison quelconque, vous ne pouvez pas installer de fonctionnalités supplémentaires sur votre Excel ou si vous ne le souhaitez pas, vous pouvez également utiliser des tableaux, au moins pour des problèmes simples. Comme WhatIsCapital vous mettez le nom du pays et la fonction vous rend son capital.
la source
Dim
mot-clé,Country
etCapital
doit être déclarée comme Variante en raison de l'utilisation deArray()
,i
doit être déclarée (et doit être siOption Explicit
est définie), et le compteur de boucles va générer une erreur hors limite - plus sûr pour utiliserUBound(Country)
pour laTo
valeur. Il convient également de noter que bien que laArray()
fonction soit un raccourci utile, ce n'est pas la manière standard de déclarer des tableaux dans VBA.Tous les autres ont déjà mentionné l'utilisation de la version scripting.runtime de la classe Dictionary. Si vous ne pouvez pas utiliser cette DLL, vous pouvez également utiliser cette version, ajoutez-la simplement à votre code.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
Elle est identique à la version de Microsoft.
la source