Gerar Relatório Via VBA
Através da programação em VBA nós podemos deixar nossas
rotinas do Excel cada vez mais fáceis. Vamos aprender ao longo desse artigo
como gerar um relatório via VBA a partir de um banco de dados do Excel com
critérios que podem varia conforme necessitarmos.
Para podermos gerar nosso relatório temos que ter um banco
de dados onde estarão nossas informações e este deve estar de forma ordenada
para que a consulta possa trazer as informações corretamente. Na tabela 1 você
tem um exemplo de nosso banco de dados ordenado.
Tabela1: Banco de dados ordenado
Partindo do princípio que temos um banco de dados ordenado
vamos a criação do relatório.
No nosso exemplo iremos criar um relatório que irá consultar
um banco de dados de clientes na aba “Bco_Dados” e trazer apenas aqueles que
atenderem ao nosso critério de consulta para aba “Relatório” conforme Tabela 2.
Para que isso seja possível nós vamos precisar de usar duas
estruturas de programação, a primeira é a estrutura de repetição para que nosso
código faça a comparação em todas as linhas da nossa tabela, a segunda
estrutura que precisaremos usar é a estrutura de decisão onde nosso código vai
verificar se a linha selecionada atende ao nosso critério ou não, onde caso
atenda ela irá copiar os dados necessários daquela linha para o nosso
relatório.
1º Passo
A primeira coisa a se fazer é limpar a aba onde recebera as
informações do nosso relatório, pois ela pode estar com dados de relatórios
anteriores. Para isso usaremos o seguinte código:
Sheets("Relatório").Range("A3:E1000").Clear
Nesse código nós estamos selecionando o intervalo de A3 até
E1000 da aba “Relatório” e executado o comando Clear que quer dizer limpar.
Em seguida temos que criar nossa estrutura de repetição.
Para isso iremos usar a estrutura Do While... Loop para que o nosso código
possa percorrer todo nosso banco de dados.
Nesse comando nós estamos informando para estrutura que ela
deve repetir o código enquanto a linha verificada da planilha “Bco_Dados” for
diferente de vazio.
Sub GerarRelatório()
Dim linha as Integer
linha = 2
Do While
Sheets("Bco_Dados").Cells(linha, 1) <> ""
linha = linha + 1
Loop
End Sub
Note que criamos também uma variável chamada “linha” do tipo
inteira para que possa informar a nossa estrutura de repetição qual a linha que
ela está verificando, para isso também é necessário que nós incrementemos essa
variável, ou seja, somemos mais 1 a cada vez que ela passar pelo Loop, fazendo
com que na primeira vez a variável “linha” seja 2, depois 3, depois 4 e assim
por diante até que a linha esteja vazia, a fim de não gerar um Loop infinito,
pois ele nunca sairia da linha 2, e com isso travar o sistema.
Note que demos um valor inicial de 2 para variável linha,
isso foi feito porque nosso banco de dados começa a seu preenchimento na linha 2.
2º Passo
Chegou a hora de adicionarmos nossa estrutura de decisão, a
estrutura If...Else...End If, com ela nós vamos verificar se a linha atende
nosso critério ou não, onde caso atenda o código copia as informações para a
aba “Relatório” caso não atenda e não cópia.
Na nossa comparação estamos pesquisando na aba “Bco_Dados” por
clientes que tenho idade de igual a 25 anos
Note que ele está fazendo a comparação na célula referente a
variável linha da coluna 3 que é a coluna de idade.
Sub GerarRelatório()
Dim linha as Integer
linha = 2
Do While
Sheets("Bco_Dados").Cells(linha, 1) <> ""
If Sheets("Bco_Dados").Cells(linha,
3) = 25 Then
Else
End if
linha = linha + 1
Loop
End Sub
3º Passo
No terceiro passo chegou a hora de informar o que fazer caso
a linha pesquisada atenda nosso critério do relatório, no nosso caso se atender
o critério queremos que as informações sejam copiadas para aba “Relatório”.
Vimos que nosso banco de dados é composto de 5 colunas, com
isso precisaremos escrever 5 linhas de comando para podermos levar as 5 colunas
para nosso relatório, uma para cada coluna. Para isso iremos usar o seguinte
código:
Sub Relatório()
Dim
linha as Integer
Dim
linha2 as Integer
linha
= 2
linha2 = 3
'Limpar relatório
Sheets("Relatório").Range("A3:E1000").Clear
'Preencher relatório
Do While Sheets("Bco_Dados").Cells(linha, 1)
<> ""
If Sheets("Bco_Dados").Cells(linha,
3) = 25 Then
Sheets("Relatório").Cells(linha2,
1) = Sheets("Bco_Dados").Cells(linha, 1)
Sheets("Relatório").Cells(linha2,
2) = Sheets("Bco_Dados").Cells(linha, 2)
Sheets("Relatório").Cells(linha2,
3) = Sheets("Bco_Dados").Cells(linha, 3)
Sheets("Relatório").Cells(linha2,
4) = Sheets("Bco_Dados").Cells(linha, 4)
Sheets("Relatório").Cells(linha2,
5) = Sheets("Bco_Dados").Cells(linha, 5)
linha2 = linha2 + 1
End If
linha = linha + 1
Loop
End Sub
No código acima estamos informando que caso atenda nosso
critério de seleção nosso código deve copiar para a aba “Relatório” na célula linha2
coluna 1 os dados que estão na aba “Bco_Dados” célula linha coluna 1 e assim
sucessivamente, uma para cada coluna, lembrando de mudar a coluna a cada uma
das 5 linha de código digitada.
Note que aqui nós criamos uma outra variável inteira de nome
“linha2” e iniciando com valor 3, isso foi feito porque nosso relatório vai começar
a ser preenchido a partir da terceira linha e o fato de não usarmos a variável “linha”
criada no começo é porque nem sempre os dados que queremos vão estar um debaixo
do outro, com isso caso usássemos essa variável teriam espações em branco dentro
do nosso relatório, lembrando que essa variável também tem que ser incrementada
com 1 a cada vez que nosso critério for atendido afim de que o código não subscreva
por cima de um item já levado para o banco de dados.
Tabela
2: Relatório Gerado
Vídeo Explicativo: https://www.youtube.com/watch?v=VkeJS51q4rA
Nenhum comentário:
Postar um comentário