Muito útil em seu formato tradicional no Excel, a função de transposição de dados permite trocar facilmente linhas por colunas de uma área de dados no Excel.
Para desenvolvedores VBA essa necessidade é um pouco rara, mas não menos importante, principalmente quando manipulamos muitos dados em arrays e controles. Bom, surgiu a necessidade e encontrei um código muito bem feito que efetua a tarefa.
A função recebe um Array de Variants de 2 dimensões como um argumento e retorna o mesmo já transposto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Function Array2DTranspose(avValues As Variant) As Variant Dim lThisCol As Long, lThisRow As Long Dim lUb2 As Long, lLb2 As Long Dim lUb1 As Long, lLb1 As Long Dim avTransposed As Variant If IsArray(avValues) Then On Error GoTo ErrFailed lUb2 = UBound(avValues, 2) lLb2 = LBound(avValues, 2) lUb1 = UBound(avValues, 1) lLb1 = LBound(avValues, 1) ReDim avTransposed(lLb2 To lUb2, lLb1 To lUb1) For lThisCol = lLb1 To lUb1 For lThisRow = lLb2 To lUb2 avTransposed(lThisRow, lThisCol) = avValues(lThisCol, lThisRow) Next Next End If Array2DTranspose = avTransposed Exit Function ErrFailed: Debug.Print err.description Debug.Assert False Array2DTranspose = Empty Exit Function Resume End Function |
Perfeita para trabalhar com dados, principalmente aqueles retornados em Recordsets ADO ou DAO.
Abraços e bom profeito!
Tomás Vásquez