VBA ReDim

Declaração ReDim VBA 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 um array tem com ela, agora há dois aspectos importantes usados ​​com a instrução Preserve, se preserve for usado com esta instrução, então ele criará 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. Da mesma forma que declaramos a variável usando a palavra “Dim”, também precisamos declarar o nome do array usando “Dim”.

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 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 decidir 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

Você pode baixar este modelo VBA ReDim Excel aqui - modelo VBA ReDim Excel

Exemplo 1

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

Etapa 1: primeiro crie um nome de macro.

Etapa 2: Declare um nome de array como 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 

Portanto, o primeiro array é igual à palavra “Welcome”, o segundo array é igual à palavra “to” e o terceiro array é igual à palavra “VBA”.

Etapa 5: Agora armazene esses valores de matriz nas células.

Código:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 a 3) MyArray (1) = "Bem-vindo" MyArray (2) = "to" MyArray (3) = "VBA" Intervalo ("A1"). Valor = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

Etapa 6: se você executar este código, devemos ter esses valores nas células A1, B1 e C1, respectivamente.

Exemplo # 2 - redimensionar o tamanho da matriz, lembrando os valores antigos.

Uma vez que o nome da matriz atribuiu os valores, também podemos redimensionar a qualquer momento no procedimento usando a palavra “ReDim Preserve”.

Suponha que você já tenha declarado um nome de array e valores atribuídos a esses nomes de array como o abaixo.

Agora você gostaria de aumentar o comprimento do array em 2, ou seja, 5. Neste caso, podemos usar a palavra VBA “ReDim Preserve” para redimensionar o comprimento do array para lembrar os valores antigos também.

Código:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Bem-vindo" 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 

Agora podemos atribuir mais dois valores ao array.

Código:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Bem-vindo" 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 

Agora armazene esses valores em células.

Código:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Bem-vindo" 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 

Agora execute a macro e veja o que acontece

Portanto, temos a nova palavra na célula D1.

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 can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
  • We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
  • Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.