Este tutorial discutirá matrizes bidimensionais e bidimensionais em VBA.
Matriz multidimensional (matrizes 2D)
Matrizes multidimensionais são matrizes 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 um array 2D
Para criar uma matriz com mais de uma dimensão, use vírgulas para definir cada dimensão separada:
1 | Dim intArr (2,3) como inteiro |
Preenchendo uma matriz 2D
O código a seguir preencherá uma matriz 2D e, em seguida, preencherá as linhas e colunas de uma planilha com os valores da matriz.
1234567891011121314151617181920212223242526 | Sub Populate2D ()'declara o array 2DDim intA (2, 3) como inteiro'declarar variáveisDim rw As IntegerDim col As Integer'preencher a matrizintA (0, 0) = 45intA (0, 1) = 50intA (0, 2) = 55intA (0, 3) = 60intA (1, 0) = 65intA (1, 1) = 70intA (1, 2) = 75intA (1, 3) = 80intA (2, 0) = 85intA (2, 1) = 90intA (2, 2) = 95intA (2, 3) = 100'percorrer a matriz e preencher o ExcelPara rw = 0 a 2Para col = 0 a 3Células (rw + 1, col + 1) .Value = intA (rw, col)Próxima colPróximo rwEnd Sub |
Sua planilha do Excel deve ser preenchida da seguinte maneira.
Preenchendo uma matriz 2D a partir de dados do Excel
O código a seguir preencherá uma matriz 2D de uma planilha do Excel e, em seguida, preencherá uma planilha diferente com os dados.
1234567891011121314151617181920212223242526 | Sub Populate2D ()'Declare as planilhasDim ws_Source as WorksheetDim ws_Destination As Worksheet'Declare a matrizDim wsData (10, 2) como variante'Declare as variáveisDim rw as IntegerDim col As Integer'consulte a folha de fontesDefina ws_Source = Worksheets ("Planilha1")'obter as informações da planilha de fontes e preencher a matrizPara rw = LBound (wsData, 1) Para UBound (wsData, 1)Para col = LBound (wsData, 2) Para UBound (wsData, 2)wsData (rw, col) = ws_Source.Range ("A2"). Offset (rw, col) .ValuePróxima colPróximo rw'consulte a planilha de destinoDefina ws_Destination = Worksheets ("Sheet2")'preencher a planilha de destino da matrizPara rw = LBound (wsData, 1) Para UBound (wsData, 1)Para col = LBound (wsData, 2) Para UBound (wsData, 2)ws_Destination.Range ("A1"). Offset (rw, col) .Value = wsData (rw, col)Próxima colPróximo rwEnd Sub |
Redimensionar usando ReDim e Re-Dim Preserve
Você pode redimensionar uma matriz usando ReDim.
1234567891011121314151617 | Sub Resize2D ()'declara o arrayDim varArray () como variante'declara o tamanho da matrizReDim varArray (1, 2)varArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Contador"varArray (1, 1) = "Secretário"varArray (1, 2) = "Doutor"'redeclarar o tamanho da matrizReDim varArray (0, 1)'repovoar a matrizvarArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"End Sub |
Ao redeclarar a matriz, você perderá todos os dados anteriormente mantidos na matriz, a menos que use o Declaração de preservação do ReDim.
12345678910111213141516 | Sub Resize2D ()'declara o array Dim varArray () como Variant'declara o tamanho da matrizReDim varArray (1, 2)varArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Contador"varArray (1, 1) = "Secretário"varArray (1, 2) = "Doutor"'redeclarar o tamanho da matrizReDim Preverve varArray (1, 3)'preencher a matriz com valores adicionaisvarArray (0, 3) = "Rob Barnes"varArray (1, 3) = "Encanador"End Sub |
Você só pode redimensionar a última dimensão de um Array se quiser manter os dados originais no Array com Re-Dim Preserve.
Ao clicar em depurar, o erro será destacado mostrando que a primeira dimensão na matriz não é a mesma que a primeira dimensão quando o tamanho da matriz foi declarado originalmente.