VBA – Função Retornar Matriz
Este artigo demonstrará como retornar uma matriz usando uma função VBA.
VBA – Função Retornar Matriz
Ao usar funções para retornar matrizes, recomendo enfaticamente que as matrizes sejam declaradas com o tipo variant:
Function RetornarMatriz() As Variant
End Function
É mais fácil trabalhar com matrizes tipo variant. O tamanho da matriz se torna menos preocupante.
Exemplos de Funções Retornar Matrizes
Aqui está um exemplo de uma função que retorna uma matriz:
Function RetornarMatriz() As Variant
Dim tempArr As Variant
'Criar nova matriz temporária
ReDim tempArr(1 To 3, 1 To 2)
'Atribuir valores à matriz
tempArr(1, 1) = "Steve"
tempArr(1, 2) = "Johnson"
tempArr(2, 1) = "Ryan"
tempArr(2, 2) = "Johnson"
tempArr(3, 1) = "Andrew"
tempArr(3, 2) = "Scott"
'Matriz de saída
RetornarMatriz = tempArr
End Function
Sub TesteTransporMatriz()
Dim MatrizSaida As Variant
'Call RetornarMatriz
MatrizSaida = RetornarMatriz()
'Testar Saida
MsgBox MatrizSaida(2, 1)
End Sub
Observe que declaramos os arrays com o tipo de dados = variant para evitar problemas de tamanho.
Esse exemplo recebe uma matriz como entrada, transpõe a matriz e gera a nova matriz transposta:
Function TransporMatriz(MinhaArray As Variant) As Variant
Dim x As Long, y As Long
Dim maxX As Long, minX As Long
Dim maxY As Long, minY As Long
Dim tempArr As Variant
'Obter limites superiores e inferiores
maxX = UBound(MinhaArray, 1)
minX = LBound(MinhaArray, 1)
maxY = UBound(MinhaArray, 2)
minY = LBound(MinhaArray, 2)
'Criar nova matriz temporária
ReDim tempArr(minX To maxX, minY To maxX)
'Transpor a matriz
For x = minX To maxX
For y = minY To maxY
tempArr(y, x) = MinhaArray(x, y)
Next y
Next x
'Matriz de saída
TransporMatriz = tempArr
End Function
Sub TestarTransporMatriz()
Dim ArrTeste(1 To 3, 1 To 2) As Variant
Dim ArrSaida As Variant
'Atribuir valores à matriz
ArrTeste(1, 1) = "Steve"
ArrTeste(1, 2) = "Johnson"
ArrTeste(2, 1) = "Ryan"
ArrTeste(2, 2) = "Johnson"
ArrTeste(3, 1) = "Andrew"
ArrTeste(3, 2) = "Scott"
'Call Transpose Function
ArrSaida = TransporMatriz(ArrTeste)
'Test Output
MsgBox ArrSaida(2, 1)
End Sub