VBA Excel - Armazenando os valores de um Range numa Matriz - Total Rows and Columns in an Array

Inline image 1

No MS Excel podemos usar matrizes (array) para calcular e manipular dados. Também podemos usar um código para armazenar os valores de um Range de células numa matriz. Este código adiciona uma coluna e linha a um Range retangular de células que terá os totais de cada linha e coluna da região.
Este código lerá os dados do Range na planilha ativa, armazenará os dados na matriz, somando cada linha e coluna, e depois colocará a saída na planilha. O tamanho da matriz será determinado pelo número de células do Range selecionado.
Nota: Este código não adicionar quaisquer fórmulas à sua planilha, por isso, se os números do intervalo sofrerem mudança, o código deve ser executado novamente.
  Sub TotalRowsAndColumns()      ' This macro assumes that you have selected any cell or group of      ' cells within a rectangular region of cells that you would       ' like to have totaled. The totals will appear in the row       ' below and the column to the right of the current region.        Dim r As Integer      Dim c As Integer      Dim i As Integer      Dim j As Integer      Dim myArray As Variant        ' Declaring myArray as a Variant prepares it to receive a       ' range of cells. At that point it is transformed automatically       ' into an array with beginning subscript myArray(1,1).        'Refer to the region surrounding the current selection.      With Selection.CurrentRegion          Let r = .Rows.Count          Let c = .Columns.Count
          'Resize for totals row and column and place into array.          Let myArray = .Resize(r + 1, c + 1)
          ' In the following nested loop, the variable i keeps           ' track of the row number, while j keeps track of the           ' column number. Every time j cycles through the           ' available columns, i gets incremented by one and j           ' starts the cycle from one to c all over again.          For i = 1 To r              For j = 1 To c                'total for row i                Let myArray(i, c + 1) = myArray(i, c + 1) + myArray(i, j)
                'total for column j                Let myArray(r + 1, j) = myArray(r + 1, j) + myArray(i, j)
                'grand total               Let myArray(r + 1, c + 1) = myArray(r + 1, c + 1) + myArray(i, j)
              Next j          Next i            ' Return the array, which now contains an extra row           ' and column for the totals, to the worksheet.          Let .Resize(r + 1, c + 1) = myArray
      End With  End Sub

Reference

Tags: VBA, Excel, cell, array, Total, 


Inline image 1

Nenhum comentário:

Postar um comentário

diHITT - Notícias