VBA Arrays Multidimensionais (Arrays 2D)
In this Article
Este tutorial abordará as matrizes bidimensionais e multidimensionais no VBA.
Matrizes Multidimensionais (Arrays 2D)
Matrizes multidimensionais são arrays que contêm mais de uma dimensão, geralmente duas ou três dimensões, mas as matrizes podem ter até 32 dimensões.
Declarar uma Array 2D
Para criar uma matriz com mais de uma dimensão, use vírgulas para definir cada dimensão separada:
Dim intArr(2,3) as Integer
Preenchimento de uma Array 2D
O código abaixo preencherá uma matriz 2D e, em seguida, preencherá as linhas e colunas de uma planilha com os valores da matriz.
Sub Preencher2D()
'Declar Array 2D
Dim intA(2, 3) As Integer
'Declarar variaveis
Dim rw As Integer
Dim col As Integer
'Preencher a array
intA(0, 0) = 45
intA(0, 1) = 50
intA(0, 2) = 55
intA(0, 3) = 60
intA(1, 0) = 65
intA(1, 1) = 70
intA(1, 2) = 75
intA(1, 3) = 80
intA(2, 0) = 85
intA(2, 1) = 90
intA(2, 2) = 95
intA(2, 3) = 100
'Fazer um loop pela matriz e preencher o Excel
For rw = 0 To 2
For col = 0 To 3
Cells(rw + 1, col + 1).Value = intA(rw, col)
Next col
Next rw
End Sub
Sua planilha do Excel deverá ser preenchida da seguinte forma.
Preenchimento de Uma Matriz 2D a Partir de Dados do Excel
O código abaixo preencherá uma matriz 2D a partir de uma planilha do Excel e, em seguida, preencherá uma planilha diferente com os dados.
Sub Preencher2D()
'Declarar as planilhas
Dim ws_Fonte As Worksheet
Dim ws_Destino As Worksheet
'Declarar a array
Dim wsData(10, 2) As Variant
'Declare as variaveis
Dim rw as Integer
Dim col As Integer
'Atribuir a planilha de origem
Set ws_Fonte = Worksheets("Planilha1")
'Obter as informações da planilha de origem e preencher a matriz
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
wsData(rw, col) = ws_Fonte.Range("A2").Offset(rw, col).Value
Next col
Next rw
'Atribuir a planilha de destino
Set ws_Destino = Worksheets("Planilha2")
' Preencher a planilha de destino a partir da matriz
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
ws_Destino.Range("A1").Offset(rw,col).Value = wsData(rw, col)
Next col
Next rw
End Sub
Redimensionamento Usando ReDim e Re-Dim Preserve
Você pode redimensionar uma Arrat usando ReDim (saiba mais).
Sub Redimensionar2D()
'Declarar a Array
Dim varArray() as Variant
'Declarar o tamanho da array
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'Redeclarar o tamanho da array
ReDim varArray(0, 1)
'Preencher novamente a array
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
End Sub
Ao redeclarar a matriz, você perderá todos os dados mantidos anteriormente na matriz, a menos que use a instrução ReDim Preserve.
Sub Redimensionar2D()
'Declarar a array
Dim varArray() as Variant
'Declarar o tamanho da array
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'Redeclarar o tamanho da array
ReDim Preserve varArray(1, 3)
'Preencher a array com os valores adicionais
varArray(0, 3) = "Rob Barnes"
varArray(1, 3) = "Plumber"
End Sub
Você só pode redimensionar a última dimensão de uma matriz se quiser manter os dados originais na matriz com ReDim Preserve.
Quando você clicar em depurar, o erro será destacado, mostrando que a primeira dimensão da matriz não é a mesma que a primeira dimensão quando o tamanho da matriz foi originalmente declarado.