Apostilas de VBA para download

Olá Pessoal!

Estou passando por aqui só para avisar que disponibilizei na barra lateral do blog três apostilas de VBA para download.

Criei essas apostilas quando trabalhava na diretoria de Controladoria da Oi, para dar aula de VBA para algumas pessoas da minha equipe.

Usando os ensinamentos dessas apostilas, vocês conseguirão otimizar bastante o Excel, criando planilhas bem interessantes!

Espero que esse material seja de grande utilidade, principalmente para aqueles que estão iniciando no mundo do VBA!!!!

 

Abs, Dr. Excel

Gráfico Waterfall (em cascata) na Análise de Resultados – Horizontal e Vertical

Oi Pessoal!

Estou escrevendo esse post para mostrar como podemos utilizar o gráfico waterfall na análise Horizontal e Vertical das demonstrações financeiras, que são relatórios contábeis que apoiam a tomada de decisão nas empresas. Os demonstrativos mais importantes são: Demonstração de Resultados (DRE), Balanço Patrimonial e Fluxo de Caixa.

Nos exemplos abaixo, usarei apenas linhas da DRE.

Obs: vocês podem baixar o arquivo de suporte ao post, com os gráficos abaixo, no link Downloads ao lado – Gráfico Waterfall (em cascata).

Vamos lá…

Gráfico Waterfall (em cascata)

Podemos dizer que é um gráfico de colunas empilhadas, onde as séries do gráfico são compostas por uma base “invisível” e uma parcela visível que mostra a evolução / variação, por exemplo, de um item da demonstração financeira.

Análise Horizontal

A análise horizontal é utilizada na verificação da evolução no tempo dos itens das demonstrações financeiras, buscando determinar tendências e avaliar o atingimento de metas planejadas. Com esta análise podemos comparar os resultados contábeis obtidos durante o decorrer do ano com o orçamento projetado para o respectivo período.

Como exemplo, criei o waterfall abaixo para mostrar o impacto das variações de cada uma das linhas da DRE na comparação do resultado orçado com o resultado real de um período qualquer.

A partir deste gráfico conseguimos avaliar como as linhas da DRE impactaram o resultado apurado, ou seja, quais Ganhos e Perdas influenciaram no atingimento ou não da meta estabelecida (resultado orçado – primeira coluna).

Considerar as variações de receita e despesas na comparação orçado versus real como Perdas e Ganhos, significa que um aumento de receita, ou Ganho de Resultado, será representado no gráfico por uma área azul aumentando o patamar da sequência das colunas, e que uma queda da receita aparecerá como uma área vermelha diminuindo esse mesmo patamar. Para as despesas, o conceito válido é o inverso, ou seja, um aumento representa uma Perda de Resultado e uma queda de despesa (economia) um Ganho de Resultado.

Atenção: os valores de receita e despesas deste gráfico correspondem as variações do orçado vs real de cada uma das linhas. Ou seja, se orçamos R$ 100 milhões de receita e apuramos como real R$ 135 milhões, tivemos um Ganho de Resultado de +R$ 35 milhões, que aparecerá no gráfico como uma área azul no valor de R$ 35 Milhões.

Análise Vertical

Quanto à análise vertical, usamos para ter ideia da representatividade de um item da demonstração financeira em relação a outro que estabelecemos como parâmetro. Por exemplo, podemos verificar qual é o percentual gasto com despesa de pessoal em relação ao valor total de despesas de um determinado período.

A aplicabilidade dessa análise pode ser melhor visualizada no waterfall abaixo que criei como exemplo.

Este gráfico mostra a representatividade de cada uma das despesas em relação a receita usada como parâmetro, ou seja, partindo de 100% da receita, conseguimos avaliar quanto cada uma das “nossas despesas” consumiu até obtermos o resultado apurado, que nada mais é que a receita diminuída das despesas.

Além de ser útil para verificarmos se os patamares de despesas apurados (realizados) estão de acordo com o que planejamos, esse tipo de análise é muito interessante, por exemplo, para compararmos os gastos de produtos e áreas similares ou mesmo para efetuarmos benchmark com a concorrência, buscando mensurar a nossa eficiência operacional.

Abs, Dr. Excel

Comando Run – rodando uma macro a partir de outra

Oi Pessoal!

Vocês devem ter reparado que não atualizo o blog desde maio! Peço desculpas, mas estou fazendo uma pós-graduação no Coppead-UFRJ, que termina na próxima terça-feira, 16/08.

Bom, aproveitando que recebi alguns e-mails perguntando como rodar uma macro a partir de outra, resolvi retomar as atualizações do blog escrevendo esse post simples sobre o comando Run.

Este comando é realmente bem simples e muito útil!

Vamos supor que temos duas macros: “Principal” e “Secundária” e pretendemos que o VBA execute a segunda macro a partir da primeira. Para isso, basta utilizarmos a estrutura abaixo.

Sub Principal ( )

Run “Secundária”

End Sub

Abs Dr. Excel

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Funções de Data e Hora no VBA (Date, Time, Day, Month, Now, MonthName, Hour, DateDiff, DateAdd, Year, WeekDay, WeekDayName)

