Como foi visto até o momento, uma variável consegue armazenar apenas um valor. Contudo, através de vetores (ou Arrays em inglês) é possível armazenar mais de um valor em uma variável.
Vetores são extremamente úteis em loops, pois além de tornarem o código menor, deixam a execução mais rápida comparada com uma variável por dado.
Os vetores são declarados de uma forma ligeiramente diferente das variáveis.
Dim AVetor(2) As String
'Dim NomeVetor([tamanho do vetor]) As TipoDeDado
Os vetores possuem índice para localizar onde os dados estão sendo armazenados.
Dim AVetor(10) As Integer
AVetor(3) = 5
AVetor(4) = 7
MsgBox "O índice 3 guarda " & AVetor(3) 'O índice 3 guarda 5
MsgBox "O índice 4 guarda " & AVetor(4) 'O índice 4 guarda 7
Por padrão o VBA considera o elemento de índice 0 como o primeiro elemento do vetor, portanto o caso abaixo comporta 3 elementos:
Dim AVetor(2) As String
AVetor(0) = "Um"
AVetor(1) = "Dois"
AVetor(2) = "Três"
Uma outra forma de declarar um vetor de 3 elementos é definindo na declaração do seu índice o início e o fim.
AVetor(1 To 3) As String 'AVetor(Início ao Fim)
No caso teríamos uma disposição dos índices um pouco diferente, iniciando no (1) e terminando em (3), conforme declaração.
AVetor(1) = "Um"
AVetor(2) = "Dois"
AVetor(3) = "Três"
Para descobrir qual é o índice inicial e o final de um vetor é possível utilizar as funções LBound e UBound respectivamente.
Caso se esteja tentando associar um valor a um índice não definido na declaração do vetor, teremos um erro de execução:
Dim AVetor(3) As String
AVetor(5) = "Cinco"
A tabela abaixo resume as formas de se declarar e referenciar vetores de tamanhos definidos.
Declaração | Elemento Nº1 | Elemento Nº2 | Elemento Nº3 |
---|---|---|---|
|
ArrNome(0) | ArrNome(1) | ArrNome(2) |
|
ArrNome(1) | ArrNome(2) | ArrNome(3) |
Não é possível iniciar vetores com índices negativos.
Dim AVetor(-3) 'Gerará um erro
Dim AVetor(-1 To 3) 'Gerará um erro
Ao declarar um vetor que tenha ao menos duas dimensões (separadas por vírgula) criamos uma matriz:
AMatriz(3,5) as String
No caso essa matriz tem a primeira dimensão de tamanho 4 (de 0 até 3) e a segunda dimensão de tamanho 6 (de 0 até 5). Totalizamos assim 24 elementos ($4 \times 6=24$).
Associamos valores a essa matriz de forma similar ao vetor, especificando o elemento no qual se deseja atribuir um valor:
AMatriz(3,5) as String
AMatriz(1,2) = "Um com dois"
Podemos, assim como nos vetores, especificar o índices com início e fim.
AMatriz(1 To 4, 1 To 6) as String
Também é possível mesclar a declaração:
AMatriz(1 To 4, 5) as String
Para copiar e colar valores de uma matriz para planilha e vice-versa, ou transpor a matriz, veja o tópico: Range Matriz.
Caso não saiba qual o tamanho terá seu vetor, pode-se optar por utilizar vetores dinâmicos, onde os limites são definidos após a declaração.
Versão ReDim
Dim AVetor() As Integer
'... códigos
ReDim AVetor(7) 'Redimensiona AVetor() para AVetor(7)
Versão Variant/Array
Dim AVetor As Variant
AVetor = Array("Super", "Excel", "VBA")
'Função Array transforma os argumentos em elementos de um vetor
Lembre-se que neste caso AVetor(0) terá o valor de "Super", AVetor(1) terá o valor de "Excel" e assim por diante.
Ao utilizar a função Array associada com uma variável do tipo Variant é possível misturar, em um mesmo vetor, elementos de tipos de dados diferentes:
AVetor = Array("Super", "Excel", 7)
Este procedimento deve ser feito com cautela para evitar erros de tipo posteriores, por exemplo, em loops.
Exercícios Sugeridos
SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.
Excel ® é uma marca registrada da Microsoft Corporation.
© 2024 SuperExcelVBA | SOBRE