VBA – Matriz dinâmica (Redim e Redim Preserve)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on May 11, 2023

Este tutorial demonstrará como usar matrizes dinâmicas (redim e redim preserve) no VBA.

Matriz Dinâmica

As Matrizes Dinâmicas são matrizes que podem mudar de tamanho (ao contrário das matrizes estáticas, que são estáticas).

Para declarar uma matriz dinâmica, você declara a matriz, mas omite o tamanho da matriz:

Dim strNomes() As String

Então, antes de atribuir valores à matriz, você deve usar a instrução ReDim para definir a matriz com o tamanho desejado:

ReDim strNomes(1 to 3)

Agora, sempre que quiser alterar o tamanho da matriz, basta usar ReDim (ou ReDim Preserve, como veremos a seguir).

Matrizes Dinâmicas Tipo Variant

Observação: As Matrizes Variant são um pouco diferentes. Com as matrizes variant, você não precisa definir o tamanho da matriz com ReDim antes de atribuir valores.

Sub TesteArray()
'declarar a variável
    Dim varNomes() As Variant
'preencher a matriz
    varNomes() = Array("Fred", "Wilma", "Barney", "Betty")
'retornar os valores
    MsgBox Join(varNomes, ",")
End Sub

Redim vs. Redim Preserve

A instrução ReDim redimensiona uma array, limpando todos os valores existentes.

A instrução ReDim Preserve redimensiona uma array, mantendo (“preservando”) todos os valores existentes.

Uso do ReDim

Na prática, o redimensionamento de uma matriz com o ReDim tem a seguinte aparência:

Sub TesteReDim()
'Declarar a Array como String
   Dim strNomes() As String
'Redimensionar a Array de String para comportar 3 valores
   ReDim strNomes(1 to 3)
'preencher a array com 3 nomes
   strNomes(1) = "Mel"
   strNomes(2) = "Steve"
   strNomes(3) = "Bob"
'exibir os resultados na janela de verificação imediata
   Debug.Print Join(strNomes, vbCrLf)
End Sub

janela imediata resultados

Usando ReDim Preserve

Neste exemplo, usaremos ReDim para definir a matriz dinâmica inicial e, em seguida, ReDim Preserve para redimensionar a matriz, mantendo os valores originais:

Sub TesteReDim()
'Declarar a Array como String
   Dim strNomes() As String
'Redimensionar a Array de String para comportar 3 valores
   ReDim strNomes(1 to 3)
'preencher a array
   strNomes(1) = "Mel"
   strNomes(2) = "Steve"
   strNomes(3) = "Bob"
'exibir os resultados na janela de verificação imediata
   Debug.Print Join(strNomes, vbCrLf)
'redimensionar mas preservando os valores
   ReDim Preserve strNomes(1 to 4)
   strNomes(4) = "Fred"
'exibir os resultados na janela de verificação imediata
   Debug.Print Join(strNomes, vbCrLf)
End Sub

janela imediata resultados preserve

Se você não usar a instrução PRESERVE, perderá os dados que estavam na matriz anteriormente.

janela imediata resultados sem preserve

Na janela imediata acima, a array é preenchia com Mel, Steve e Bob. Quando foi declarada novamente, ela removeu esses valores e, em vez disso, retornou 3 valores em branco e, em seguida, o valor ‘Fred’. Isso se deve ao fato de a instrução PRESERVE ter sido omitida.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA