Ubound e Lbound no VBA – Como Trabalhar com Matrizes ou Arrays no VBA

Você já ouviu falar em Ubound e Lbound no VBA? Nessa aula eu vou te mostrar como trabalhar com matrizes de uma forma diferente.

UBound e LBound no VBA retornam, respectivamente, o maior e o menor índice de uma matriz (array): UBound(minhaMatriz) dá a última posição e LBound(minhaMatriz), a primeira. Juntas, elas permitem percorrer qualquer array com segurança, sem precisar saber o tamanho de antemão.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso Canal do YouTube para mais vídeos!

O que você aprende neste vídeo

Resposta rápida: A aula mostra como UBound e LBound devolvem os limites superior e inferior de uma matriz no VBA. Você sai sabendo carregar 200 nomes de um intervalo numa matriz Variant, percorrê-la com For do limite inferior ao superior e gravar o índice de cada item na planilha. Matriz vinda de Range sempre começa em 1.

Neste vídeo (12 min):

  • 1:00 - Planilha de exemplo com 200 nomes de A2 a A201 e uma coluna vazia para receber o índice de cada um
  • 2:00 - Declaração da matriz com Dim MatrizNomes As Variant, que aceita texto, número e data
  • 3:30 - Matriz abastecida de uma vez com MatrizNomes = Range("A2:A201").Value
  • 4:40 - Janela Variáveis Locais mostra a matriz como Variant(1 To 200, 1 To 1): 200 linhas e 1 coluna
  • 6:20 - Debug.Print e a Janela de Verificação Imediata, onde ?MatrizNomes(1, 1) devolve o primeiro nome
  • 7:05 - Debug.Print UBound(MatrizNomes) devolve 200 e LBound(MatrizNomes) devolve 1, rodando linha a linha com F8
  • 8:10 - Laço For i = LBound(MatrizNomes) To UBound(MatrizNomes), que percorre a matriz inteira sem número fixo no código
  • 8:45 - MsgBox MatrizNomes(i, 1) exibindo cada nome da matriz, sempre na coluna 1
  • 9:25 - Matriz carregada de um intervalo começa sempre em 1 e tem uma coluna; declarada de outro jeito, pode começar em 0 ou em outro número
  • 11:05 - Cells(i + 1, 2).Value = i grava o índice na coluna B pulando o cabeçalho, e F5 preenche as 200 linhas

Trechos do vídeo:

  • UBound devolve o maior índice de uma matriz e LBound o menor; com os dois, o laço percorre todos os itens sem conhecer o tamanho de antemão
  • Uma variável comum guarda um único valor, enquanto uma matriz armazena várias informações dentro de uma só variável
  • Atribuir Range("A2:A201").Value a uma variável Variant cria uma matriz de 200 linhas por 1 coluna, e por isso cada item é lido com dois índices, como MatrizNomes(i, 1)
  • Uma matriz não precisa começar em 1: dependendo de como é declarada, ela começa em 0 ou em outro número, e usar LBound no início do laço evita pular ou estourar posições

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Ícone VBAVBA Impressionador

Como automatizar praticamente qualquer tarefa repetitiva que você faça dentro do Excel. Aprenda a criar integrações do Excel com o PowerPoint, Word, Outlook e muito mais. Aprenda a criar automações para resolver tudo com apenas um clique em um botão. Tudo isso com uma única linguagem que junta todos esses programas.

Começar agoraSeta para a direita
Fundo VBATelas VBA

Ubound e Lbound no VBA

Fala impressionadores! Hoje vamos aprender mais uma ferramenta que será um diferencial no seu trabalho. Você já ouviu falar do Ubound e Lbound?

O que significa Lbound? Ele nada mais é do que o limite inferior da matriz (Lower bound), ou seja, é onde começa a matriz.

E o que significa Ubound? É o limite superior da matriz (Upper bound), é onde termina a matriz.

Mas porque isso é importante? Imagine que você não saiba a quantidade de itens de uma lista, como você faria para utilizar uma estrutura de repetição se esses valores podem ser variáveis?

Basta utilizar o Lbound e Ubound dentro da estrutura do For no VBA, dessa forma você vai ter a informação correta de onde começa e onde termina.

