MS OFFICE - EXCEL 2013
Exemplos e Exercícios
Bruno Almeida de Jesus
PLANEJAMENTO
DIAS CONTEÚDO
04/06 Apresentações, MS Excel (versões), Revisão (Fórmulas e Formatação Condicional) 06/06 Microsoft Office Excel – Revisão (Funções de data, estatísticas, lógicas)
11/06 Microsoft Office Excel – Revisão (Funções de procura e referência.) 13/06 Microsoft Office Excel – Validação de células. Colar especial. Filtros.
18/06 Microsoft Office Excel – Proteção de células, planilhas e arquivos. Vínculos e Suplementos.
20/06 Microsoft Office Excel – Consolidação e Auditoria em Fórmulas
25/06 Microsoft Office Excel – Tabelas dinâmicas 27/06 Microsoft Office Excel – Exercício
04/07 Microsoft Office Excel – Macros e Formulários com VBA
MICROSOFT OFFICE EXCEL
•
Recursos que exercitaremos esta semana:
Programação de computadores - VBA
Nesta aula, abordaremos :
• Conceitos básicos da linguagem VBA
• Comandos de entrada, saída, estrutura de seleção e repetição na linguagem VBA
VBA – Visual Basic for Application
A linguagem de programação utilizada pelo Microsoft Excel é o
VBA - Visual Basic for Applications.
Conforme veremos a partir de agora esta é uma linguagem, ao
mesmo tempo, extremamente simples e poderosa.
Com o VBA temos acesso completo a todos os elementos de
todos os objetos de uma planilha do Excel.
Eduardo
Arruda
Por que utilizar?
O VBA é uma linguagem de programação interna do
Microsoft Excel (na prática é a linguagem de programação
para todos os aplicativos do Office: Access, Word, Excel e
Power Point). Usamos o VBA pelo mesmo motivo que
utilizamos macros - para automatizar tarefas e rotinas
repetitivas, envolvendo os diversos elementos do banco
de dados (tabelas, consultas, formulários, relatórios, folhas
de dados, macros e módulos). No entanto, o VBA oferece
maior poder e controle mais detalhado do que as ações de
macro.
Eduardo
Arruda
Vantagens em utilizarmos o VBA:
•
Manipulação de objetos
•
Criação de funções definidas pelo usuário
•
Definição de condições e controle de fluxo
•
Realização de cálculos complexos e solução
de problemas que envolvem uma lógica
complexa
Eduardo
Arruda
O Ambiente de Programação - o Editor VBA
Eduardo
Arruda
Declaração de Variáveis
• Uma variável é um espaço na memória do computador, reservado para armazenar um ou mais valores. Fazemos referência a este espaço utilizando nomes. Como o valor armazenado pode variar, à medida que o código VBA é executado, estas estruturas são chamadas de variáveis. • No VBA, não é obrigatório a declaração de variáveis. Porém é recomendável que declaremos
todas as variáveis, de tal forma que o código fique mais claro e de fácil compreensão. Para declararmos uma variável, utilizamos o comando Dim, conforme exemplificado abaixo:
Dim x
Dim nome
Dim teste
Eduardo
Arruda
Declaração de Variáveis
• Neste caso estamos apenas declarando o nome da variável, sem declarar de que tipo (texto,inteiro, data, etc) é a variável. Uma variável declarada sem tipo é considerada do tipo Variant, o que na prática significa que a variável pode conter qualquer tipo de valor. Pode parecer uma prática interessante a não declaração do tipo da variável, porém isso é altamente desaconselhável. Se não declararmos o tipo, conforme descrito anteriormente, a variável poderá conter qualquer valor. Neste caso o que impede de um campo numérico conter valores de texto ou vice-versa??
• A sintaxe para o comando Dim é a seguinte:
Dim nome_da_variável As tipo_da_variável
Também podemos declarar mais do que uma variável, com um único comando Dim. Para isto, basta separar as variáveis, com vírgula, conforme exemplificado abaixo:
Dim x,y,z As String Dim nome as Double
Declaração de Variáveis
IMPORTANTE: Observe que definimos o "tipo" de cada variável. O
Tipo define quais dados podem ser armazenados em uma
variável. Por exemplo, variáveis que armazenam valores
numéricos, não devem aceitar caracteres de texto. Variáveis
que armazenam datas, não devem aceitar datas inválidas, como
por exemplo 30/02/2001.
•
Toda variável no VBA, é do tipo Variant, isto significa que a
variável pode ser de qualquer tipo. O que define o tipo da
variável é o valor que está armazenado no momento. Existem
funções que conversão de tipo, conforme veremos mais
adiante.
Eduardo
Arruda
Declaração de Variáveis
•
Também podemos utilizar variáveis que não
foram, explicitamente, declaradas com o
comando Dim. Com isso, a variável é criada na
memória, no momento da sua utilização.
•
Para fazer com que toda variável tenha que ser,
explicitamente, declarada, antes de ser
utilizada, devemos utilizar o seguinte comando
na seção de declaração do módulo:
•
Option Explicit
Declaração de Variáveis
Exemplo:
Dim a As Integer Dim b As Integer a=5
b=2 c=a+b
Msgbox "A variável C vale: " & c
Cálculos, Operadores Aritméticos e Exemplos
Dim a As Integer Dim b As Integer
Dim som, subtr, divis, mult, intdivs, expo, modul As Double a = 25
b = 3
' Uso os operadores aritméticos para efetuar cálculos som=a+b subtr=a-b divis=a/b mult=a*b intdivs=a\b expo=a^b
modul= a mod b
'Uso de MsgBox para exibir os resultados.
MsgBox "Os números são: " & a & " e " & b & Chr(13)
MsgBox "Soma: " & som & Chr(13)& "Subtração: " & subtr & Chr(13) MsgBox "Divisão: " & divis & Chr(13)& "Multiplicação: " & mult & Chr(13) MsgBox "Divisão inteira: " & intdivs & Chr(13)& "Exponenciação: " & expo & Chr(13)
MsgBox "Resto da divisão: " & modul
Eduardo
Arruda
Estrutura If...Then e os Operadores de Comparação
If x>y Then
' Comandos a serem executados quando x for maior do que y
Comando 1 Comando 2 ...
Comando n
Else
' Comandos a serem executados quando x for menor ou igual a y
Comando 1 Comando 2 ...
Comando n
End If
Eduardo
Arruda
Estrutura If...Then Exemplo:
Dim x,y,z,k As Integer x=12 y=15 z=20 k=15 If x<y Then
MsgBox "x é menor do que y." Else
MsgBox "x é maior do que y." End If
Eduardo
Arruda
16
If y<x Then
MsgBox "Y é menor do que x" Else
MsgBox "Y é maior do que x" End If
If y<=k Then
MsgBox "y é menor ou igual à k" Else
MsgBox "Y é maior do que k" End If
If x<>z Then
Estrutura If...Then
Comparando valores de tipos diferentes.
Comparação Resultado
Entre duas variáveis com valores
numéricos. Comparação normal. Entre duas variáveis com valores
do tipo texto. É efetuada uma comparação entre valores de texto. Por exemplo
Xuxa é maior do que Abel (X vem depois do A).
Uma das variáveis possui um valor numérico e outra possui um valor de texto
O valor numérico será sempre considerado menor do que o valor de texto.
Uma das variáveis possui um valor numérico e a outra está vazia.
Efetua uma comparação numérica, atribuindo 0 (zero) para a variável vazia.
Uma variável possui um valor de texto e a outra está vazia, sem valor.
Efetua uma comparação de texto, atribuindo texto de comprimento zero (" ")para a variável vazia. As duas variáveis possuem um
valor vazio. São consideradas iguais.
O Escopo das variáveis, no VBA.
• O escopo de uma variável, define em que partes do código a variável pode ser utilizada. Em VBA, podemos ter os seguintes escopos para as variáveis:
• Escopo de Módulo: Uma variável declarada dentro do Módulo (um módulo pode conter um ou mais procedimentos ou funções, cada procedimento função começa com um Sub ou Function e termina com um End Sub ou End Function, respectivamente.
• Veremos mais sobre funções e procedimentos, nas próximas lições), mas fora de qualquer Procedimento. Com isso a variável pode ser utilizada dentro de todo o bloco de código do Módulo, inclusive dentro dos Procedimentos, caso exista algum.
•
Um módulo de uma planilha pode conter uma ou mais macros,
sendo que cada macro é um procedimento, isto é, inicia com um
Sub e termina com um End Sub. Tudo o que estiver entre Sub e End
Sub, faz parte da respectiva macro. Uma variável declarada ao nível
de Módulo, existe enquanto o Módulo estiver sendo executado.
•
São as variáveis declaradas na seção de Declarações do Módulo.
Uma variável declarada ao nível de Módulo, poderá ser utilizada em
todos os procedimentos/funções do módulo, isto é, em todas as
macros que fazem parte do respectivo módulo.
A estrutura If ... Then...ElseIf...Else
20
If condição Then
‘Comandos a serem executados, caso a condição seja verdadeira.
Comando1 Comando2 ...
ElseIf condição-2
‘Comandos a serem executados, caso a condição2 seja verdadeira.
Comando1 Comando2 ...
ElseIf condição-3
‘Comandos a serem executados, caso a condição3 seja verdadeira.
Comando1 Comando2 ...
ElseIf condição-n
‘Comandos a serem executados, caso a condição n seja verdadeira.
Comando1 Comando2 ...
Else
‘Comandos a serem executados, caso nenhuma das condições anteriores seja verdadeira.
Comando1 Comando2 ...
A estrutura Select...Case
Quando precisamos realizar uma série de testes, é mais eficiente utilizarmos uma única estrutura Select...Case , do que utilizarmos uma série de testes utilizando a estrutura If...Then...ElseIf
Dim x x=10
Select Case x Case 2
MsgBox "X vale 2 !" Case 4
MsgBox "X vale 4 !" Case 6
MsgBox "X vale 6 !" Case 8
MsgBox "X vale 8 !" Case 10
MsgBox "X vale 10 !" Case Else
MsgBox "X não é um número par, menor do que 12 " End Select
Estruturas de repetição.
• Em determinadas situações, precisamos repetir um ou mais comandos, um número específico de vezes, ou até que uma determinada condição torne-se verdadeira ou falsa.
• Por exemplo, pode ser que haja a necessidade de percorrer todos os registros de uma determinada tabela, até que o último registro seja alcançado. Para isso, utilizamos as chamadas estruturas de repetição, ou Laços.
• A partir de agora, aprenderemos as estruturas de repetição disponíveis.
Eduardo
Arruda
A estrutura For...Next.
Eduardo
Arruda
23
• Utilizamos o laço For...Next, para repetir um segmento de código, um número determinado de vezes.
• Utilizamos esta estrutura, quando já sabemos o número de vezes que uma determinada seção de código deve ser repetida.
• Neste tipo de estrutura, normalmente, utilizamos uma variável como contador.
• Este contador varia de um valor inicial até um valor final. O Formato geral desta estrutura é o seguinte:
For contador = inicio to fim incremento
Comando1 Comando2 .
. .
Comando N
A estrutura For...Next.
Eduardo
Arruda
24
Dim x
x=10
Soma=0
' Faz a soma dos 10 primeiros números maiores do que zero
For i=1 to x
Soma = Soma +i
Next
A estrutura Do...Loop.
Eduardo
Arruda
25
Esta estrutura pode ser utilizada para repetir um trecho de código,
enquanto uma determinada condição for verdadeira, ou até que uma determinada condição torne-se verdadeira .
Podemos utilizar dois operadores condicionais diferentes:
While ou Until . Os operadores While ou Until, podem ser utilizados de duas maneiras diferentes:
No início do laço, ou no final do laço. Com isso temos quatro situações distintas, vamos analisar cada uma delas, a partir de agora.
A estrutura Do While Condição...Loop.
Neste caso, estamos utilizando o operador condicional While, no início do laço. O formato geral, neste caso é o seguinte
Do While condição/teste
A estrutura Do...Loop.
Eduardo
Arruda
26
Dim x
x=10
Contador=1
Soma=0
' Faz a soma dos 10 primeiros números maiores do que zero
Do While Contador <= x
Soma = Soma + Contador Contador = Contador + 1
Loop
A estrutura Do... Loop While Condição.
27
Neste caso, deslocamos o teste de condição para o final do laço.
Com o teste no final do laço, o código dentro do laço, será executado, pelo menos
uma vez,
pois o teste somente é feito no final, e continuará sendo executado, enquanto a
condição for verdadeira.
O formato geral, neste caso é o seguinte:
Do
Comando1 Comando2 .
. .
Comandon
A estrutura Do... Loop While Condição.
Eduardo
Arruda
28
Dim x
x=10
Contador=1
Soma=0
' Faz a soma dos 10 primeiros números maiores do que zero
Do
Soma = Soma + Contador Contador = Contador + 1
Loop While Contador <= x
A estrutura Do Until Condição...Loop.
Neste caso, estamos utilizando o operador condicional Until,
no início do laço. O formato geral, neste caso é o
seguinte:
Eduardo
Arruda
29
Do Until condição
Comando1 Comando2 .
. .
Comandon
A estrutura Do Until Condição...Loop.
30
Dim x
x=10
Contador=1
Soma=0
' Faz a soma dos 10 primeiros números maiores do que zero
Do Until Contador > x
Soma = Soma + Contador Contador = Contador + 1
Loop
Funções do VBA
Funções de Tipo
Eduardo
Arruda
31 A Função IsDate.
A função IsDate recebe uma variável ou expressão como argumento, e determina se a variável ou
expressão é uma data válida, ou pode ser convertida para uma data válida. Caso o argumento passado seja uma data válida, a função retorna Verdadeiro, caso contrário, retorna Falso. Podemos utilizar esta função, por exemplo, para verificar se o usuário digitou uma data válida, em um campo de um formulário. A sintaxe da função IsDate é a seguinte:
IsDate(NomeDaVariável) ou
IsDate(expressão)
A seguir temos um exemplo de utilização da função IsDate:
If IsDate(x) Then
MsgBox "Você digitou uma data válida !"
Else
MsgBox "Data inválida, digite novamente !“
Funções do VBA
Funções de Tipo
Eduardo
Arruda
32
A função IsNumeric.
A função IsNumeric recebe uma variável ou expressão como argumento, e determina se o valor atribuído à variável ou expressão é numérico, ou pode ser convertido para numérico. Caso o valor seja numérico, ou possa ser convertido, a função retorna Verdadeiro, caso contrário, retorna Falso.
A sintaxe da função IsNumeric é a seguinte: IsNumeric(NomeDaVariável)
ou
IsNumeric(expressão)
A seguir temos um exemplo de utilização da função IsNumeric: Dim x,y,z x=123
'Atribuo um valor que não pode ser convertido 'para numérico y = "Riachuelo - 80"
z = Date()
mensagem = "Valor de x: " & x &" É numérico ? " & IsNumeric(x)& Chr(13)
Funções do VBA
Funções de Tipo
Função CStr
A função CStr converte uma variável ou resultado de um
expressão, para o subtipo String.
Observe este linha de código:
MsgBox CStr("12345" & " hectares de terra")
Eduardo
Arruda
VBA - Funções para tratamento de Texto
Função Chr
A função Chr(número), recebe um número como parâmetro, e retorna o caractere ASCII, associado ao número passado como parâmetro.
Considere o exemplo:
Chr(65)
Este exemplo de uso da função retorna o caractere "A" maiúsculo.
Eduardo
Arruda
VBA - Funções para tratamento de Texto
Função Len
Esta função determina o tamanho da String que foi passada como parâmetro para a função. Considere o exemplo:
MsgBox Len("Este é um exemplo de uso da função Len !!")
Este exemplo de uso da função, retorna 41,
Eduardo
Arruda
VBA - Funções para tratamento de Texto
Função LCase
Esta função converte para minúsculas, a String que foi passada como parâmetro para a função. Considere o exemplo:
MsgBox Lcase("ESTE É UM EXEMPLO DE USO DA FUNÇÃO LCASE!!")
Este exemplo de uso da função, converte o parâmetro passado, para letras minúsculas.
Eduardo
Arruda
VBA - Funções para tratamento de Texto
Função String
Esta função retorna um determinado caractere, um número especificado de vezes. O formato geral da função é o seguinte:
String(n, Caracter)
onde n é o número de vezes que Caractere deve ser repitido. Considere o exemplo:
MsgBox String(35,"*")
Eduardo
Arruda
Funções para tratamento de Data e Hora
Função Date
Retorna a data corrente do sistema. Não precisamos passar parâmetros para esta função. Considere o exemplo abaixo:
MsgBox "Data do Sistema: " & Date()
Eduardo
Arruda
Funções para tratamento de Data e Hora
Função Day
Recebe como parâmetro uma data, e retorna um número entre 1 e 31, indicando o dia do mês. O formato geral é o seguinte:
Day(data)
Considere o exemplo abaixo:
MsgBox "Dia do mês: " & Day(Date( ))
Eduardo
Arruda
Funções para tratamento de Data e Hora
Função Month
Recebe como parâmetro uma data, e retorna um número entre 1 e 12, indicando o mês do ano. O formato geral é o seguinte:
Month(data)
Considere o exemplo abaixo:
MsgBox "Mês do ano: " & Month(Date( ))
Eduardo
Arruda
Funções para tratamento de Data e Hora
Função MonthName
Recebe como parâmetro um número, indicativo do mês do ano (1 - Janeiro, 2 - Fevereiro, e assim por diante), e um segundo parâmetro que pode ser Verdadeiro ou Falso. Se o segundo parâmetro for verdadeiro, o nome do mês será exibido abreviadamente. O formato geral é o seguinte:
MonthName(número_do_mês, abreviar)
Considere o exemplo abaixo:
MsgBox "Mês do ano: " & MonthName(Month(Date))
Eduardo
Arruda
Funções para tratamento de Data e Hora
Função Hour
Recebe como parâmetro uma hora, e retorna um número entre 0 e 23, indicando o hora do dia. O formato geral é o seguinte:
Hour(horário)
Considere o exemplo abaixo:
MsgBox "Hora do dia: " & Hour(Time( ))
Funções para tratamento de Data e Hora
Eduardo
Arruda
43
A função DateDiff
Esta função pode ser utilizada para determinar o número de intervalos (em dias, trimestres, semestres, anos, etc), entre duas datas. A sintaxe desta função é o seguinte:
DateDiff(intervalo, data1, data2)
O parâmetro intervalo é uma String que diz que tipo de intervalo vamos calcular. Por exemplo, é este parâmetro que define se queremos calcular o número de dias, ou o número de meses entre duas datas. Na Tabela a seguir, temos os valores possíveis para o parâmetro intervalo.
Valores para o parâmetro intervalo
Valor 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
A título de exemplo, vamos calcular o número de meses, desde o descobrimento do Brasil, até 31 de Dezembro de 1999. Para isso, utilizaríamos o seguinte comando
Eduardo
Arruda
44
Funções para tratamento de Data e Hora
A função DateAddEsta função pode ser utilizada para determinar uma data futura, com base em uma data fornecida, o tipo de período a ser acrescentado (dias, meses, anos, etc), e o número de períodos a serem acrescentados. A sintaxe desta função é o seguinte:
DateAdd(intervalo, número_de_intervalos, data)
O parâmetro intervalo é uma String que diz que tipo de intervalo vamos acrescentar. Por exemplo, é este parâmetro que define se queremos acrescentar um número especificado de dias, meses, anos, etc. Na Tabela a seguir, temos os valores possíveis para o parâmetro intervalo.
Valores para o parâmetro intervalo.
Valor Descrição yyyy Anos q Trimestres m Meses
y Dias do ano (o mesmo que dias) d Dias
w Semanas
ww Semanas do ano h Horas
n Minutos s Segundos
A título de exemplo, vamos calcular a data em que tivemos um período de 1000 meses, após o descobrimento do Brasil. Para isso, utilizaríamos o seguinte comando:
Função Year
Recebe como parâmetro uma data, e retorna um número
indicativo do ano. O formato geral é o seguinte:
Year(data)
Considere o exemplo abaixo:
MsgBox "Ano atual: " & Year(Date( ))
45
Função WeekDay
Recebe como parâmetros uma data, e um parâmetro opcional, que indica qual o primeiro dia da semana. Se este parâmetro for omitido, o primeiro dia da semana será considerado Domingo. O valor para o primeiro dia da semana é numérico: 1 - Domingo, 2 - Segunda-feira, e assim por diante.
WeekDay(data, prim_dia_semana.)
Considere o exemplo abaixo:
MsgBox "Dia da semana: " & WeekDay("31/12/1999")
Eduardo
Arruda
46
Funções para tratamento de Data e Hora
Função WeekDayName
Recebe como parâmetro um número, indicativo do dia da semana, e um segundo parâmetro que pode ser Verdadeiro ou Falso. Se o segundo parâmetro for verdadeiro, o nome do dia da semana será exibido abreviadamente. O formato geral é o seguinte:
WeekDayName(número_do_dia, abreviar)
Considere o exemplo abaixo:
MsgBox "Dia da semana: " & WeekDayName(6,False)
Eduardo
Arruda
Funções para Cálculos
Função Descrição
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. O número n deve ser fornecido em radianos.
Cos(n) Retorna o coseno do número n. O número n deve ser fornecido em radianos.
Exp(n) Retorna o número e (logaritmo neperiano e=2,7183), elevado no número n.
Log(n) Retorna o logaritmo natural de um número n.
Rnd(n) Retorna um número aleatório entre 0 e 1.
Funções para Cálculos
Função Descrição
Sgn(n) Retorna um número inteiro, indicando o sinal do número n. Retorna -1 para números negativos e 1 para números positivos.
Sin(n) Retorna o seno do número n. O número n deve ser fornecido em radianos
Sqr(n) Retorna a Raiz quadrada do número n.
Tan(n) Retorna a tangente do número n. O número n deve ser fornecido em radianos.
NOTA: Para converter graus para radianos, multiplique o valor em graus por pi (3.14), e divida o resultado por 180.