Um Dicionário em VBA (Scripting.Dictionary) é uma estrutura de dados que guarda pares chave-valor, permitindo buscar um valor diretamente pela chave, de forma quase instantânea, sem precisar percorrer uma lista inteira item por item — diferente de um Array, que só localiza itens por posição numérica.
Você já precisou contar quantas vezes cada item aparece numa lista, ou verificar rapidamente se um valor já apareceu antes, dentro de uma macro que processa milhares de linhas?
Sem uma estrutura pensada para busca por chave, esse tipo de tarefa normalmente é resolvido com um loop dentro de outro loop (comparando cada item com todos os outros), o que fica cada vez mais lento à medida que a planilha cresce, podendo travar em bases maiores.
Neste artigo iremos mostrar o que é um Dicionário em VBA, como criar, adicionar, verificar e percorrer seus itens, e um exemplo prático de como usá-lo para contar ocorrências únicas numa lista.
O que é um Dicionário e como ele se diferencia de um Array
Um Array guarda valores em posições numeradas (0, 1, 2…), e para saber se um valor específico já existe dentro dele, é preciso percorrer todas as posições comparando uma por uma. Um Dicionário guarda cada valor associado a uma chave (que pode ser um texto, um número ou qualquer tipo simples), e consultar se uma chave existe, ou pegar o valor associado a ela, é praticamente instantâneo, independente do tamanho do dicionário.
Referenciando o Scripting.Dictionary
Existem duas formas de usar o Dicionário em VBA. A primeira é adicionar uma referência à biblioteca, em Ferramentas > Referências no Editor VBA, marcando Microsoft Scripting Runtime — isso permite declarar Dim dic As Dictionary e ganha o recurso de autocompletar. A segunda forma, mais simples e portátil, é criar o objeto sem referência, usando CreateObject(“Scripting.Dictionary”), o que funciona mesmo sem marcar nada em Referências, mas sem autocompletar durante a digitação do código.
Dim dic As Object
Set dic = CreateObject(“Scripting.Dictionary”)
Adicionando itens ao Dicionário
Para adicionar um par chave-valor, use o método .Add: dic.Add chave, valor. Por exemplo, dic.Add “Caneta”, 15 associa a chave “Caneta” ao valor 15. Se você tentar adicionar uma chave que já existe, o VBA gera um erro — por isso, antes de adicionar, é comum checar se a chave já está presente.
Verificando se uma chave já existe: .Exists
O método .Exists(chave) retorna True ou False, indicando se aquela chave já foi adicionada ao dicionário. Esse é o recurso mais usado na prática, já que evita o erro de adicionar uma chave duplicada e permite decidir, dentro do código, se deve criar a chave pela primeira vez ou só atualizar o valor que já existe.
Lendo e atualizando um valor
Para ler o valor associado a uma chave, basta usar dic(chave), como em total = dic(“Caneta”). Para atualizar, a sintaxe é a mesma, só invertendo a atribuição: dic(“Caneta”) = dic(“Caneta”) + 1 soma 1 ao valor já existente daquela chave.
Removendo itens
Use dic.Remove(chave) para apagar um item específico, ou dic.RemoveAll para esvaziar o dicionário inteiro de uma vez, mantendo o mesmo objeto pronto para receber novos itens.
Percorrendo todos os itens do Dicionário
Para passar por todas as chaves guardadas, use um For Each sobre a coleção .Keys: For Each chave In dic.Keys. Dentro do loop, dic(chave) dá acesso ao valor correspondente a cada chave percorrida. A propriedade .Count informa quantos itens o dicionário tem no total, sem precisar contar manualmente.
Exemplo prático: contando ocorrências únicas numa lista
Uma aplicação clássica de Dicionário é contar quantas vezes cada produto aparece numa lista, funcionando como um CONT.SE dinâmico calculado inteiramente dentro do VBA:
| A | |
|---|---|
| 1 | Caneta |
| 2 | Caderno |
| 3 | Caneta |
| 4 | Caneta |
| 5 | Caderno |
Sub ContarOcorrenciasUnicas()
Dim dic As Object
Set dic = CreateObject(“Scripting.Dictionary”)
Dim linha As Integer
Dim item As String
For linha = 1 To 5
item = Cells(linha, 1).Value
If dic.Exists(item) Then
dic(item) = dic(item) + 1
Else
dic.Add item, 1
End If
Next linha
Dim chave As Variant
Dim linhaSaida As Integer
linhaSaida = 1
For Each chave In dic.Keys
Cells(linhaSaida, 3).Value = chave
Cells(linhaSaida, 4).Value = dic(chave)
linhaSaida = linhaSaida + 1
Next chave
End Sub
Com os dados do exemplo, o resultado na coluna C e D mostra “Caneta” com contagem 3 e “Caderno” com contagem 2 — cada item foi lido uma única vez por linha, mas contado corretamente graças à checagem .Exists antes de decidir entre somar ou criar a chave.
Disponibilidade
O Scripting.Dictionary depende da biblioteca Microsoft Scripting Runtime, disponível apenas no Windows — o Excel para Mac não tem esse recurso nativamente. Como alternativa no Mac, é possível simular um comportamento parecido usando Collection, combinado com tratamento de erro para checar se uma chave já existe. O Google Sheets, via Apps Script, tem o equivalente nativo do JavaScript, o objeto Map ou um objeto comum usado como dicionário.
Perguntas frequentes
Dicionário é a mesma coisa que Collection em VBA?
Não. A Collection também guarda itens associados a uma chave, mas não tem um método nativo simples para checar se uma chave existe (o que exige tratamento de erro), enquanto o Dictionary tem o método .Exists pronto e aceita qualquer tipo de dado como chave, não só texto.
O Dicionário funciona no Excel para Mac?
Não nativamente — o Scripting.Dictionary depende da biblioteca Microsoft Scripting Runtime, exclusiva do Windows. No Mac, a alternativa mais próxima é usar uma Collection com tratamento de erro para simular a verificação de chave existente.
Preciso adicionar uma referência para usar o Dicionário?
Não necessariamente. É possível criar o objeto com CreateObject(“Scripting.Dictionary”) sem marcar nenhuma referência em Ferramentas > Referências, embora nesse caso você perca o recurso de autocompletar do Editor VBA durante a digitação do código.
Veja também: Como Usar Loops no VBA do Excel: For, For Each e Do While, já que o Dicionário costuma ser usado em conjunto com um loop para percorrer os dados da planilha.
Compartilhe ou Comente
Se você curtiu esse artigo aonde mostramos o que é um Dicionário em VBA (Scripting.Dictionary), como adicionar, verificar e percorrer seus itens, e um exemplo prático de contagem de ocorrências únicas numa lista, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.
Você já usou Dicionário em alguma macro, ou ainda resolve esse tipo de contagem com loop duplo? Sente diferença de velocidade em planilhas grandes? Conta para nós nos comentários!