¿VBA tiene estructura de diccionario? ¿Como clave <> matriz de valores?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
fuente
fuente
keyed
.Dim dict As New Scripting.Dictionary
sin la referencia. Sin la referencia, debe utilizar elCreateObject
método de enlace tardío para crear instancias de este objeto.VBA tiene el objeto de colección:
El
Collection
objeto realiza búsquedas basadas en claves utilizando un hash, por lo que es rápido.Puede usar una
Contains()
función para verificar si una colección particular contiene una clave:Edición 24 de junio de 2015 : más corto
Contains()
gracias a @TWiStErRob.Edición 25 de septiembre de 2015 : agregado
Err.Clear()
gracias a @scipilot.fuente
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; alguien que lea solo la invocación puede confundirla por verificar que contiene un valor particular.VBA no tiene una implementación interna de un diccionario, pero desde VBA aún puede usar el objeto de diccionario de MS Scripting Runtime Library.
fuente
Un ejemplo adicional de diccionario que es útil para contener la frecuencia de ocurrencia.
Fuera del bucle:
Dentro de un bucle:
Para verificar la frecuencia:
fuente
Partiendo de la respuesta de cjrh , podemos construir una función Contiene que no requiera etiquetas (no me gusta usar etiquetas).
Para un proyecto mío, escribí un conjunto de funciones auxiliares para hacer que un
Collection
comportamiento se parezca más a unDictionary
. Todavía permite colecciones recursivas. Notarás que Key siempre viene primero porque era obligatorio y tenía más sentido en mi implementación. Yo también usé soloString
llaves. Puede volver a cambiarlo si lo desea.Conjunto
Cambié el nombre de esto para establecer porque sobrescribirá los valores antiguos.
Obtener
El
err
material es para objetos, ya que pasaría objetos usandoset
y variables sin. Creo que puedes comprobar si es un objeto, pero me presionaron por el tiempo.Tiene
El motivo de esta publicación ...
Eliminar
No tira si no existe. Solo se asegura de que se elimine.
Llaves
Obtenga una variedad de claves.
fuente
El diccionario de tiempo de ejecución de secuencias de comandos parece tener un error que puede arruinar su diseño en etapas avanzadas.
fuente
Si. Para VB6 , VBA (Excel) y VB.NET
fuente
Si por algún motivo no puede instalar funciones adicionales en su Excel o no desea hacerlo, también puede usar matrices, al menos para problemas simples. Como WhatIsCapital pones el nombre del país y la función te devuelve su capital.
fuente
Dim
palabra clave,Country
yCapital
debe declararse como Variantes debido al uso deArray()
,i
debe declararse (y debe ser siOption Explicit
está configurado), y el contador de bucle arrojará un error fuera de límite, más seguro para utilizarUBound(Country)
para elTo
valor. También vale la pena señalar que, si bien laArray()
función es un atajo útil, no es la forma estándar de declarar matrices en VBA.Todos los demás ya han mencionado el uso de la versión scripting.runtime de la clase Diccionario. Si no puede usar esta DLL, también puede usar esta versión, simplemente agréguela a su código.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
Es idéntico a la versión de Microsoft.
fuente