Resolução dos Exercícios

Capítulo 9
Utilizando Funções e Macros Auxiliares



Considere a seguinte planilha:

Aluno Média Provas Média EPs Média Final Resultado
Adalberto 7,0 9,0    
Belinda 3,0 6,0    
Clementino 4,5 9,0    
Danusa 5,5 4,0    
Eleutério 2,0 4,0    


1. Fazer uma função auxiliar CalculaMédia que calcula a média final de acordo com a fórmula:
MF = (3 * MP + MEP)/4, se MP >= 4 e MEP >= 4
MF = min( MP, MEP), caso contrário.

Quantos parâmetros esta função deve receber?

Resolução:

Function CalculaMedia(linha As Integer) As Double
    
    Dim MP As Double ' Média de Prova
    Dim MEP As Double ' Média de EP
    Dim MF As Double ' Média Final (o que queremos calcular)
    
    ' Primeiramente preciso ler da planilha a
    ' média de prova e a média de EP do aluno

    MP = Cells(linha, 2) ' 2 significa coluna B
    MEP = Cells(linha, 3) ' 3 significa coluna C
    
    ' Agora que já temos as médias, podemos calcular
    ' a média final

    If MP >= 4 And MEP >= 4 Then
        MF = (3 * MP + MEP) / 4
    Else
        ' MF = min(MP, MEP)
        If MP > MEP Then
            MF = MEP
        Else
            MF = MP
        End If
    End If
    
    CalculaMedia = MF
    
End Function



2. Fazer uma função auxiliar Resultado que retorna um string de acordo com as médias, da seguinte maneira: Quais são os parâmetros passados para a função?

Resolução:

Function Resultado(linha As Integer) As String
    
    Dim MP As Double ' Média de Prova
    Dim MEP As Double ' Média de EP
    Dim MF As Double ' Média Final
    Dim resposta As String ' o que a gente quer encontrar
    
    ' Analisando como é encontrado o 'resultado', observo que
    ' para classificar os alunos preciso das seguintes notas:
    ' média final, média de provas e média de EPs
    ' portanto primeiramente preciso ler estes valores da planilha

    MP = Cells(linha, 2) ' 2 significa coluna B
    MEP = Cells(linha, 3) ' 3 significa coluna C
    MF = Cells(linha, 4) ' 3 significa coluna D
    
    If MF >= 5 Then
        resposta = "Aprovado"
    ElseIf (MF >= 3 And MF < 5) And (MP >= 3 And MP < 5) And (MEP > 5) Then
    ' Obs: Não é necessário colocar os parênteses, porém sua utilização
    ' torna o código mais claro

        resposta = "Reaval de Prova"
    ElseIf (MF >= 3 And MF < 5) And (MEP >= 3 And MEP < 5) And (MP > 5) Then
        resposta = "Reaval de EP"
    ElseIf (MF >= 3 And MF < 5) And (MP >= 3 And MP < 5) And (MEP >= 3 And MEP < 5) Then
        resposta = "Reaval de Prova e EP"
    Else
        resposta = "Reprovado"
    End If
    
    Resultado = resposta
    
End Function



3. Fazer uma macro que, usando as funções auxiliares CalculaMedia e Resultado, preenche a planilha acima.

Resolução:

Sub Calcula()
    
    ' Agora que já temos uma função que calcula a média dada uma linha
    ' e uma função que retorna o resultado dada uma linha, podemos nos preocupar
    ' apenas em chamar estas funções para todas as linhas

    
    Dim linha As Integer     ' utilizaremos esta variável para percorrermos todas as linhas e guardarmos a linha atual
    
    ' começaremos da linha 2, pois a primeira é o cabeçalho (Nome, Média Provas, Média EPs, etc.)
    linha = 2
    
    ' Vamos percorrer as linhas até encontrarmos uma célula vazia
    ' Optei por verificar a célula vazia na coluna A, porém poderíamos utilizar
    ' a B ou a C, pois todas as colunas terão o mesmo número de linhas preenchidas

    Do While Not IsEmpty(Cells(linha, 1))
    
    ' Calculamos a média final e colocamos o valor na célula da planilha
    Cells(linha, 4) = CalculaMedia(linha)
    
    ' Encontramos o resultado e colocamos o valor na célula da planilha
    Cells(linha, 5) = Resultado(linha)
    
    linha = linha + 1 ' pulamos para a próxima linha
    Loop
    
End Sub

[ Voltar ]