Declarando matrizes

As Arrays foram declaradas a mesma forma que as outras variáveis, usando as instruções Dim, Static, Private ou Public. A diferença entre as variáveis escalares (aquelas que não são matrizes) e as variáveis de matrizes é que você geralmente precisa especificar o tamanho da matriz. Uma matriz de tamanho fixo é uma matriz cujo tamanho foi especificado. Uma matriz dinâmica é uma matriz cujo tamanho pode ser alterado enquanto o programa está sendo executado.

Uma matriz pode ser indexada de 0 ou 1, isso varia de acordo com as configurações da instrução Option Base. Se Option Base 1 não for especificada, todos os índices de matriz começarão em zero.

Declarar uma matriz fixa

Na linha de código a seguir, uma matriz de tamanho fixo é declarada como uma matriz Integer com 11 linhas e 11 colunas:

Dim MyArray(10, 10) As Integer 

O primeiro argumento representa as linhas; o segundo representa as colunas.

Como em qualquer declaração de variável, a menos que você especifique um tipo de dados para a matriz, o tipo de dados dos elementos em uma matriz declarada é Variant. Cada elemento Variant numérico da matriz usa 16 bytes. Cada elemento Variant da cadeia de caracteres usa 22 bytes. Para escrever o código de forma mais compacta possível, declare explicitamente que suas matrizes são de um tipo de dados diferente de Variant.

As linhas do código a seguir comparam o tamanho de várias matrizes.

' Integer array uses 22 bytes (11 elements * 2 bytes). 
ReDim MyIntegerArray(10) As Integer 
 
' Double-precision array uses 88 bytes (11 elements * 8 bytes). 
ReDim MyDoubleArray(10) As Double 
 
' Variant array uses at least 176 bytes (11 elements * 16 bytes). 
ReDim MyVariantArray(10) 
 
' Integer array uses 100 * 100 * 2 bytes (20,000 bytes). 
ReDim MyIntegerArray (99, 99) As Integer 
 
' Double-precision array uses 100 * 100 * 8 bytes (80,000 bytes). 
ReDim MyDoubleArray (99, 99) As Double 
 
' Variant array uses at least 160,000 bytes (100 * 100 * 16 bytes). 
ReDim MyVariantArray(99, 99) 

O tamanho máximo de uma matriz varia de acordo com o sistema operacional e a quantidade de memória disponível. Usar uma matriz que excede a quantidade de memória RAM disponível no sistema é mais lento porque os dados devem lidos e gravados no disco.

Declarar uma matriz dinâmica

Ao declarar uma matriz dinâmica, você pode dimensionar a matriz durante a execução do código. Use uma instrução Static, Dim, Private ou Public para declarar uma matriz e deixe os parênteses vazios, como mostrado no exemplo a seguir.

Dim sngArray() As Single 

Observação

É possível usar a instrução ReDim para declarar uma matriz implicitamente dentro de um procedimento. Tenha cuidado para não digitar incorretamente o nome da matriz ao usar a instrução ReDim. Mesmo se a instrução Option Explicit estiver incluída no módulo, uma segunda matriz será criada.

Em um procedimento dentro do escopo da matriz, use a instrução ReDim para alterar o número de dimensões, definir o número de elementos e definir os limites superior e inferior de cada dimensão. Use a instrução ReDim para alterar a matriz dinâmica sempre que necessário. No entanto, sempre que você fizer isso, os valores existentes na matriz serão perdidos. Use ReDim Preserve para expandir uma matriz, preservando os valores existentes nela.

Por exemplo, a instrução a seguir amplia a matriz em 10 elementos sem perder os valores atuais dos elementos originais.

ReDim Preserve varArray(UBound(varArray) + 10) 

Observação

Quando você usa a palavra-chavePreserve com uma matriz dinâmica, você pode alterar apenas o limite superior da última dimensão, mas não é possível alterar o número de dimensões.

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.