VBA ReDim - Manipule arranjos dinâmicos usando VBA ReDim Preserve

Declaração de ReDim VBA do Excel

A instrução VBA Redim é semelhante à instrução dim, mas a diferença é que ela é usada para armazenar ou alocar mais espaço de armazenamento ou diminuir o espaço de armazenamento que uma variável ou array tem com ela, agora há dois aspectos importantes usados ​​com a instrução Preserve, se preserve for usado com esta instrução, ele cria um novo array com tamanho diferente e se preserve não for usado com esta instrução então ele apenas altera o tamanho do array da variável atual.

Os arrays são uma parte importante da codificação VBA. Usando arrays, podemos armazenar mais de um valor na mesma variável que definimos. Assim como declaramos a variável usando a palavra “Dim”, precisamos declarar o nome do array usando “Dim” também.

Para declarar o nome do array, precisamos primeiro identificar o tipo de array que vamos definir. Em matrizes, temos 5 tipos.

  1. Matriz Estática
  2. Matriz Dinâmica
  3. Matriz unidimensional
  4. Matriz bidimensional
  5. Matriz Multi-Dimensional

Na matriz estática do Excel, decidiremos o valor inferior e o valor superior da matriz com bastante antecedência ao declarar a variável. Por exemplo, veja o exemplo abaixo.

Código:

Sub ReDim_Example1 () Dim MyArray (1 a 5) As String End Sub

Aqui, MyArray é o nome da matriz, que pode conter o valor de 1 a 5. MyArray pode conter 5 resultados diferentes como o mostrado abaixo.

Código:

Sub ReDim_Example1 () Dim MyArray (1 a 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = "Bom dia" End Sub

Matriz dinâmica com declaração ReDim

Mas em Dynamic array, esse não é o caso. Não decidiremos o valor inferior e o valor superior com antecedência; em vez disso, apenas definimos o nome do array e atribuímos o tipo de dados.

Sub ReDim_Example1 () Dim MyArray () As String End Sub

Para tornar o nome do array dinâmico, precisamos declará-lo com a palavra “Dim” primeiro, mas não decidimos o tamanho do array com antecedência. Apenas nomeamos um array com valores vazios entre parênteses (). Quando a matriz não inclui o tamanho, ela é tratada como uma matriz dinâmica.

Dim MyArray () As String

No momento em que você menciona o tamanho do array entre parênteses, ele se torna um array estático. Dim MyArray (1 a 5) As String

No array dinâmico, sempre redimensionamos o tamanho do array usando a palavra “ReDim” na próxima linha do código.

ReDim MyArray (1 a 6) As String

Qualquer valor armazenado no nome do array nas etapas anteriores, ou seja, usando a instrução “Dim”, permanece nulo, e o tamanho que declaramos usando “ReDim” torna-se o novo tamanho do array.

Exemplos para usar a instrução VBA Redim

Exemplo 1

Dê uma olhada no exemplo do uso prático da declaração “ReDim”. Siga as etapas abaixo para aplicar “ReDim”.

Etapa 1: primeiro crie um nome de macro.

Etapa 2: Declare um nome de array como uma string.

Código:

Sub ReDim_Example1 () Dim MyArray () As String End Sub

Passo 3: Agora use a palavra “Redim” e atribua o tamanho do array.

Código:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 a 3) End Sub

Etapa 4: agora, o nome do array “MyArray” pode conter até 3 valores aqui. Atribua o valor a essas 3 matrizes como a abaixo.

Código:

Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 a 3) MyArray (1) = "Bem-vindo" MyArray (2) = "to" MyArray (3) = "VBA" End Sub

So, the first array is equal to the word “Welcome” the second array is equal to the word “to,” and the third array is equal to the word “VBA.”

Step 5: Now store these array values in cells.

Code:

Sub ReDim_Example1() Dim MyArray() As String ReDim MyArray(1 To 3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) End Sub

Step 6: If you run this code, we should have these values in A1, B1, and C1 cells, respectively.

Example #2 - Resize the Array Size While Remembering the Old Values.

Once the array name is assigned values, we can also resize at any point in time in the procedure by using the word “ReDim Preserve.”

Assume you have already declared an array name and assigned values to those array name like the below one.

Now you would like to increase the array length by 2, i.e., 5. In this case, we can use the word VBA “ReDim Preserve” to resize the array length to remember the old values as well.

Code:

Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now we can assign two more values to the array.

Code:

Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now store these values in cells.

Code:

Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub

Now run the macro and see what happens.

So we got the new word in the D1 cell.

A razão pela qual precisamos usar a palavra “preservar” é que o array deve lembrar os valores do array antigo no procedimento.

No momento em que você ignorar a palavra “preservar”, ele não se lembrará de valores antigos.

Coisas para lembrar aqui

  • ReDim pode conter apenas o último valor da matriz, não os muitos valores. Por exemplo, não podemos usar este código “ReDim Preserve MyArray (4 a 5)”. Isso gerará o erro.
  • Não podemos ReDim arrays estáticos. No momento em que você atribui o tamanho do array entre parênteses, ele se torna um array estático.
  • Usando ReDim, não podemos alterar o tipo de dados. O array pode conter qualquer tipo de dado que atribuímos ao declarar o array.

Artigos interessantes...