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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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