VBA - Declare (Dim), Crie e Inicialize Variável de Matriz

Este tutorial demonstrará como declarar (Dim), criar e inicializar variáveis ​​de matriz em VBA

O que é uma variável de matriz VBA?

Uma variável de matriz VBA pode ser considerada um grupo de variáveis, armazenadas com o mesmo nome e com o mesmo tipo de dados. Uma matriz pode armazenar texto, números ou objetos.

Você se refere a um elemento em uma matriz usando seu número de índice.

Você pode declarar uma variável de array da mesma forma que declararia qualquer outra variável usando a palavra-chave Dim, Static, Public ou Private.

Matrizes estáticas

Existem 2 tipos de matrizes - Estática e Dinâmica. Uma matriz estática é declarada com seu tamanho especificado quando você declara a matriz inicialmente. Também é chamado de array fixo.

1 Dim intA (4) como inteiro

A matriz acima é declarada usando a instrução Dim em um nível de procedimento ou módulo, e o tamanho da matriz é 5, pois não declaramos o valor LBound da matriz.

Não, isso não é um erro de digitação! O tamanho da matriz é 5, apesar de inserir 4 na matriz. Isso ocorre porque os índices de array começam automaticamente em zero.

Índices de matriz

Os índices de matriz começam automaticamente em zero, a menos que Opção Base 1 é declarado no topo do seu módulo de código.

Se Opção Base 1 for declarado, então os arrays iniciarão automaticamente em 1.

No entanto, acho que declarar variáveis ​​de tal forma é problemático. Os revisores de código podem não estar cientes de que as matrizes começam em zero ou da declaração de Opção Base 1

Em vez disso, prefiro declarar explicitamente as posições inicial e final das matrizes:

1 Dim intA (2 a 5) como inteiro

Observe que, ao fazer isso, você pode iniciar a matriz em qualquer número (não apenas 1 ou 0).

Matrizes Dinâmicas

Uma variável Dynamic Array é um array cujo tamanho pode ser alterado em tempo de execução. Você declara variáveis ​​dinâmicas sem um tamanho.

1 Dim intA () como inteiro

Você pode usar a instrução ReDim para especificar o tamanho da matriz após a sua criação.

1 ReDim intA (2)

Você pode redimensionar uma matriz dinâmica a qualquer momento. No entanto, ao usar a instrução ReDim, todos os valores existentes são apagados. Para preservar os valores da matriz existente, use ReDim Preserve em vez de.

1 ReDim Preserve intA (2)

Você pode declarar uma matriz dinâmica em um procedimento, módulo ou nível global, mas você só pode usar a instrução ReDim dentro de um procedimento.

Variant Arrays

Arrays variantes são arrays dinâmicos com os quais é mais fácil trabalhar.

1 Dim varNames ()

Observe que você não precisa especificar o tipo de dados (presume-se que seja uma variante) ou o tamanho da matriz.

Como veremos abaixo, você pode inicializar matrizes variantes usando a função Array (não há necessidade de redimensionar matrizes primeiro)!

Declare Módulo e Matrizes Públicas

Conforme mostrado acima, os arrays podem ser declarados dentro de procedimentos, para uso dentro desse procedimento:

1234 Sub StaticArray ()'declara a matriz com um valor LBound de 1 e um valor UBound de 4Dim IntA (1 a 4) como inteiroEnd Sub

Mas eles também podem ser declarados no nível do Módulo ou Global.

1234567 Opção Explícita'declara a matriz com um valor LBound de 1 e um valor UBound de 4Dim IntA (1 a 4) como inteiroSub StaticArray ()End Sub

Neste exemplo, a variável de matriz pode ser chamada em qualquer lugar dentro deste módulo de código. Em vez disso, você pode declarar um array público que pode ser usado em todo o seu projeto VBA (consulte a próxima seção).

Declarando uma matriz pública

Você declara uma matriz pública estática da mesma forma que declararia uma variável pública.

1 StrNames públicos (3) como String

Essa declaração precisaria ir no topo do seu módulo, abaixo de Option Explicit. Ele pode então ser usado em todo o projeto VBA em qualquer módulo ou procedimento.

Se você declarar o Array na parte superior do módulo, mas com a palavra-chave Dim, o uso desse array é restrito a esse módulo individual. Tentar usar o Array em um módulo separado resultaria em erro.

Inicializar matrizes

