¿VBA tiene estructura de diccionario?
¿VBA tiene estructura de diccionario? ¿Te gusta la matriz clave<>valor?
Sí.
Establezca una referencia al tiempo de ejecución de MS Scripting ('Microsoft Scripting Runtime'). Según el comentario de @regjo, vaya a Herramientas->Referencias y marque la casilla 'Microsoft Scripting Runtime'.
Cree una instancia de diccionario usando el siguiente código:
Set dict = CreateObject("Scripting.Dictionary")
o
Dim dict As New Scripting.Dictionary
Ejemplo de uso:
If Not dict.Exists(key) Then
dict.Add key, value
End If
No olvides configurar el diccionario para Nothing
cuando hayas terminado de usarlo.
Set dict = Nothing
VBA tiene el objeto de colección:
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")
El Collection
objeto realiza búsquedas basadas en claves utilizando un hash, por lo que es rápido.
Puede utilizar una Contains()
función para comprobar si una colección en particular contiene una clave:
Public Function Contains(col As Collection, key As Variant) As Boolean
On Error Resume Next
col(key) ' Just try it. If it fails, Err.Number will be nonzero.
Contains = (Err.Number = 0)
Err.Clear
End Function
Edición 24 de junio de 2015 : Contains()
agradecimiento más breve a @TWiStErRob.
Edición del 25 de septiembre de 2015 : agregado Err.Clear()
gracias a @scipilot.
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.
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