Notifications
Clear all

Macro em planilha financeira

7 Posts
3 Usuários
0 Reactions
1,614 Visualizações
(@matmenega)
Posts: 0
New Member
Topic starter
 

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

Para isso, desenvolvi o programa abaixo, mas penso que não está correto:

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"

O que está incorreto? Obrigado

 
Postado : 29/05/2017 2:11 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite matmenega

Como você é novato, para facilitar a tua participação no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

Sem anexar uma planilha de exemplo, fica mais dificil do pessoal ajudar (Arquivos devem estar compactados, conforme as regras do fórum).

[]s

Patropi - Moderador

 
Postado : 29/05/2017 3:48 pm
(@matmenega)
Posts: 0
New Member
Topic starter
 

Boa noite, obrigado pela atenção, segue abaixo a imagem exemplo, pois nao estou conseguindo adicionar minha planilha:

 
Postado : 29/05/2017 7:02 pm
(@brunoxro)
Posts: 0
New Member
 

Boa noite,

Isso é uma Prova?

Outra coisa, sua planilha deve ter mais de 1mb, por isso você não deve ter conseguido anexar. Delete alguns dados não importantes, compacte e anexe.

att,

 
Postado : 29/05/2017 8:18 pm
(@matmenega)
Posts: 0
New Member
Topic starter
 

Bom dia,

não, é apenas um exercício que estou encontrando dificuldades.

Salvei sem a macro que fiz e agora consegui anexar.

 
Postado : 30/05/2017 8:14 am
(@matmenega)
Posts: 0
New Member
Topic starter
 

a macro abaixo é a completa que fiz

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
 
Postado : 30/05/2017 7:11 pm
(@matmenega)
Posts: 0
New Member
Topic starter
 

alguem?

 
Postado : 31/05/2017 11:11 am