A Função Date

Retorna a data corrente do sistema, sem precisar de parâmetro.

Exemplo de código:

Sub Função_Date()

MsgBox Date()

End Sub

 A Função Time

 Retorna a hora corrente do sistema, sem precisar de parâmetro.

Exemplo de código:

Sub Função_Time()

MsgBox Time()

End Sub

 A Função Day

Retorna um número entre 1 e 31, indicando o dia do mês de um parâmetro informado.

Exemplo de código:

Sub Função_Day()

MsgBox Day(Date)

End Sub

 A Função Month

 Retorna um número entre 1 e 12, indicando o mês do ano de um parâmetro informado.

Exemplo de código:

Sub Função_Month()

MsgBox Month(Date)

End Sub

A Função Now

Retorna a hora e a data corrente do sistema, sem precisar de parâmetro.

Exemplo de código:

Sub Função_Now()

MsgBox Now()

End Sub

A Função MonthName

Esta Função recebe como parâmetro um número indicativo de um mês, retornando o nome correspondente por extenso ou de forma abreviada. A sintaxe é a seguinte: MonthName(número_do_mês) ou MonthName(número_do_mês, true) para nome abreviado.

Exemplo de código:

Sub Função_MonthName()

MsgBox MonthName(Month(Date))

End Sub

Ou ainda, com abreviação:

Sub Função_MonthName_abreviação()

MsgBox MonthName(Month(Date), True)

End Sub

Função Hour

Recebe uma hora como parâmetro e retorna um número entre 0 e 23, que indica a hora exata.

Exemplo de código:

Sub Função_Hour()

MsgBox Hour(Time)

End Sub

A Função DateDiff

Esta Função retorna o número de intervalos (em dias, trimestres, semestres, anos etc.) entre duas datas informadas. A sintaxe é a seguinte: DateDiff(intervalo, data1, data2).

Os valores para parâmetros de intervalo são os seguintes:

Parâmetro

Descrição

yyyy anos
q trimestres
m meses
y dias do ano (o mesmo que dias)
d dias
w semanas
ww semanas do ano (o mesmo que semanas)
h horas
n minutos
s segundos

Exemplo de código:

 Sub Função_DateDiff()

MsgBox DateDiff(“h”, “01/01/2008”, “13/05/2008”)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 3192.

A Função DateAdd

 Os valores para parâmetros de intervalo são os seguintes:

Parâmetro

Descrição

yyyy anos
q trimestres
m meses
y dias do ano (o mesmo que dias)
d dias
w semanas
ww semanas do ano (o mesmo que semanas)
h horas
n minutos
s segundos

 Esta Função retorna uma data futura, com base em uma data informada. A sintaxe é a seguinte:

DateAdd(intervalo, número_de_intervalos, data), onde o intervalo é o tipo do período a ser acrescentado e o número_de_intervalos a quantidade.

Exemplo de código:

 Sub Função_DateAdd()

MsgBox DateAdd(“m”, “1000”, “13/05/2008”)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o seguinte resultado:

 13/9/2091

A Função Year

Retorna o ano de uma determinada data informada como parâmetro.

Exemplo de código:

 Sub Função_Year()

MsgBox Year(Date)

End Sub

 A Função WeekDay

 Retorna o dia da semana de uma determinada data informada como parâmetro. A sintaxe é a seguinte: WeekDay(data), onde Domingo será considerado o primeiro dia, ou WeekDay(data, prim_dia_semana), onde é indicado o dia da semana a ser considerado como o primeiro.

Exemplo de código:

Sub Função_WeekDay()

MsgBox WeekDay(“13/05/2008”)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 3 como resultado.

 Ou ainda, com parâmetro de alteração do primeiro dia padrão (Domingo):

 Sub Função_WeekDay()

MsgBox WeekDay(“13/05/2008”,2)

End Sub

 Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 2 como resultado.

 A Função WeekDayName

Retorna o nome da semana relacionado a um número informado como parâmetro, podendo ser abreviado, caso o segundo parâmetro da Função seja True.

Exemplo de código:

 Sub Função_WeekDayName()

MsgBox WeekDayName(“5”,True)

End Sub

Ao ser executado, o código acima retornará uma caixa de mensagem com o texto qui.

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Funções Matemáticas no VBA (Abs, Atn, Cos, Exp, Log, Rnd, Sng, Sin, Sqr e Tan)

Oi Pessoal!

Estava procurando uma Função de VBA no Google e por acaso achei uma tabela com as Funções abaixo. Para quem interessar…

Abs(n) – Retorna o valor absoluto (sem sinal) do número n.

Atn(n) – Retorna o valor do arco, cuja tangente é o número n,

que deve ser informado em radianos.

Cos(n) – Retorna o cosseno do número n, que deve ser informado em radianos.

Exp(n) – Retorna o número e (logaritmo neperiano e=2,7183) elevado ao número n.

Log(n) – Retorna o logaritmo natural do número n.

Rnd(n) – Retorna um número aleatório entre 0 e 1.

