Cada planilha tem um nome. Este nome inicialmente é, na versão em português do Excel, Plan1, Plan2, etc. Mas este nome pode ser mudado, bastando para isso clicar duas vezes sobre a aba que contém um nome e editar este nome na caixa de edição que é ativada.
A importância do nome da planilha é que será através dele que poderemos nos referir aos dados quando trabalharmos com diversas planilhas.
Quando editamos fórmula em uma planilha, utilizamos referências relativas, como C4, ou referências absolutas, como $C$4. Ambas as referências dizem respeito à planilha em que as fórmulas ocorrem. No entanto podemos nos referir a células em outras planilhas.
Por exemplo, suponha que nós temos duas planilhas, Moedas e Importações. Suponha que numa fórmula em Importações queiramos nos referir à célula C4 em Moedas. Para isso, não podemos usar apenas C4 pois este se refere a célula situada na linha 4 e coluna 3 da planilha atual, ou seja, Importações. Em vez disso, usamos
Moedas!C4
Moedas!$C$4
Quando estamos lidando com várias planilhas em um programa,
precisamos dizer qual a planilha na qual queremos ler e/ou
escrever. Por exemplo, se queremos ler o valor da célula C4 na planilha Moedas, usamos o comando
<Var> = Worksheets(``Moedas'').Cells(4,3)
Worksheets(``Importações'').Cells(2,5) = <expr>
Por exemplo, vamos construir planilhas para lidar com importações de produtos. Uma planilha, chamada Moedas, contém a cotação de diversas moedas.
A
B
C
1
Moeda
País
Valor em Reais
2
Dolar
EUA
1,19
3
Libra
Reino Unido
2,2
4
Marco
Alemanha
1,07
5
Yen
Japão
0,006993007
6
Lira
Itália
0,001278772
7
Dracma
Grécia
0,43
Uma segunda planilha contém bens importados dos Estados Unidos, e a ela damos o nome de ImportUS.
A
B
C
1
Produto
Preço em US$
Preço em R$
2
Computador
2000
=B2 * Moedas!$C$2
3
Torradeira
70
=B3 * Moedas!$C$2
4
Chaleira
30
=B4 * Moedas!$C$2
5
Geladeira
500
=B5 * Moedas!$C$2
Finalmente, temos uma planilha ImportMundo que trata da importação de produtos de todo o mundo, e portanto deve tratar da conversão de diversas moedas para o Real.
A
B
C
D
1
Produto
Moeda
Preço Original
Preço em R$
2
Computador
Dolar
2000
3
TV
Yen
600
4
Whisky
Libra
26
5
Camelo
Dinar
400
O preenchimento desta tabela é consideravelmente mais complexo que o da tabela anterior, pois envolve uma busca da cotação de cada moeda na planilha Moedas para cada caso. Neste caso, podemos escrever uma macro (e um conjunto de programas auxiliares) que nos ajude a solucionar o problema.
Const ColMoeda = 1
Const ColCota = 3
Const LinInicial = 2
Const PLAN2 = "ImportMundo"
Const ColProd = 1
Const ColTipo = 2
Const ColPreco = 3
Const ColReal = 4
Function BuscaCotação(moeda As String) As Double
'Encontra a cotação na planilha "Moedas" para
' uma dada moeda. Se a moeda não for encontrada,
' retorna -1.
Dim lin As Integer
Dim cotação As Double
'Inicialização
lin = LinInicial
cotação = -1 'assume que cotação não foi encontrada ainda
'Realiza busca
Do While (Not IsEmpty(Worksheets("Moedas").Cells(lin, ColMoeda)) And cotação = -1)
'Encontrou a moeda?
If moeda = Worksheets("Moedas").Cells(lin, ColMoeda) Then
cotação = Worksheets("Moedas").Cells(lin, ColCota)
End If
'Próxima linha
lin = lin + 1
Loop
'Retorno
BuscaCotação = cotação
End Function
Sub PreencheMundo()
'Preenche o preço em Reais dos produtos
' na planilha ImportMundo
Dim i As Integer
i = LinInicial
'Varre a planilha
Do While Not IsEmpty(Worksheets(PLAN2).Cells(i, ColProd))
Call preencheLinhaMundo(i)
i = i + 1
Loop
End Sub
Sub preencheLinhaMundo(lin As Integer)
Dim tipoMoeda As String
Dim cotação As Double
Dim precoOriginal As Double
'Descobre o tipo de moeda
tipoMoeda = Worksheets(PLAN2).Cells(lin, ColTipo)
'Descobre a cotação da moeda
cotação = BuscaCotação(tipoMoeda)
'Descobre preco original
precoOriginal = Worksheets(PLAN2).Cells(lin, ColPreco)
'Escreve preco em reais na planilha
If cotação >= 0 Then
Worksheets(PLAN2).Cells(lin, ColReal) = precoOriginal * cotação
Else
Worksheets(PLAN2).Cells(lin, ColReal) = "??"
End If
End Sub
Exercícios
1 | 2 | 3 | 4 |
10 | 20 | 30 | 40 |
100 | 200 | 300 | 400 |
a | b | c | d |
a | b | c | d |
100 | 200 | 300 | 400 |
10 | 20 | 30 | 40 |
1 | 2 | 3 | 4 |
O programa deve funcionar para planilhas com qualquer número de linhas, teminadas por uma linha em branco.
Sugestão: criar uma função auxiliar que conta o número N de linha e usar esta informação para inverter. A inversão deve mapear as posições:
LINHA_INICIAL | em | N + LINHA_INICIAL - 1 [ = LINHA_FINAL ] |
LINHA_INICIAL + 1 | em | N + LINHA_INICIAL - 2 |
... | ||
LINHA_INICIAL + i | em | N + LINHA_INICIAL - i - 1 |
... | ||
LINHA_FINAL | em | N + LINHA_INICIAL - N [ = LINHA_INICIAL ] |
Como você alteraria o seu programa para tratar de um número qualquer de colunas (terminadas por uma célula vazia)?
Modelo | Total 1997 | 1o trimestre 98 | 2o tri 98 | 3o tri 98 | 4o tri |
Ferrari TR | 115 | ||||
Ferrari Nera | 15 | ||||
Ferrari SL | 215 | ||||
Mazzerati A1 | 43 | ||||
Mazzerati A1-i | 122 | ||||
Zorro 16V | 1223 | ||||
Zorro 8V | 130 |
Suponha que a previsão de vendas é a seguinte: no primeiro trimestre deverão ser vendidos 30% do total do ano. E nos outros trimestres espera-se um aumento de 5% sobre cada trimestre anterior.
Preencha esta planilha da forma que achar mais adequada (fórmulas ou macro). Lembre-se de arredondar os resultado para números inteiros.
Suponha agora que haja uma segunda planilha de ordem de compra com as colunas:
Modelo | Compras 1o tri | 2o tri | 3o tri | 4o tri |
Fazer uma macro que preencha tal planilha de planejamento de importações dado que: