Jump to content
Fórum Script Brasil
  • 0

DUVIDA COM MACRO PLANILHA


Mateus Menegatti

Question

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."

 

Edited by Mateus Menegatti
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...