Exercício Resolvido
Resolvendo o Problema
-
Iniciamos definindo os argumentos da função e o tipo de dados de saída
Function CountPrime(Procurar As Range) As Integer
-
Declaramos as variáveis
Dim i As Integer
Dim Casa As Range
Dim ValCasa As Integer
Dim Divisor As Integer
Dim Cont As Integer
-
Criamos loop For Each para cada célula do argumento "Range" da função. Definimos a variável ValCasa como valor de um elemento do "Range" do loop, e atribuímos 0 a variável Divisor
For Each Casa In Procurar
ValCasa = Casa.Value
Divisor = 0
-
Criamos um loop For Next dentro do loop anterior.
For i = 1 To ValCasa
-
Dentro deste loop introduzimos uma condicional If Then para calcular o número de divisores do número.
If ValCasa Mod i = 0 Then
Divisor = Divisor + 1
-
Colocamos outra condicional If Then, para quando o número de divisores se igualar a três, ir para o próximo número (otimizando assim o tempo de execução da função).
If Divisor = 3 Then
Exit For
End If
End If
Next i
-
Em outra condicional, caso o número tenha apenas dois divisores, somamos uma unidade ao contador Cont e seguimos para a próxima célula
If Divisor = 2 Then
Cont = Cont + 1
End If
Next Casa
-
Terminado o loop For Each definimos o total de números primos do intervalo como a variável Cont
CountPrime = Cont
Código Consolidado
Function CountPrime(Procurar As Range) As Integer
Dim i As Integer
Dim Casa As Range
Dim ValCasa As Integer
Dim Divisor As Integer
Dim Cont As Integer
For Each Casa In Procurar
ValCasa = Casa.Value
Divisor = 0
For i = 1 To ValCasa
If ValCasa Mod i = 0 Then
Divisor = Divisor + 1
If Divisor = 3 Then
Exit For
End If
End If
Next i
If Divisor = 2 Then
Cont = Cont + 1
End If
Next Casa
CountPrime = Cont
End Function
Sub Verificacao()
Dim Procurar As Variant
Dim i As Integer
Dim Casa As Variant
Dim Divisor As Integer
Dim ValCasa As Integer
Set Procurar = Range("A3:C103")
For Each Casa In Procurar
ValCasa = Casa.Value
Divisor = 0
For i = 1 To ValCasa
If ValCasa Mod i = 0 Then
Divisor = Divisor + 1
If Divisor = 3 Then
Exit For
End If
End If
Next i
If Divisor = 2 Then
Casa.Interior.Color = RGB(140, 198, 63)
End If
Next Casa
End Sub
SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.
Excel ® é uma marca registrada da Microsoft Corporation.
© 2024 SuperExcelVBA | SOBRE