1
resposta

Utilizando dois itens de busca

Nos exemplos nós temos busca definida por apenas um item, que seria a localidade. Mas se quisermos fazer com dois itens, localidade e plano, teria como? Tipo, gostaria que apenas cidade X com plano Y fosse pintada.

1 resposta

Olá Marcio!

Sim, é possível e seria necessário apenas três alterações no código.

Conforme foi visto em aula tem-se a Sub abaixo:

Sub exemplo_For()
    Dim cidade As String
    Dim tot_seg As Integer
    Dim total_val As Double
    Dim linha As Integer
    cidade = InputBox("Digite a Cidade a ser Consultada")
    'absoluta
    Range("a6:g67").Interior.ColorIndex = 19
    'relativa
    Range("a6").Select
    Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Interior.ColorIndex = 19
    'para variavel comecando em 6 até 36 - executar comandos
    For linha = 6 To 36
        If UCase(Cells(linha, 2)) = UCase(cidade) Then
            Range(Cells(linha, 1), Cells(linha, 7)).Interior.ColorIndex = 24
            tot_seg = tot_seg + 1
            tot_val = tot_val + Cells(linha, 7)
            Debug.Print "TOT_Seg - " & tot_seg
            Debug.Print tot_val
        End If
    Next
    Range("a6").Select
    MsgBox "Total de Segurados em " & cidade & " - " & tot_seg & vbCrLf & _
    "Valor Total: " & Format(tot_val, "currency"), vbInformation, "Resultado Obtido"
End Sub

Nela temos apenas uma restrição (cidade) como é visto na linha do IF:

If UCase(Cells(linha, 2)) = UCase(cidade) Then

e para que essa restrição ocorra é pedido ao usuário qual o tipo de cidade que quer ser analisada, definindo a variável e uma InputBox:

Dim cidade As String
cidade = InputBox("Digite a Cidade a ser Consultada")

Então, se você deseja utilizar de duas condições é necessário a criação de uma segunda variável, uma segunda solicitação de input ao usuário e modificar o condicional IF para que ele faça a ação apenas se a condição 1 (cidade) E a condição 2 (plano, como vc solicitou) sejam verdadeiras simultaneamente.

Veja exemplo abaixo.

1) Crie a segunda variável

Dim plano As String

2) Solicite o segundo input

plano = InputBox("Digite o Plano a ser Consultado")

3) Modifique a condicional IF, considerando "Cidade" e "Plano"

If UCase(Cells(linha, 2)) = UCase(cidade) And UCase(Cells(linha, 3)) = UCase(plano) Then

*Obs: perceba que a agora para plano usa-se Cells(linha, 3) e não Cells(linha, 2) como em cidade. Isso ocorre devido ao fato da coluna do plano ser a terceira coluna (também conhecida como coluna "C") da planilha em questão e não mais a coluna 2 (ou coluna B).

Segue abaixo o código com todas as modificações:

Sub exemplo_For_Modificado()
    Dim cidade As String
    Dim plano As String
    Dim tot_seg As Integer
    Dim total_val As Double
    Dim linha As Integer
    cidade = InputBox("Digite a Cidade a ser Consultada")
    plano = InputBox("Digite o Plano a ser Consultado")
    'absoluta
    Range("a6:g67").Interior.ColorIndex = 19
    'relativa
    Range("a6").Select
    Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Interior.ColorIndex = 19
    'para variavel comecando em 6 até 36 - executar comandos
    For linha = 6 To 36
        If UCase(Cells(linha, 2)) = UCase(cidade) And UCase(Cells(linha, 3)) = UCase(plano) Then
            Range(Cells(linha, 1), Cells(linha, 7)).Interior.ColorIndex = 24
            tot_seg = tot_seg + 1
            tot_val = tot_val + Cells(linha, 7)
            Debug.Print "TOT_Seg - " & tot_seg
            Debug.Print tot_val
        End If
    Next
    Range("a6").Select
    MsgBox "Total de Segurados em " & cidade & " - " & tot_seg & vbCrLf & _
    "Valor Total: " & Format(tot_val, "currency"), vbInformation, "Resultado Obtido"
End Sub

Ai o raciocínio segue para quantas outras restrições você quiser, sempre lembre de criar a variável, perguntar ao usuário o que ele deseja filtrar e coloque a condicional no IF.

O mesmo pode ser feito caso você queira que ele busque por 3 condições: if C1 and C2 and c3 then e assim vai...

Espero ter ajudado.

Abraços

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software