next up previous contents
Next: Vetores Up: Técnicas de Programação Utilizando Previous: Utilizando Funções e Macros

Trabalhando com Várias Planilhas

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

para uma referência relativa. Para uma referência absoluta, usamos

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)

E se queremos escrever o resultado de uma expressão na célula E2 da planilha Importações, usamos

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.
Suponha uma planilha de 4 colunas. Fazer uma macro que copia esta planilha para uma outra planilha, só que na ordem inversa das linhas, ou seja, o programa deve copiar:

1 2 3 4
10 20 30 40
100 200 300 400
a b c d

para

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)?

2.
Um importador de automóveis tem a seguinte planilha de previsão de vendas de unidades de cada modelo:

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:


next up previous contents
Next: Vetores Up: Técnicas de Programação Utilizando Previous: Utilizando Funções e Macros
Flavio Soares Correa da Silva
2000-04-10