Ir para conteúdo
Fórum Script Brasil
  • 0

DUVIDA COM MACRO PLANILHA


Mateus Menegatti

Pergunta

Bom dia, tenho o seguinte problema a resolver: " A ideia é sabermos o capital inicial disponível, informações sobre possíveis fundos de investimento e o capital final desejado. O programa deve verificar para cada fundo, qual o prazo necessário para alcançar o capital desejado. Com base nos prazos calculados e no perfil do investidor, o programa deve aconselhar qual o melhor fundo para investimento.
O programa deve receber do usuário um perfil de risco (Muito Alto, Alto, Médio, Baixo), um capital inicial e um capital final desejado. Estes dados estarão em uma segunda planilha, conforme explicado abaixo.

Com estes dados, o programa deve selecionar o fundo mais adequado para aquele investidor, levando em conta:

O capital inicial deve ser pelo menos igual ao mínimo inicial do fundo.
O risco do fundo deve ser menor ou igual ao do perfil do investidor.
O número de meses necessários deve ser o menor entre os fundos que satisfazem as duas condições acima.
O programa deverá preencher uma segunda planilha, chamada Resultados.

Na primeira linha da planilha Resultados, o usuário deve colocar os dados de entrada: na célula A1 deverá aparecer o perfil (ex. "Baixo"), na B1 o capital inicial (ex. "100") e na C1 o capital final (ex. "1000").

Na célula A2 deve aparecer "Fundo" e na B2 deve aparecer "Meses"

A partir da terceira linha, o programa deverá colocar na primeira coluna o nome do fundo e na segunda coluna o número de meses necessários para atingir o capital final.

Seu programa deve ter no mínimo as funções e macros auxiliares descritas abaixo:

Function Prazo(CapInicial As Double, CapFinal As Double, TaxaAdmin As Double, Rentabilidade As Double) As Integer
Função que recebe os quatro parâmetros reais - dois fornecidos pelo usuário na planilha de Resultados e dois lidos da tabela de fundos - e devolve um inteiro correspondendo ao número de meses necessários para atingir o capital final. Como a taxa de administração geralmente é dada por ano, o valor a ser subtraido da rentabilidade é TaxaAdmin/12.

Sub PreencheTabela(CapInicial As Double, CapFinal As Double) 
Macro auxiliar que recebe os valores do capital inicial e do capital final e preenche as linhas da planilha Resultados com o nome de cada fundo e o prazo necessário. Esta macro deve utilizar a função Prazo.

Function AvaliaRisco(Perfil As String, Linha As Integer) As Boolean 
Função que verifica se um certo fundo (especificado pelo parâmetro Linha, que indica a linha na tabela de fundos) está de acordo com o perfil do usuário.



Vocês podem criar quantas funções e macros quiserem, desde que tenham no mínimo as três acima. Além disso, a coluna D da planilha Resultados pode ser usada de rascunho durante a execução do programa - lembre-se de apagá-la no final. A resposta deve ser dada nas células D1 e E1, informando o nome do fundo mais adequado ao investidor em D1 e o número de meses necessário em E1.

IMPORTANTE:

a macro principal, que vai chamar as demais e preencher a tabela deve ter o mesmo cabeçalho para todos: Sub Main()
a planilha com a tabela de rentabilidade deve se chamar "Rentabilidade"
a ordem entre as planilhas "Rentabilidade" e "Resultado" não importa, vocês devem sempre se referir às células pelo "nome completo", i.e., identificando a planilha."

 

Editado por Mateus Menegatti
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Sub Main()
    Dim lin As Integer
    Dim menor As Integer
    Dim fundo As String
    
    PreencheTabela 'aciona a macro auxiliar para preencher a tabela
    AvaliaRisco = True 'checa se o risco é compativel
    lin = 3
    menor = Worksheets(Resultados).Cells(2, 2) 'primeiro elemento dos meses
    fundo = Worksheets(Resultados).Cells(1, 2)
    
    While Worksheets(Resultados).Cells(lin, 2) <> 0
        If Worksheets(Resultados).Cells(lin, 2) < menor Then
            menor = Worksheets(Resultados).Cells(lin, 2) 'compara para ver qual é menor
        End If
    
    lin = lin + 1
    
    
    Wend
    Worksheets(Resultados).Cells(1, 5) = menor
    Worksheets(Resultados).Cells(1, 4) = fundo
    
    

End Sub


Function Prazo(CapInicial As Double, CapFinal As Double, TaxaAdmin As Double, Rentabilidade As Double) As Integer

    Dim lin As Integer
    Dim meses As Integer
    

    lin = 2
    meses = 0
    CapInicial = Worksheets(Resultado).Cells(1, 2)
    CapFinal = Worksheets(Resultado).Cells(1, 3)
    TaxaAdmin = Worksheets(Rentabilidade).Cells(lin, 3)
    Rentabilidade = Worksheets(Rentabilidade).Cells(lin, 5)


    While CapInicial < CapFinal
    
    CapInicial = CapInicial + (CapInicial * Rentabilidade / 100) * (1 - TaxaAdmin / 1200) 'Como a taxa de Adm deve ser dividida por 12, ela se torna 1200 pois também é necessario dividir por 100 devido se tratar de uma porcentagem
    meses = meses + 1 'para contar quantos meses são necessários para atingir o capital final
    
    Wend
    
    Prazo = meses 'a função recebe o valor do numero de meses necessarios pra atingir o capital final
    
    
    
End Function

Sub PreencheTabela(CapInicial As Double, CapFinal As Double)
    Dim NomeFundo As String
    Dim PrazoFundo As Integer
    Dim lin As Integer
    
    lin = 2
    CapInicial = Worksheets(Resultado).Cells(1, 2)
    CapFinal = Worksheets(Resultado).Cells(1, 3)
    NomeFundo = Worksheets(Rentabilidade).Cells(lin, 1)
   
    
    
    While Not IsEmpty(Worksheets(Rentabilidade).Cells(lin, 1))
        Worksheets(Resultados).Cells(lin, 1) = NomeFundo 'imprimir o nome do fundo nas celulas pedidas
        PrazoFundo = Prazo 'ativar a função Prazo
        Worksheets(Resultados).Cells(lin, 2) = PrazoFundo 'imprimir o numero de meses necessário nas celulas pedidas
        lin = lin + 1
        
    Wend
    
    
    
End Sub

Function AvaliaRisco(Perfil As String, Linha As Integer) As Boolean
    Dim fundo As String
    Dim PerfilUsuario As String
    
    PerfilUsuario = Worksheets(Resultado).Cells(1, 1)
    fundo = Worksheets(Rentabilidade).Cells(Linha, 1)
    Linha = 2
    Perfil = Worksheets(Rentabilidade).Cells(Linha, 2)
      
    While Not IsEmpty(Worksheets(Rentabilidade).Cells(Linha, 2))  'rodar enquanto a coluna dos perfis não for vazia
        If Perfil = PerfilUsuario Then 'checa se o perfil do usuario é igual ao perfil do fundo
            AvaliaRisco = True
        End If
        Linha = Linha + 1
    Wend
    

End Function

Planilha1EP2.jpg

o código acima é o completo que fiz

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...