Calcular a Média das Linhas e das Colunas a Partir da Célula Activa em VBA\Excel
Posted by admin on 26 de Dezembro de 2011 | Filed under Exercícios, Línguagens de Programação, Programação
Continuando com a resolução dos meus primeiros exercícios em Vba aqui fica mais um:
Elabore um algoritmo que permita Calcular a Média das Linhas e das Colunas a Partir da Célula Activa.
Aqui fica o código que resolve o exercício:
Sub MatrixAverageRC()
Dim InitialCell As Range
Dim c() As Double
Dim AverageColumn() As Double, AverageRow() As Double
Dim s As Double
Dim nColumns As Integer, nRows As Integer
Dim i As Integer, j As Integer
Set InitialCell = ActiveCell
' Calcular o número de linhas
nRows = 0
Do
nRows = nRows + 1
Loop Until IsEmpty(InitialCell.Offset(nRows, 0))
' Calcular o número de colunas
nColumns = 0
Do
nColumns = nColumns + 1
Loop Until IsEmpty(InitialCell.Offset(0, nColumns))
' redimensionar os vectores e as matrizes
ReDim c(1 To nRows, 1 To nColumns)
ReDim AverageColumn(1 To nColumns)
ReDim AverageRow(1 To nRows)
' guardar valores das células na matriz c()
For j = 1 To nRows ' linha
For i = 1 To nColumns ' coluna
c(j, i) = InitialCell.Offset(j - 1, i - 1).Value
Next i
Next j
' calcula a média das linhas
For j = 1 To nRows ' linhas
s = 0
For i = 1 To nColumns ' colunas
s = s + c(j, i)
Next i
AverageRow(j) = s / nColumns ' calcula a média e guarda
' Apresenta a média numa célula
ActiveCell.Offset(j - 1, nColumns).Value = AverageRow(j)
ActiveCell.Offset(j - 1, nColumns).Font.Bold = True
Next j
' calcula a média das colunas
For i = 1 To nColumns ' colunas
s = 0
For j = 1 To nRows ' linhas
s = s + c(j, i)
Next j
AverageColumn(i) = s / nRows ' calcula a média e guarda
' Apresenta a média numa célula abaixo
ActiveCell.Offset(nRows, i - 1).Value = AverageColumn(i)
ActiveCell.Offset(nRows, i - 1).Font.Bold = True
Next i
End Sub
Não sei se a forma como implementei a resolução do exercício é a mais correcta, e por isso fico à espera de comentários, ou mesmo de correcções e dicas de melhoramento do código que apresento.
Share

