Escolha seu idioma de preferência

VBA Array


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.


Vetores

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"
Fora do Intervalo

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
Dim ArrNome(2)
ArrNome(0) ArrNome(1) ArrNome(2)
Dim ArrNome(1 To 3)
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

Matrizes

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.


Arrays de Tamanhos Dinâmicos

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.



Fixando o Aprendizado

Exercícios Sugeridos

Ordenar Vetor Contar Cédulas



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.

© 2019 SuperExcelVBA | SOBRE

Protected by Copyscape