O VBA possui estrutura de dicionário? Como matriz de valores de chave <>?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
fonte
fonte
keyed
.Dim dict As New Scripting.Dictionary
sem a referência. Sem a referência, você deve usar oCreateObject
método de ligação tardia para instanciar esse objeto.O VBA tem o objeto de coleção:
O
Collection
objeto executa pesquisas baseadas em chave usando um hash, para que seja rápido.Você pode usar uma
Contains()
função para verificar se uma coleção específica contém uma chave:Editar 24 de junho de 2015 :
Contains()
Agradecimentos mais curtos a @TWiStErRob.Editar 25 de setembro de 2015 : adicionado um
Err.Clear()
agradecimento a @scipilot.fonte
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; alguém lendo apenas a invocação pode confundi-la por verificar se ela contém um valor específico.O VBA não possui uma implementação interna de um dicionário, mas, no VBA, você ainda pode usar o objeto de dicionário da MS Scripting Runtime Library.
fonte
Um exemplo de dicionário adicional que é útil para conter a frequência de ocorrência.
Fora do loop:
Dentro de um loop:
Para verificar a frequência:
fonte
Criando a resposta de cjrh , podemos criar uma função Contains que não requer etiquetas (não gosto de usar etiquetas).
Para um projeto meu, escrevi um conjunto de funções auxiliares para tornar o
Collection
comportamento mais parecido com aDictionary
. Ele ainda permite coleções recursivas. Você notará que Key sempre vem em primeiro lugar porque era obrigatório e fazia mais sentido na minha implementação. Eu também usei apenasString
teclas. Você pode mudar de volta, se quiser.Conjunto
Renomeei isso para definir, porque ele substituirá os valores antigos.
Obter
O
err
material é para objetos, pois você passaria objetos usandoset
e variáveis sem. Eu acho que você pode apenas verificar se é um objeto, mas fui pressionado pelo tempo.Tem
O motivo deste post ...
Remover
Não joga se não existir. Apenas garante que ele seja removido.
Chaves
Obtenha uma matriz de chaves.
fonte
O dicionário de tempo de execução de script parece ter um bug que pode arruinar seu design em estágios avançados.
fonte
Sim. Para VB6 , VBA (Excel) e VB.NET
fonte
Se, por qualquer motivo, você não puder instalar recursos adicionais no Excel ou não desejar, também poderá usar matrizes, pelo menos para problemas simples. Como WhatIsCapital, você coloca o nome do país e a função retorna seu capital.
fonte
Dim
palavra-chaveCountry
eCapital
precisa ser declarada como Variante devido ao uso deArray()
,i
deve ser declarada (e deve ser seOption Explicit
for definida), e o contador de loop lançará um erro fora do limite - mais seguro para useUBound(Country)
para oTo
valor Talvez também seja interessante notar que, embora aArray()
função seja um atalho útil, não é a maneira padrão de declarar matrizes no VBA.Todos os outros já mencionaram o uso da versão scripting.runtime da classe Dictionary. Se você não conseguir usar esta DLL, também poderá usar esta versão, basta adicioná-la ao seu código.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
É idêntico à versão da Microsoft.
fonte