Sgn(n) – Retorna -1 para números negativos e 1 para números positivos.

Sin(n) – Retorna o seno do número n, que deve ser informado em radianos.

Sqr(n) – Retorna a raiz quadrada do número n.

Tan(n) – Retorna a tangente do número n, que deve ser informado em radianos.

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Funções para tratamento de Texto no VBA (Asc, Chr, Len, LCase, UCase, Left, Right e Mid)

Oi Pessoal!

Dando continuidade ao aprendizado de VBA, neste post falarei de algumas Funções usadas para tratamento de texto.

 

A Função Asc

 

Esta Função retorna o valor numérico do código ASCII da primeira letra de uma String.

Obs: ASCII é uma sigla para “American Standard Code for Information Interchange” (Código Padrão Norte-americado para Intercâmbio de Informações). Esse código foi criado visando a padronização dos códigos para caracteres alfa-numéricos (letras, sinais, números e acentos).
O ASCII é um código numérico que representa os caracteres, usando uma escala decimal de 0 a 127, que são convertidos pelo computador para binários.

Exemplo de código:

Sub Função_Asc()

MsgBox Asc(“Curso de VBA”)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com o valor 67 como resultado.

A Função Chr

Esta Função retorna o caractere ASCII associado ao número informado como parâmetro.

Exemplo de código:

 

Sub Função_Chr()

MsgBox Chr(65)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com a letra A como resultado.

Obs: usamos o Chr(13) para simular o comando <ENTER>, que efetua a quebra de linhas no código.

 

A Função Len

 

Esta Função determina o tamanho da String (quantidade de caracteres) informada como parâmetro, considerando inclusive os espaços em branco.

Exemplo de código:

Sub Função_Len()

MsgBox Len(“Curso de VBA”)

End Sub

Ao ser executado, o código acima retornará uma caixa de mensagem com o valor 12, que corresponde ao número de caracteres do texto entre parênteses: Curso de VBA.

 

Obs: conforme falei acima, repare que cada “espaço” conta como um caractere!

 

A Função LCase

Esta Função converte as letras de uma String para minúsculas.

Exemplo de código:

Sub Função_LCase()

MsgBox LCase(“Curso de VBA”)

End Sub

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: curso de vba

Função UCase

 

Esta Função converte as letras de uma String para maiúsculas.

Exemplo de código:

Sub Função_UCase()

MsgBox UCase(“Curso de VBA”)

End Sub

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: CURSO DE VBA

A Função Left

 

Esta Função retorna todos os caracteres de uma String, iniciando pela esquerda e considerando os espaços em branco, até uma determinada posição. A sintaxe é a seguinte: Left(String, n), onde n determina a posição do último caractere que deve aparecer no resultado.

Exemplo de código:

Sub Função_Left()

MsgBox Left(“Curso de VBA”, 5)

End Sub

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: Curso

A Função Right

 

Esta Função retorna todos os caracteres de uma String, iniciando pela direita e considerando os espaços em branco, até uma determinada posição. A sintaxe é a seguinte: Right(String, n), onde n determina a posição do último caractere que deve aparecer no resultado.

Exemplo de código:

Sub Função_Right()

MsgBox Right(“Curso de VBA”, 3)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: VBA

A Função Mid

 

Esta Função retorna todos os caracteres de uma String, iniciando e terminando em posições informadas. A sintaxe é a seguinte: Mid(String, m, n), onde m determina a posição do primeiro caractere que deve aparecer no resultado e n a posição do último.

Exemplo de código:

Sub Função_Mid()

MsgBox Mid(“Curso de VBA”,6, 3)

End Sub

 

Ao ser executado, o código acima mostrará uma caixa de mensagem com o seguinte resultado: de

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Melhorando a performance e a aparência do seu trabalho! (Application.ScreenUpdating e Application.Calculation)

Oi Pessoal!

Sempre que verifico o status dos acessos diários do blog, dou uma olhada nos termos pelos quais os usuários acharam o blog.

Hoje vi uma busca bem interessante: “executar macro em Excel sem exibir processos no fundo”.

Bom, não sei quem efetuou essa busca, mas resolvi escrever esse post, pois lembro que fiquei bastante empolgado quando descobri a linha de código capaz de realizar essa ação, que realmente fez a diferença na velocidade e aparência do meu trabalho em Controladoria e Finanças!

Vamos lá…

Para executar uma Macro sem exibir os processos no fundo, ou seja, sem que o usuário veja o que o Excel está fazendo, basta incluir o comando Application.ScreenUpdating = False no início do código da Macro.

Sem dúvida, essa é uma das melhores formas de fazer com que o Excel leve menos tempo para executar uma Macro, além de dar uma “cara” mais profissional ao seu trabalho! O ganho de tempo é realmente visível…

Outra forma que uso muito para melhorar a performance das minhas Macros é desativando o cálculo do Excel com o comando Application.Calculation = xlCalculationManual. Em planilhas com muitas fórmulas o ganho é notável. Só não esqueçam de ativar o cálculo novamente no final do código com o comando Application.Calculation = xlCalculationAutomatic!

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.