VBA™ para Excel™ 8: Busca e indicadores de passagem, variável booleana

(Ver o anterior)

Veremos a partir deste momento ferramentas muito úteis que já utilizei muito (e que me pouparam muito tempo). Talvez você não tenha visualizado a utilidade do VBA até aqui porque tudo o que fizemos até então poderia ser feito com funções simples do Excel. Prometo que isso vai mudar.

Calcula-se que mais de 80% do tempo de processamento de qualquer computador é utilizado apenas para buscas e ordenações. Busca é a atividade de localizar algo em uma lista, e ordenação, colocar este algo numa ordem desejada. Portanto, a construção racional dessas duas instruções otimizam a utilização do processador.

Apresentaremos primeiro uma forma mais intuitiva e menos inteligente para esta Sub, e depois como fazê-la racionalmente. Assim você perceberá melhor as sutilezas de como otimizar a programação em VBA.

Captura de tela 2013-11-16 às 22.31.34

Utilizarei um exemplo simples, com apenas 10 linhas de dados para explicar o funcionamento da Sub. Veja a tela acima: faremos uma busca do que determinado Produtor está fazendo em nosso projeto (ou se não está participando do projeto). Quando você precisar fazer buscas e, principalmente, manipular dados em listas grandes, com milhares de entradas, vai entender como o VBA é essencial para otimizar o Excel.

Vamos começar pela forma menos inteligente de resolver:

Const COL_Fornece = 1
Const COL_Prod = 2
Const COL_Quant = 3
Const NUM_Fornece = 10
Const COL_Dados = 5 ‘Nome do produto em questão
Const COL_Proc = 7
Const LIN_Quant = 1
Const LIN_Resp = 3
Const INILIN = 2 ‘Porque a primeira linha é o cabeçalho, não tem dados

Sub BuscaFornecedor()

Dim Proc As String
Dim Resp As String
Dim Atual As String
Dim lin As Integer

‘Fase de inicialização:
lin = INILIN
Proc = Cells(lin, COL_Proc)
Resp = “não encontrada”
‘Nesta primeira Sub, faremos uma busca linear
‘com indicadores de passagem.
‘O indicador só diz que o objeto já foi achado.

Do While Resp = “não encontrada” And lin <= (INILIN + NUM_Fornece)
‘Repare que nesta modalidade, menos racional,
‘você tem que saber previamente o número
‘total de linhas. O ideal é não precisar disso
‘para poder trabalhar com arquivos grandes.
‘Repare também no uso do operador “AND”:
‘a condição só é aceita quando as duas
‘condições são verdadeiras.

Atual = Cells (lin, COL_Prod)

If Atual = Proc Then
Resp = Cells(lin, COL_Fornece)
End If

lin = lin + 1

Loop

Cells(LIN_Resp, COL_Proc) = Resp

End Sub

Veja o que obteremos se entrarmos com uma pesquisa de um dos produtores e rodarmos a macro “BuscaFornecedor”:

Captura de tela 2013-11-16 às 22.40.17

Se entrarmos com um nome de fornecedor que não perticipa do projeto e rodarmos a macro, a variável Resp não será alterada até o final do processo:

Captura de tela 2013-11-16 às 22.43.01

Veremos no próximo tutorial como construir a busca de forma mais racional. Até lá!

2 comentários em “VBA™ para Excel™ 8: Busca e indicadores de passagem, variável booleana

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.