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.
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”:
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:
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”