Continuaremos agora com a forma mais inteligente de resolver o problema da busca, conforme prometido. Para isso, utilizaremos as tais variáveis booleanas. Não se assuste com o nome, trata-se de uma variável simples que aceita apenas dois valores: verdadeiro (true) ou falso (false).
Vamos utilizar o problema anterior, alterando apenas o indicador para uma variável que chamaremos “Achou”. Enquanto a busca não encontrar nada ela será falsa (não achou). A partir do momento que encontrar, será verdadeira.
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
Dim Achou As Boolean
‘Fase de inicialização:
lin = INILIN
Proc = Cells(lin, COL_Proc)
Achou = False
Resp = “não encontrada”
Do While Not Achou And lin <= (INILIN + NUM_Fornece – 1)
‘Repare como é mais simples trabalhar com
‘a variável booleana Achou.
Atual = Cells(lin, COL_Prod)
If Atual = Proc Then
Achou = True
Resp = Cells(lin, COL_Fornece)
End If
lin = lin + 1
Loop
Cells(LIN_Resp, COL_Proc) = Resp
End Sub
O teste da variável booleana com NOT é similar à forma como falamos. Nesta Sub testamos com o Do While a condição “não achou” (NOT Achou). Enquanto a rotina não tinha achado, esta condição era verdadeira. A partir do momento em que achou, passou a ser falsa, e a Sub seguiu a sequência que vem após o Loop.
O NOT associado a uma booleana falsa retorna como valor Verdadeiro (True). E NOT associado a uma booleana verdadeira retorna como valor Falso (False).
Até o próximo tutorial.
Pingback: VBA™ para Excel™ 8: Busca e indicadores de passagem, variável booleana | Ricardo Trevisan
Pingback: VBA™ para Excel™ 10: busca linear cumulativa | Ricardo Trevisan
Pingback: VBA™ para Excel™ 14: vetores e matrizes | Ricardo Trevisan