Você pode atribuir valores a uma matriz estática da seguinte maneira.

1234567891011 Sub StaticArray ()'declara a matriz com um valor LBound de 1 e um valor UBound de 4Dim IntA (1 a 4) como inteiro'inicializar a matrizIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'mostra o resultado da posição 2 da matriz na janela imediataDebug.Print IntA (2)End Sub

Se você executar o procedimento acima, o valor de 20 será exibido na janela imediata.

Você também pode atribuir os valores a um Dynamic Array da mesma maneira

12345678910111213 Sub DynamicArray ()'declara uma matriz dinâmica, mas omite os valores vinculadosDim IntA () como inteiro'inicializar a matrizReDim IntA (1 a 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'mostra o resultado da posição 2 da matriz na janela imediataDebug.PrintIntA (2)End Sub

Função Array

Contudo, com a matriz variante apenas, você pode usar a função Array, que pode ser mais fácil do que usar o método padrão.

12 'preencher a matrizintA () = Matriz (10, 20, 30, 40)

Preencher Array com Loop

Você também pode preencher matrizes percorrendo um intervalo de células no Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'declara o arrayDim strNames () As String'declara um inteiro para contar as linhas em um intervaloDim n As Integer'declara um inteiro para o loopDim i As Integer'contar as linhas em um intervalon = Intervalo ("A1", Intervalo ("A1"). Fim (xlDown)). Linhas.Contagem'redim a matriz para a quantidade de linhas no intervalo.ReDim strNames (n)Para i = 0 para nstrNames (i) = Intervalo ("A1"). Offset (i + 1, 0)Proximo eu'mostra os valores na matrizMsgBox Join (strNames ())End Sub

Reinicializar matrizes

Você pode reinicializar seu array em qualquer estágio de seu código, mas então perderá o valor original contido naquela posição em seu array.

1234567891011121314 Sub StaticArray ()'declara a matriz com um valor LBound de 1 e um valor UBound de 4Dim IntA (1 a 4) como Inteiro'inicializar a matrizIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'mostra o resultado da posição 2 da matriz na janela imediataDebug.Print IntA (2)'inicializar o array novamenteintA (2) = 200Debug.Print IntA (2)End Sub

No exemplo acima, a matriz estática manterá todos os valores, exceto o valor na posição 2 - esse valor mudará para 200.

Usando ReDim

Se você estiver usando um array dinâmico, a instrução ReDim é usada para definir o tamanho do seu array. Você pode usar a instrução ReDim posteriormente em seu código para alterar o tamanho do Array quantas vezes você precisar. A linha de código abaixo irá reinicializar o Array intA para ter um tamanho de 2 (Lembre-se - um índice de Array começa em 0!)

1 ReDim intA (1) como inteiro

Portanto, o código que inclui a instrução ReDim seria semelhante ao exemplo abaixo.

1234567891011121314151617 Sub TestDynamicArray ()'declara o arrayDim intA () como inteiroReDim intA (2)'preencher a matriz com númerosintA (0) = 2intA (1) = 5intA (2) = 9'mostra o número na posição 1Debug.Print intA (1)'redim o array para mudar o tamanhoReDim intA (3)intA (0) = 6intA (1) = 8'mostra o número na posição 1 desta vezDebug.Print intA (1)End Sub

Se você executar o procedimento acima, o valor de 5 será exibido na janela imediata e, em seguida, um valor de 8 será exibido depois de redimensionar a matriz usando ReDim e preenchê-la novamente. No entanto, como não populamos IntA (2) e não usamos Re-Dim Preserve, o valor nessa posição na matriz será removido e as posições 3 e 4 na matriz serão zero.

Usando ReDim Preserve

Se usarmos ReDim Preserve, ele manterá os valores originais contidos na matriz.

1234567891011121314151617 Sub TestDynamicArray ()'declara o arrayDim intA () como inteiroReDim intA (2)'preencher a matriz com númerosintA (0) = 2intA (1) = 5intA (2) = 9'mostra o número na posição 2Debug.Print intA (2)'redim a matrizReDim intA (3)intA (0) = 6intA (1) = 8'mostrar o número na posição 2 novamenteDebug.Print intA (2)End Sub

Em ambas as caixas de mensagem exibidas acima, o número 9 aparecerá, pois a instrução ReDim Preserve manteve esse valor naquela posição.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave