Documente Academic
Documente Profesional
Documente Cultură
Auditoria
Autores:
Realizao
Fundao Getulio Vargas
FGV Management
Todos os direitos em relao ao design deste material didtico so reservados
Fundao Getulio Vargas.
Todos os direitos quanto ao contedo deste material didtico so reservados ao(s)
autor(es).
ISBN -
ii
Sumrio
1. PROGRAMA DA DISCIPLINA 1
1.1 Ementa 1
1.2 Carga Horria Total 1
1.3 Objetivos 1
1.4 Contedo Programtico 2
1.5 Metodologia 2
1.6 Critrios de Avaliao 2
1.7 Bibliografia Recomendada 3
Currculo Resumido dos Professores 4
2. MEDIDAS DE INVESTIMENTO 5
3. RISCO E ESTATSTICA 27
4. INTERVALO DE CONFIANA 32
5 DERIVATIVOS 34
6. FERRAMENTAS DE VBA 51
iii
ANEXO I 76
ANEXO II 79
ANEXO III 81
ANEXO IV 82
REFERNCIAS BIBLIOGRFICAS 91
iv
1. Programa da Disciplina
1.1 Ementa
Apresentar as principais medidas de anlis e de inves timento com e sem risco. Alg uns
conceitos de economia, estatstica, finanas e risco sero explicitados para integrar as
habilidades e competncias necessrias anlise inte grada de um projeto de
investimento, bem como ferramentas de VBA.
1.3 Objetivos
Desenvolver a habilidade de utilizar as principais medidas de anlise de
investimento (payback, payback corridigo, VPL, TIR, TIR Modificada, IL e outras);
Integrar conceitos de outras reas (economia, estatstica, finanas e risco) na
projeo de fluxos;
Prospectar os aspectos relevantes de um projeto que exigiro tratamento
pormenorizado na projeo dos fluxos.
1.5 Metodologia
25% do curso ser expositivo conceitual com aulas tericas. 50% do curso ser
laboratorial com exerccios realistas a serem implementados. 25% do curso ter estudos
de casos especficos que sejam relevantes aos alunos.
ROSS, Stephen A., WESTERFIELD, Randolph W., JAFFE, Jeffery F.. Administrao
Financeira Corporate Finance. So Paulo: Atlas, 2002, 2 edio.
Anlise de projetos de
investimento (API)
Professor Luiz Jurandir Simes de Arajo
Introduo : 1
Introduo : 2
Introduo : 3
Payback Simples
Payback (perodo de recuperao do capital):
- o mnimo perodo de tempo necessrio para
recuperar o investimento feito sem considerar o
custo de capital, ou seja, mantendo-o constante
nominalmente.
Introduo : 5
Introduo : 6
Payback Simples
Vantagens e desvantagens do payback
Desvantagens:
Ignora as peculiaridades do fluxo de caixa
Ignora o valor do dinheiro no tempo;
uma medida simples e til para projetos igualmente
simples, mas inadequada para projetos como fluxos
mais complexos e longos
Introduo : 7
Introduo : 8
Exerccio : analise as 4
alternativas usando o payback
simples
Data Alternativa A Alternativa B Alternativa C Alternativa D
Investimento inicial 0 100.000 100.000 100.000 100.000
1 10.000 20.000 80.000
2 10.000 20.000
3 10.000 20.000 50.000
4 10.000 20.000 20.000 10.000
5 10.000 20.000 10.000 10.000
6 10.000 20.000 10.000 10.000
7 10.000 20.000 20.000 10.000
8 10.000 20.000 20.000 10.000
9 10.000 20.000 20.000 10.000
10 10.000 20.000 20.000 10.000
Introduo : 9
Introduo : 10
Payback Corrigido
Vantagens e desvantagens do payback
corrigido
Vantagens:
Acaba sendo um teto de tempo mximo aceitvel
empresa considerando o valor do dinheiro no tempo
H entre o tempo e o risco uma certa proporcionalidade
(no necessariamente linear), portanto acaba sendo
uma medida de risco;
Facilmente calculvel
Muito comum em alguns mercados, por exemplo, donos
de restaurante que precisam de mais tempo para
recuperar o investimento inicial.
Introduo : 11
Desvantagens:
Ignora as peculiaridades do fluxo de caixa
uma medida simples e til para projetos igualmente
simples, mas inadequada para projetos como fluxos
mais complexos e longos
Introduo : 12
Payback Corrigido
Critrio de seleo de altenativa de
investimento usando Payback corrigido
Introduo : 13
Introduo : 14
Introduo : 15
Desvantagens:
Usa o lucro contbil ao invs do fluxo de caixa
Ignora o valor do dinheiro no tempo
Ignora as pecualiridades dos fluxos
Introduo : 16
Introduo : 17
Introduo : 18
Introduo : 19
Introduo : 20
Introduo : 21
Vantagens:
Considera o valor do dinheiro no tempo
calculado no mesmo jeito do clculo do valor
adicionado do acionista
Desvantagens:
Clculo mais complexo
Exige definir uma taxa de desconto
Introduo : 22
VPL
Critrio de seleo de alternativa de
investimento usando VPL
Introduo : 23
Introduo : 24
Introduo : 25
Introduo : 26
Introduo : 28
TIRM
Critrio de seleo de alternativa de
investimento usando TIR
Introduo : 31
Introduo : 32
IL vantagens e desvantagens
Vantagens:
Considera o valor do dinheiro no tempo
Pondera a relao VPL com desembolsos,
oferecendo maior sensibilidade analtica nos
projetos que exigem desembolsos constantes
Desvantagens:
Clculo mais complexo
H a suposio implcita que todos as entradas
lquidas positivas so remuneradas a mesma
taxa de retorno
Introduo : 33
Introduo : 34
Introduo : 36
Introduo : 37
Introduo : 38
Decises de investimentos
( em cenrio de certeza )
Pode haver diferentes classificaes. Veja o grfico
extrado do livro Valuation do Copeland
Introduo : 39
Introduo : 40
Taxa de reinvestimento
VPL x TIR
Est implcito no mtodo VPL o reinvestimento
das entradas lquidas a uma taxa igual a taxa
de desconto selecionada
Introduo : 41
Introduo : 42
VPL x TIR
VPL x TIR:
Retornos de taxas mltiplas:
A metodologia da TIR
pode resultar em mais
de uma taxa de retorno
se o fluxo mudar de
sinal mais de uma vez.
Introduo : 43
Distribuio Normal
-4 -2 0 2 4
Suponha agora que o objeto extrado em primeiro lugar seja reposto na urna e, a
seguir, um segundo objeto seja extrado, somamos ento a os valores do primeiro e
segundo objeto e dividimos por dois, chamaremos esse valor de Y. Desta forma a
probabilidade de Y ser 0 de 0,04 ou 4%, de Y ser 1/2 de 0,12 ou 12% , de Y ser 1
0,29 ou 29%, de Y ser 3/2 0,3 ou 30% e de ser 2 0,2 ou 20%, como apresentado na
Tabela 1:
Y 0 1/2 1 3/2 2
Probabilidade 0,04 ou 4% 0,12 ou 12% 0,29 ou 29% 0,3 ou 30% 0,2 ou 20%.
1
H 95,44% de probabilidade de que um valor esteja entre no intervalo de dois desvios da mdia. Nesse
exemplo, isso significa que um valor entre 2 e 2 tem 95,44% de chances de ocorrer.
V a ri ve l X
60
50
40
% 30
20
10
0
0 .0 0 .5 1 .0 1 .5 2 .0
Finalmente, suponha que depois que o segundo objeto tenha sido tambm
reposto, um terceiro objeto seja extrado e seu valor seja registrado. Criamos uma
varivel chamada Z, que a soma do primeiro, segundo e terceiro objeto dividido por
trs, as probabilidades dos valores de Z so apresentadas na Tabela 2 e sua distribuio
representada na Figura 3.
V a ri ve l Y
32
28
24
20
% 16
12
0
0 .0 0 .5 1 .0 1 .5 2 .0
V ari vel Z
30
25
20
% 15
10
0
0 .0 0 .5 1 .0 1 .5 2 .0
O Hedger um agente econmico que no quer assumir o risco e acaba vendendo esse
risco para outro agente que est mais apto ou disposto a assumi-lo. O agente que assume
o risco o Especulador. Aqui importante se realar que o especular no o mesmo
que manipular ou usurpar o mercado. Especular comprar um risco por acreditar que
vale a pena. (Lembra-se da relao Risco x Retorno?). O especulador, em geral, tem um
perfil de risco mais arrojado e admite assumir riscos maiores em nome da possibilidade
de obter resultados maiores.
Um Arbitrador um agente que opera rapidamente, no assume riscos por muito tempo
e prioritariamente procura distores de preos entre os compradores e os vendedores.
O Arbitrador sobretudo, um agente econmico que d liquidez ao mercado.
Para se construir uma curva pr, a partir de 30/05/2003, para as seguintes datas:
As taxas efetivas esperadas para os perodos que coincidem com os dias de vencimentos
dos contratos so dadas por:
De 30/05/2003 at 01/06/2003:
100000
1 = 0,081%
99919
De 30/05/2003 at 01/07/2003:
100000
1 = 1,745%
98285
De 30/05/2003 at 02/08/2003:
De 30/05/2003 at 15/06/2003:
9
1 + 1,745% 21
1,0081 1 = 0,791%
1 + 0,081%
De 30/05/2003 at 19/07/2003:
12
1 + 3,536% 22
1,01745 1 = 2,718%
1 + 1,745%
De 30/05/2003 at 17/08/2003:
11
1 + 5,380% 22
1,03536 1 = 4,454%
1 + 3,536%
Desta forma, as taxas de juros efetivas esperadas para as datas estabelecidas sero:
Taxa no
Prazo Pr x DI
perodo
184 22.89 11.11%
210 23.24 12.96%
240 23.76 15.27%
270 24.16 17.62%
301 23.99 19.70%
330 24.13 21.91%
364 24.22 24.52%
Desta forma, determinar uma curva de dlar futuro para as datas descritas abaixo.
Como os contratos j esto cotados em R$/US$, o valor do dlar futuro esperado para
os dias de vencimento dos contratos, sero as prprias cotaes divulgadas na tabela
acima. No caso das datas entre os vencimentos, o valor do dlar futuro ser dado por:
Neste tpico sero ilustrados dois processos de construo de uma curva de cupom
cambial: utilizando uma relao entre DI Futuro e Dlar Futuro e atravs dos contratos
de swap de pr contra dlar (Swap DIxDol).
(1 + Pr e) vt
(TaxaCupom) vt = 1 x100 ,
(1 + C) t
v
em que
(1+ Pre) vt a taxa de juros esperada de t a v;
Curva de cupom cambial com swaps: podemos utilizar diretamente as taxas de cupom
cambial divulgadas nos contratos de swaps de dlar contra DI (DIxDlar). A tabela
abaixo apresenta as taxas para o dia 30/05/2003.
Prazo Dol x DI
30 9.99%
60 8.70%
91 9.02%
120 10.23%
150 11.06%
184 11.50%
210 11.90%
240 12.38%
270 12.78%
301 12.85%
330 13.07%
364 13.28%
Neste caso, as taxas so anuais, lineares e com base 360. Desta forma, a taxa
efetiva em cada perodo ser dada por
Taxalinear.Diascorridos
Taxaefetiva = .
360
A tabela abaixo apresenta o valor das taxas a partir do prazo de 120 dias corridos.
Yh ,i
Dado que se conhea a taxa efetiva, , em apenas alguns pontos no
Y
tempo, i = 1, 21, 42 K , n , uma taxa intermediria a eles, h ,i + x , poder ser determinada
da forma
onde
h a data atual a partir da qual a curva projetada;
x o nmero de dias contados a partir de i, i x k ;
Matematicamente teremos
Valor Re sgate
MtM t = ,
(1 + i m )
n
Pn
Ci
MTM t = + (1 + TX 0t ) ,
n
1 + yt 1 + yt
i
i =3
MTM t = MTM
i =3
i
t ,
sendo
Fi
MTM it = (1 + TX 0t ) ,
1 + y it
Com a frmula acima podemos calcular o VP do fluxo usando uma curva de juros ao
invs de usarmos uma taxa nica para todos os vencimentos do fluxo.
MtM t =
(op
) (
Valor Re sgate P0 1 + I 0,v VCt 1 + I t ,v
= =
op
)
( )
1 + I tm,v (
1 + I tm,v ) (
1 + I tm,v )
,
onde:
P0 o principal da operao;
VCt o valor na curva do ttulo na data t;
I top,v a taxa da operao, efetiva no perodo entre as datas t e v;
Opes
+c + vp(K) = +p + S - D
*vale mais a pena vender a opo americana que exerc-la. Exerc-la s se ganha o
valor intrnseco, vend-la h um prmio adicional.
B: +p +S = 33,25
A = +c +vp(K)
Hedge
O hedge do risco de mercado muito simples de entender e usar. Imagine uma empresa
que tenha passivos em dlar e receitas em reais. Se a empresa no conseguir repassar
aos preos de seus produtos aumentos do dlar haveria um desequilbrio patrimonial
flagrante. Com os derivativos h como compensar essa variao usando por exemplo:
Dlar futuro
Por outro lado, se o dlar casse para R$ 2,8 o passivo passaria de R$ 3,2
milhes para R$ 2,8 milhes, em compensao como est comprado em dlares futuros
perderia de ajustes dirios R$ (2,8 3,2)*1 milho = - R$ 400 mil que exatamente o
valor da diminuio do passivo. Com os dlares futuros, o passivo ficaria travado em
R$ 3,2 milhes independente da cotao do dlar.
Ativo Passivo
Comprar call de dlar com preo de
exerccio a 3,2 Passivo U$ 1 milho
(nocional de U$ 1 milho)
No hedge com opes h uma despesa inicial que o prmio pago na compra da opo,
mas em compensao no h perdas no vencimento. No vencimento o resultado ser ou
zero ou um nmero positivo max(0 ; S-K) para calls e max(0;K-S) para puts.
A programao nada mais que uma seqncia finita de comandos interpretados por
um computador para a execuo de um objetivo / tarefa. Os conjuntos de comando
constituem os programas (ou algoritmos).
Antes de iniciar seu aprendizado, preciso saber que macros ou sub-rotinas tambm
so conjuntos de instrues transmitidas ao computador, como qualquer outro
programa, para obter um resultado. Para que as macros criadas em VBA sejam
adequadamente identificadas, elas devem obrigatoriamente receber um nome nico que
indicado logo no incio do procedimento aps a instruo SUB. Devem ainda ser
encerradas obrigatoriamente com a instruo END SUB. Entre as duas instrues so
escritos os statements, ou grupos de instrues a serem executados pelo computador. A
sintaxe simplificada da instruo SUB pode ser vista abaixo:
Para seguir os exemplos e fazer os exerccios propostos neste livro, ser necessrio
acessar o Editor do VBA. A descrio de como acess-lo tanto por usurios do MS
Excel 2007 como do MS Excel 2003 encontra-se no Anexo I.
DICA
A sintaxe completa de instrues do VBA pode ser vista quando voc
coloca o cursor do mouse sobre a palavra desejada e pressiona F1 para
acessar a ajuda do programa.
No Anexo I, voc encontra ainda a descrio de que fazer para que o MS Excel permita
a execuo de macros, caso esta opo no tenha ainda sido habilitada no seu
computador.
Da mesma forma que o computador, voc pode utilizar os pedaos de memria para
guardar seus prprios dados. Para isso, preciso dar-lhes nomes.
A diferena bsica entre as variveis e constantes em que voc vai guardar informaes
que:
- nas variveis, os dados armazenados podero variar durante o procedimento; e
- nas constantes, os dados no podero ser alterados.
Daqui por diante, quando mencionarmos variveis, voc dever considerar que o
mesmo se aplica s constantes, e caso no se aplique, voc ser alertado para isso.
Da mesma forma, voc pode criar uma constante na qual armazenar o nome da
empresa corretora que trabalha na administrao da carteira de aes e que no tem
previso de ser alterado.
Antes de armazenar qualquer dado, preciso criar as variveis que sero usadas por
seus procedimentos. Para isso preciso definir para cada uma um nome nico e as
caractersticas. Somente ento ser possvel o armazenamento de dados.
O tipo de dado de uma varivel define no s o tipo de contedo que poder ser
armazenado, mas tambm outras caractersticas particulares, como a quantidade
especfica de espao reservado para armazenamento. Por isso, diferentes linguagens de
programao estabelecem diferentes tipos de variveis. Os nomes e as caractersticas
dos tipos de varivel podem divergir de uma linguagem de programao para outra e
preciso conhecer pelo menos um mnimo para poder trabalhar eficientemente com eles.
As variveis do tipo integer so usadas para armazenar nmeros inteiros entre -32768 e
+32768 e devem servir para o primeiro caso. Se o nmero de aes for superior (ou
inferior) a este, pode-se usar o tipo long, que aceita nmeros inteiros entre + e
2.147.483.648 (embora requeira o dobro do espao da memria).
Para o segundo caso, voc poder usar as variveis do tipo single, que armazenam
valores negativos de -3,402823E38 a -1,401298E-45, e positivos entre 1,401298E-45 e
3,402823E38, em ambos os casos com vrgula flutuante.
onde o termo nome da varivel deve ser substitudo pelo nome escolhido e tipo pelo
tipo apropriado.
Veja o exemplo:
Dim N as integer
onde o termo nome da constante deve ser substitudo pelo nome escolhido e expresso
pelo dado a ser armazenado (por exemplo um texto ou valor). Observe que a declarao
do tipo de constante no obrigatria, podendo ser definida.
Para praticar, declare uma varivel de nome R na qual ser armazenado o valor dos
recursos monetrios disponibilizados pelo cliente para a compra de aes. Depois
declare uma outra, de nome C onde ser armazenado o custo individual das aes da
carteira.
Lembre que toda macro ou sub-rotina deve ser iniciada pelo comando SUB com o nome
da macro seguido de abre e fecha parntesis e encerrada pelo comando END SUB.
EXERCCIO 2:
Identifique quais as constantes e variveis declaradas nas instrues abaixo e com base
nos tipos de dados do anexo II diga se os tipos escolhidos parecem adequados:
a. Dim GNP as double
b. Const NomeCliente = Correia Ltda.
c. Dim CustoUnitarioDaAcao as long
EXERCCIO 3:
Como atividade complementar, pesquise quais as regras fundamentais que devem ser
seguidas para a criao de nomes de variveis no VBA.
Como vimos, para a declarao de uma varivel (ou constante), preciso definir seu
nome e suas caractersticas e seguir regras especficas para tal. Somente a partir da, o
usurio poder armazenar dados, e a esse armazenamento que chamamos de
atribuio. Assim, em linguagem de programao, a atribuio a vinculao de dados
especficos a uma varivel. A sintaxe de atribuio corresponde a:
No exemplo anterior foi criada a varivel N para armazenar o nmero de aes de uma
carteira. Supondo que voc guardasse nela o valor 2000, ao invs de dizer que voc
inseriu um valor 2000 na varivel N, voc deveria dizer que atribuiu o valor 2000
quela varivel.
Mas, uma vez feito isso, o nmero anterior de aes (2000) ter sido descartado e no
haver como resgatar aquela informao.
EXERCCIO 4:
O custo unitrio das aes da carteira que est sendo trabalhada de R$5,00 e o cliente
disponibilizou R$2.000,00 para a compra de aes. Atribua os valores s respectivas
variveis.
importante mencionar que nem todas as variveis armazenam uma nica informao
elementar que no possa ser decomposta em entidades mais simples, (como as variveis
elementares do tipo integer ou single).
Assim, um vetor de 10 posies e nome V pode ser declarado por meio do comando
DIM, seguido do nome do vetor, do ndice referente ao nmero mximo de posies
entre parntesis e do tipo dos elementos que o compe, ou seja:
Para atribuir valores s diversas posies de um array, deve-se indicar a qual posio se
deseja atribuir valor.
Por exemplo, a atribuio do valor 100 segunda posio do vetor que acabamos de
descrever ficaria assim:
V(2) = 100
Declare um vetor de oito posies do tipo single que servir para armazenar os valores
de oito tipos de aplicaes de uma carteira de investimentos de um cliente.
EXERCCIO 6:
EXERCCIO 7:
N = 2000
N = N + 300
Da mesma forma que no exemplo anterior, o computador interpreta esta instruo como
sendo a atribuio do valor verificado no segundo termo da equao (N + 300) ao
primeiro termo (varivel N).
No esquea de que o nmero 2000 ter sido sobrescrito, no podendo mais ser
recuperado.
Se for necessrio manter um histrico de operaes, dever ser montada uma lgica um
pouco mais complexa, conforme veremos em exerccios mais adiante, guardando em
local diverso as vrias alteraes.
Vale lembrar que a relao de operadores permitidos nas instrues do VBA e sua
precedncia encontram-se no anexo IV.
EXERCCIO 8:
Suponha que o custo unitrio das aes da carteira que est sendo trabalhada subiu em
6.8 Uso do If
Em atividades como a compra e venda de aes para uma carteira, bastante comum
existirem certas limitaes como, por exemplo, a disponibilidade financeira para sua
aquisio. O operador deve verificar o capital disponvel antes de executar a compra e,
somente realizar a operao se houver recursos.
Para que um algoritmo possa fazer este tipo de teste condicional, usa-se a instruo IF,
palavra de origem inglesa e que quer dizer se. Ele usado juntamente com a instruo
THEN e eventualmente tambm com ELSE.
If condio Then
[statements]
Else
[elsestatements]
End If
importante notar que toda instruo do tipo IF deve ser encerrada pelo comando END
IF para que o programa identifique onde parar as instrues relativas ao teste.
DICA
A endentao uma forma visual e bastante til de separar grupos de instrues em
um procedimento. Repare que entre a instruo de incio e fim do teste lgico (If e End
if) as linhas de instruo do procedimento so escritas com margem maior. Esta
endentao torna mais fcil identificar incio e fim de instrues, testes lgicos e
operaes recursivas entre outros, particularmente quando existem instrues aninhadas
(tpico a ser visto oportunamente).
A endentao largamente usada em todas as linguagens de programao.
EXERCCIO 9:
Como o custo unitrio das aes da carteira que est sendo administrada subiu para
R$7,00 antes de a compra ter sido efetivada, utilize um teste condicional e verifique se a
compra seria realizada.
6.9 Ciclos
Vale dizer que os testes condicionais podem ser realizados de forma repetitiva desde
que a seqncia de instrues esteja inserida em um ciclo. A esta condio chamamos
de aninhamento.
While condio
[statements]
Wend
onde condio a expresso que ser avaliada como falsa ou verdadeira; e statements
so os grupos de instrues a serem seguidas enquanto for verdadeira a condio
testada.
Imagine que a carteira de investimentos de um cliente tenha, por exemplo, oito tipos
diferentes de aplicaes. Em cada tipo de aplicao h diferentes valores monetrios
aplicados e voc precisa calcular qual o valor total desta carteira.
Seguindo a lgica que voc j conhece, sem o uso de ciclos, seria necessrio escrever
uma seqncia de instrues similar a esta para obter o total:
...
Dim V(8) as single
Dim Total as single
V(1) = 1500
V(2) = 2000
V(3) = 2500
V(4) = 3000
V(5) = 3500
V(6) = 4000
V(7) = 4500
A alternativa ser montar um ciclo com o comando while em que a instruo seria
repetida, mas sem a redigitao das linhas de comando. Para isso ser criada uma nova
varivel que servir como um contador. O resultado ficar assim:
...
Dim V(8), Total as single
Dim i as byte
V(1) = 1500
V(2) = 2000
V(3) = 2500
V(4) = 3000
V(5) = 3500
V(6) = 4000
V(7) = 4500
V(8) = 5000
Total = 0
Em seguida o programa atribuir a i, que neste momento igual a 1, este mesmo valor
acrescido de 1, ou seja, 2. Agora o programa encontra a marca de fim do ciclo, dada
pela instruo Wend e retorna primeira linha do ciclo.
A varivel i agora vale 2, mas ainda menor ou igual a 8, por isso o programa considera
que a condio i<=8 verdadeira e volta a executar as instrues contidas no ciclo at
encontrar de novo o indicador de fim, ou seja, a instruo Wend.
Neste segundo ciclo, o valor anterior do Total que era 1500 acrescido do valor da
posio 2 do vetor, ou seja, 2000, passando a armazenar 3500. Na sequncia, o contador
i assume o valor 3.
Note que, a cada novo ciclo, o valor anterior do Total sobrescrito e perdido, sendo
substitudo pelo novo. Da mesma forma, a varivel i acrescida de 1 sobrescrevendo o
Assim, o programa segue executando o mesmo ciclo vrias vezes, e o faz, como vimos
at que a condio no mais se verifique. Quando isso acontece, o computador ignora
todas as linhas do ciclo e prossegue executando as instrues posteriores a ele.
EXERCCIO 11:
Encontre uma forma de atribuir os valores definidos para o vetor V utilizando um ciclo
com a instruo while e seguindo o exemplo deste tpico. Para isso, substitua as
instrues necessrias da macro do exerccio 10.
DICA
As primeiras tentativas de criar ciclos parecem sempre mais difceis. Para ajud-lo
no incio, sugerimos que sejam escritas as instrues que voc usaria sem a
utilizao da lgica dos ciclos. Com base nisso voc deve procurar perceber as partes
comuns (repetitivas) das instrues e as partes que se alteram nos comandos. A
seguir, procure identificar se h uma cadncia nas alteraes das instrues. Somente
ento pense em como montar o ciclo.
No exerccio anterior, voc pde perceber que o uso do while requer um certo nvel de
compreenso de lgica e que seu uso adequado pode otimizar bastante os trabalhos
repetitivos, particularmente na rea financeira.
Para aqueles que j utilizam as planilhas do Excel, parece natural alterar dados de uma
planilha quando ocorre alguma mudana de cenrio, mas alterar manualmente as macros
correspondentes representa uma duplicidade de trabalho. Isso no seria nada prtico, e
praticidade o grande diferencial do uso de macros.
Para evitar isso, voc pode recorrer ao recurso de leitura de dados diretamente da
planilha. Dessa forma, quando os dados forem alterados na planilha, ao processar
novamente a sua macro, sero lidos os novos dados, devolvendo assim o novo resultado
sem necessidade de redigitao (e reduzindo a possibilidade de erros nesse processo).
Para a leitura de dados a partir de planilhas, o VBA atribui os dados encontrados nelas a
variveis das macros, sem a necessidade de digitao direta.
Para isso, voc ver a seguir algumas das alternativas do VBA em termos de atribuio
de dados a variveis com base na leitura de planilhas e pastas do Excel. Isso requer
que voc conhea um pouco sobre as colees e objetos do Excel para o VBA.
workbook atual
range de clula
range de 4 clulas
aba da worksheet
Usando o exemplo da figura 3, voc poderia ento se referir a uma planilha do arquivo
que se encontra aberto da seguinte forma:
Worksheets(Plan1)
ou
Worksheets(1)
Workbooks(Pasta1).Worksheets (Plan1)
e
Workbooks(Pasta2).Worksheets (Plan1)
Perceba que, sempre que referenciados pelo nome, planilhas e arquivos devem ser
sempre descritos entre parntesis e aspas duplas. Quando a planilha referenciada pela
posio no arquivo, o nmero correspondente deve estar apenas entre parntesis.
O objeto range pode indicar uma clula, uma linha, uma coluna ou um conjunto de
clulas contendo um ou mais intervalos de clulas contguas. Veja:
Worksheets("Ex12").Range("B2")
Worksheets("Ex12").Range("B4:B8")
Worksheets("Ex12").Range("C4,C6,C8")
Na primeira linha, o intervalo definido refere-se a uma nica clula (B2). Na segunda
linha, o intervalo dado pelas clulas contguas de B4 at B8, e, na terceira linha, o
intervalo corresponde a trs clulas no contguas (C4, C6 e C8).
Repare que o intervalo dado pela identificao das clulas em termos de letra da
coluna e nmero da linha e sempre dentro de parntesis e aspas duplas.
Use vrgula como separador apenas quando estiver qualificando clulas ou intervalos
no contguos.
Cells(2,4)
Este comando indica a linha 2 da coluna 4 na planilha ativa, ou seja, a clula D2.
A vantagem do uso deste objeto que voc pode manipular as clulas indicando o
deslocamento desejado em relao clula indicada inicialmente.
Assim, se voc tivesse selecionado a clula D2, conforme sugerido no exemplo anterior,
poderia indicar a clula localizada h duas colunas para a direita na mesma linha da
seguinte forma:
i=4
Cells(2,i).select
Cells(2,i+2).select
Usar a varivel i em lugar da descrio explicita da coluna na segunda linha permite que
voc indique outras clulas pela descrio de sua posio relativa primeira clula
qualificada.
DICA
Se no houver uma indicao explcita do objeto, o Excel entender que voc se
refere ao objeto aberto (ou objeto atual), como um arquivo ou planilha. Voc pode
identificar a planilha em aberto no arquivo atual pela guia em branco (mesmo que
voc tenha alterado as cores das guias do arquivo). Na figura 3, a planilha ativa a
Plan1, j que as guias das demais planilhas tm fundos cinza.
Os objetos podem ter propriedades e procedimentos (e neste texto eles sero abordados
conforme a necessidade se apresente).
Cells(2,1).value = 7
Cells(2,2).formula = =+A1*2
Cells(2,2).font.italic= True
A propriedade value indica que est sendo atribudo um valor clula qualificada (A2),
enquanto a propriedade formula indica que clula vizinha (B2) ser atribuda a
frmula que se v entre aspas. J a propriedade font aplica uma definio especfica de
fonte ao intervalo.
Cells(1,1).Clear
Cells(3,2).AddComment "Ateno"
V(1) = Worksheets("Ex12").Range("D5").value
Caso se deseje que uma varivel armazene a frmula em vez do valor da clula, deve-se
substituir a propriedade value pela propriedade formula. E a instruo ficaria assim:
V(1) = Worksheets("Ex12").Range("D5").formula
Antes de executar esta instruo, necessrio alterar o tipo de varivel para que ela
aceite o tipo de dado a armazenar.
EXERCCIO 12:
Altere a macro do exerccio 11 para que os dados do vetor V (que contm os valores das
aplicaes da carteira do seu cliente) sejam lidos a partir da coluna D da planilha Ex12
(arquivo anexo).
EXERCCIO 13:
Altere a macro do exerccio 12 para que o resultado armazenado na varivel Total seja
exibido na clula D13 da planilha Ex13.
Com este ferramental, ser possvel implementar diversas macros que iro simplificar o
trabalho de simulao de cenrios para a anlise de investimentos.
Observe que, ao abrir o programa, abaixo das barras de menus, a janela do programa
- para evitar que suas macros deixem de ser executadas, clique no boto
Habilitar Macros. (se voc fechou inadvertidamente a janela ou selecionou
Desabilitar Macros por engano, feche o arquivo e reabra, selecionando a opo
correta da janela);
- eventualmente a janela pode no aparecer e, neste caso voc ver o Aviso de
Segurana logo abaixo das barras de ferramentas como mostrado na figura 6;
- neste caso, selecione o boto Opes fazendo abrir uma janela similar da
figura 5 e, ento clique em Habilitar Macros.
Tamanho de
Tipo de dados Intervalo
armazenamento
Byte 1 byte 0 a 255
Boolean 2 bytes True ou False
Integer 2 bytes -32.768 a 32.767
Long (inteiro longo) 4 bytes -2.147.483.648 a 2.147.483.647
Single -3,402823E38 a -1,401298E-45 para
(vrgula flutuante de 4 bytes valores negativos; 1,401298E-45 a
preciso simples) 3,402823E38 para valores positivos
-1,79769313486232E308 a -
Double
4,94065645841247E-324 para
valores negativos;
(vrgula flutuante de 8 bytes
4,94065645841247E-324 a
preciso dupla)
1,79769313486232E308 para
valores positivos
Currency -922.337.203.685.477,5808 a
8 bytes
(inteiro escalado) 922.337.203.685.477,5807
+/-
79.228.162.514.264.337.593.543.95
0.335 sem ponto decimal; +/-
7,9228162514264337593543950335
Decimal 14 bytes
com 28 casas decimais direita; o
menor nmero diferente de zero +/-
0,0000000000000000000000000001
.
De 1 de Janeiro de 100 at 31 de
Date 8 bytes
Dezembro de 9999
Object 4 bytes Qualquer referncia a Object
String
10 bytes +
comprimento da
(comprimento da De 0 at aproximadamente 2 bilhes
seqncia de
varivel)
caracteres
String Comprimento da
seqncia de De 1 at aproximadamente 65.400
(comprimento fixo)
caracteres
Variant Qualquer valor numrico at o
16 bytes
(com nmeros) intervalo de um Double
22 bytes +
Variant comprimento da O mesmo intervalo que String de
(com caracteres) seqncia de comprimento varivel
caracteres
Definido pelo usurio Nmero O intervalo de cada elemento o
requerido por mesmo que o intervalo do seu tipo
(usando Type)
elementos de dados.
REGRAS DE PRECEDNCIA
ENTRE OPERADORES
Da maior para a menor precedncia:
Por exemplo: a expresso 3+2*5+4 ser calculada como 3+(2*5)+4, ou seja, primeiro
ser feita a multiplicao (2*5 = 10) e ento somados os valores 3 e 4 (3+10+4 = 17).
RESPOSTA DOS
EXERCCIOS PROPOSTOS
EXERCCIO 1:
Declarao de uma varivel de nome R para armazenar o valor dos recursos monetrios
disponibilizados pelo cliente para a compra de aes e declarao de uma outra varivel
de nome C para armazenar o custo individual das aes da carteira:
Sub Ex_1_Carteira_de_Acoes
Observaes:
Dim N as integer VARIVEL DESCRIO
Dim R as single N Nmero de aes da carteira
R Recursos ($)
Dim C as single
C Custo unitrio da ao
End sub
EXERCCIO 2:
Identificao de constantes e variveis declaradas nas instrues e, com base nos tipos
de dados do anexo II, explicao sobre a adequao dos tipos escolhidos:
EXERCCIO 3:
EXERCCIO 4:
Sub Ex_4_Carteira_de_Acoes
Dim N as integer
Dim R, C as single
N = 2000
R = 2000
C=5
End sub
Declarao de um vetor de 8 posies do tipo single que servir para armazenar valores
das vrias aplicaes de uma carteira de investimentos
Sub Ex_5_Carteira_de_Acoes
Dim N as integer
Dim R, C as single Observaes:
VARIVEL DESCRIO
Dim V(8) as single
N Nmero de aes da carteira
N = 2000 R Recursos ($)
R = 2000 C Custo unitrio da ao
V(8) Valores das aplicaes
C=5
End sub
EXERCCIO 6:
Sub Ex_6_Carteira_de_Acoes
EXERCCIO 7:
EXERCCIO 8:
Sub Ex_8_Carteira_de_Acoes
Dim N as integer
Dim R, C as single
Observaes:
Dim V(8) as single
VARIVEL DESCRIO
N = 2000 N Nmero de aes da carteira
R = 2000 R Recursos ($)
C Custo unitrio da ao
C=5 V(8) Valores das aplicaes
V(1) = 1500
V(2) = 2000
V(3) = 2500
V(4) = 3000
V(5) = 3500
V(6) = 4000
V(7) = 4500
V(8) = 5000
EXERCCIO 9:
Sub Ex_9_Carteira_de_Acoes
Dim N as integer
Dim R, C as single
Dim V(8) as single Observaes:
VARIVEL DESCRIO
N = 2000 N Nmero de aes da carteira
R = 2000 R Recursos ($)
C Custo unitrio da ao
C=7
V(8) Valores das aplicaes
V(1) = 1500
V(2) = 2000
V(3) = 2500
V(4) = 3000
V(5) = 3500
V(6) = 4000
V(7) = 4500
V(8) = 5000
If R > C*300 Then
N = N + 300
End if
End sub
EXERCCIO 10:
Sub Ex_10_Carteira_de_Acoes
V(5) = 3500
V(6) = 4000
V(7) = 4500
V(8) = 5000
End sub
Duas opes de atribuio dos valores definidos para o vetor V utilizando ciclos com o
comando while.
Observaes:
VARIVEL DESCRIO
Sub Ex_11a_Carteira_de_Acoes() N Nmero de aes da carteira
i Contador genrico
Dim N, i As Integer R Recursos ($)
Dim R, C As Single C Custo unitrio da ao
Dim V(8), Total As Single V(8) Valores de aplicaes
Total Total das aplicaes
N = 2000
R = 2000 Sub Ex_11b_Carteira_de_Acoes()
C=5
Dim N, i As Integer
V(1) = 1500
Total = 0 Dim R, C As Single
i=2
Dim V(8), Total As Single
While i <= 8 N = 2000
V(i) = V(i - 1) + 500
R = 2000
i=i+1
Wend C=5
V(1) = 1500
i=1
Total = V(1)
While i <= 8
i=2
Total = Total + V(i)
i=i+1 While i <= 8
Wend
V(i) = V(i - 1) + 500
End Sub Total = Total + V(i)
i=i+1
Wend
End Sub
EXERCCIO 12:
Altere a macro do exerccio 11 para que os dados do vetor V (que contm os valores das
aplicaes da carteira do seu cliente) sejam lidos a partir da coluna D da planilha Ex12
(arquivo anexo).
Dim N, i As Integer
Dim R, C As Single
Dim V(8), Total As Single
N = 2000
R = 2000
C=5
Total = 0
i=1
While i <= 8
V(i) = Worksheets("Ex12").Cells(4 + i, 4).Value
Total = Total + V(i)
i=i+1
Wend
End Sub
EXERCCIO 13:
Altere a macro do exerccio 12 para que o resultado armazenado na varivel Total seja
exibido na clula D13 da planilha Ex13.
Sub Ex_13_Carteira_de_Acoes()
Dim N, i As Integer
Dim R, C As Single
Dim V(8), Total As Single
N = 2000
While i <= 8
V(i) = Worksheets("Ex12").Cells(4 + i, 4).Value
Total = Total + V(i)
i=i+1
Wend
Worksheets("Ex13").Range("D13").Value = Total
End Sub