E aí, vamos aprender a utilizar o Lbound e Ubound, como percorrer informações com VBA e ainda como pegar o índice de cada informação?

No nosso material didático temos uma lista com 200 nomes, vamos ensinar aqui o passo a passo para enumerar essa lista programando pelo VBA, de 1 a 200 como mostra a imagem abaixo:

Matriz tabela
Matriz tabela

Ambiente VBA -> Alt + f11

Ubound e Lbound no VBA
VBA

Vamos usar a função uboundVBA() ela nada mais é do que um meio de descobrirmos informações sobre a nossa matriz. Iniciada a matriz, agora colocaremos os valores que ela irá receber.

Ubound e Lbound no VBA
Valores

Agora temos uma matriz com os 200 nomes nela, precisamos sempre salvar a planilha, para isso clique no atalho control + B.

Como podemos ver quais informações que estão dentro da nossa matriz?

Vamos clicar em exibir -> variáveis locais -> vai aparecer a janela da próxima imagem:

Clicando nela temos a quantidade de linhas e colunas da nossa matriz, além do que está dentro de cada linha.

Verificação
Verificação

Agora vamos usar o nosso Ubound para saber o limite superior da nossa matriz e vamos colocar o Debug.Print para conseguir visualizar as informações enquanto trabalhamos no VBA.

Ubound e Lbound no VBA
UBound

Nosso limite superior é 200, então está indicando corretamente.

Ubound e Lbound no VBA
Limite superior

Agora vamos verificar o limite inferior usando o LBound.

LBound
LBound

O limite inferior é 1

Limite inferior
Limite inferior

E por que isso é relevante?

Bom, nem sempre vamos saber os limites da nossa matriz, e para fazer uma estrutura de repetição na nossa matriz essas informações são importantes.

Vamos usar a estrutura do FOR por exemplo:

Ubound e Lbound no VBA
Estrutura FOR

Nossa estrutura de repetição está percorrendo a matriz do limite superior até o seu limite inferior, a cada linha ele vai mostrar na tela o nome contido na célula, para isso nós usamos o MsgBox na estrutura.

Agora que já sabemos como funciona, vamos completar a nossa matriz do início da aula?

Contagem das linhas
Contagem das linhas

Utilizando o código acima, a cada vez que clicarmos no botão F8 do nosso teclado ele vai preencher com os números a linha, começando pelo 1 na segunda linha da tabela abaixo do sinal de #.

Podemos ir completando com o F8 ou usar o F5 para completar toda a tabela.

Ubound e Lbound no VBA
Resultado

Perguntas frequentes

1. O que a função UBound retorna?

O índice mais alto de uma dimensão da matriz — não a quantidade de elementos. Num array de 0 a 9, UBound retorna 9 (e são 10 elementos). Em matrizes multidimensionais, o segundo argumento indica a dimensão: UBound(m, 2) dá o limite das colunas.

2. Para que serve o LBound?

Para descobrir o índice inicial da matriz, que nem sempre é zero: arrays declarados com intervalo (Dim m(5 To 20)) ou com Option Base 1 começam em outro valor. Usar LBound no início do loop garante que nenhum elemento fique de fora.

3. Como percorrer um array com UBound e LBound?

Com um For clássico: For i = LBound(m) To UBound(m) ... Next i. O loop se adapta sozinho a qualquer tamanho e base do array — o mesmo código funciona para 10 ou 10 mil posições, sem números fixos espalhados pela macro.

4. Por que meu array começa em 0 no VBA?

Porque a base padrão do VBA é zero: Dim m(9) cria posições de 0 a 9. Dá para mudar com Option Base 1 no topo do módulo ou declarando o intervalo explícito (Dim m(1 To 10)) — e é justamente essa variação que torna o LBound tão importante.

Conclusão – VBA Ubound e Lbound

Nesta aula eu quis te mostrar como funciona o Ubound e Lbound no VBA, esta, é uma estrutura que te indica os limites da matriz e que pode ser bastante útil em estruturas de repetição e códigos mais robustos.

É mais uma ferramenta importante para você ter como opção, essas ferramentas pouco usadas, mas bastante úteis fazem diferença na hora de fazer um trabalho que exige maior conhecimento e diferencial.

Espero que tenham gostado! Até a próxima!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?