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
A tabela está anexada também.
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
A tabela está anexada também.