Ir ao conteúdo

Excel vba VERIFICAÇÃO CONDICIONAL


Netrox92

Posts recomendados

Postado

Ola,

Gostaria mais uma vez da ajuda de vocês.

Gostaria de uma rotina que verifica se os valores das celulas ("N2:N6") são TODOS iguais.

Até essa parte eu consegui fazer utilizando o seguinte código:

If Range("N2") <> Range("N3") Or Range("N2") <> Range("N4") Or Range("N2") <> Range("N5") Or Range("N2") <> Range("N6") Or Range("N3") <> Range("N4") Or Range("N3") <> Range("N5") Or Range("N3") <> Range("N6") Or Range("N4") <> Range("N5") Or Range("N4") <> Range("N6") Or Range("N5") <> Range("N6") Then

porém não é sempre que todas as celulas são preenchidas e ai que apareceu meu problema.

Quando ele verificou o valor das celulas ele considera que as celulas em branco são diferente das que estão preenchidas.

Eu preciso que ele considere sómente as que estão preenchidas

Ex1:

Os valores das celulas "N2", "N3" e "N4" estão preenchidos

e as celulas "N5" e "N6" estão em branco

Nesse caso ele verificaria se os valores das celulas N2, N3 e N4 são TODOS IGUAIS

e nao verificaria o valor das celulas N5 e N6

Ex2:

Os valores das celulas "N2", "N3" estão preenchidos

e as celulas "N4", "N5" e "N6" estão em branco

Nesse caso ele verificaria se os valores das celulas N2, N3 são TODOS IGUAIS

e nao verificaria o valor das celulas N4, N5 e N6

Ex3:

Os valores das celulas "N2", "N3", "N4", "N5" e "N6" estão todos preenchidos

nesse caso ele verificaria todas as celulas

Eu acredito que a melhor formula a ser usada seria um Loop, porém eu nao sei muito bem como funciona e também nao sei se é mesmo a melhor formula para esse caso

Se alguem puder me ajudar ficarei grato

Obrigado

Postado

Boa noite!!

Preciso entender o que quer...

Você quer dizer se..

N2-----N3-----N4-----N5-----N6-----Resultafo

1-------2-------2------2------2-------FALSO

2-------2-------2------2------2-------VERDADEIRO

E caso tenha células vazias então verificar somente as que estão com valores.

N2-----N3-----N4-----N5-----N6-----Resultafo

1-------2-------2------"vazia"------2-------FALSO

2------"vazia"-------2------2------2--------VERDADEIRO

É isso que queres?????????????????

Postado
Sub VerificaIguais()
If Application.CountA(Range("N2:N6")) < 2 Then Exit Sub
Range("N2:N6").SpecialCells(xlCellTypeConstants).Select
If Application.CountIf(Range("N2:N6"), _
ActiveCell.Value) = Selection.Count Then
MsgBox "iguais"
Else: MsgBox "desiguais"
End If
End Sub

Postado

Ola osvaldomp,

Obrigado pela resposta!

O código que você me passou funcionou, porém eu nao entendi muito bem ele...

voce poderia me dar uma explicada rapida? Isso me ajudaria caso seja necessario eu fazer alguma alteração na planilha ou para adaptar ele a alguma outra situação que possa aparecer

Outra pergunta é:

No lugar do código que está escrito

If Application.CountA(Range("N2:N6")) < 2 Then Exit Sub

existe alguma maneira de trocar o ExitSub e escrever alguma coisa que faça com que a proxima linha do código a ser lida pelo programa seja uma linha que esteja bem mais embaixo??

Obrigado mais uma vez a você e a todos do forum que tem me ajudado muito

Abraços

Postado

o post tá meio grandão, se cansar leia em capítulos...

1. a sua questão - em um intervalo verificar se as células preenchidas têm conteúdos iguais

2. solução sugerida - um caminho para se concluir se todas as células preenchidas têm conteúdos iguais é, adotar o conteúdo de uma delas como critério, contar em quantas células do intervalo o critério está presente e em seguida comparar com a quantidade de células preenchidas.

3. ex.: células preenchidas - 4, sendo a célula N2 = jacaré

adotando 'N2' como critério, se houver 4 células iguais a 'jacaré' então a solução sugerida retorna VERDADEIRO, se não, FALSO.

4. Qual célula adotar como critério? Resp. - qualquer célula preenchida.

Como encontrar uma célula preenchida?

5. solução por macro - o comando 'SpecialCells(xlCellTypeConstants).Select' seleciona as células preenchidas em um intervalo especificado. Em uma seleção, a célula ativa é sempre a célula do canto superior esquerdo da seleção. Utilizando essa regra esmagamos 2 baratas com uma só sapatada...(nojento !).

Barata nº 1 - encontramos uma célula preenchida, com nome,cic, rg, cep e...

Barata nº 2 - podemos ler seu conteúdo e adotá-lo como critério.

Sub VerificaIguais()
[COLOR="Teal"] 'não executa se houver menos de 2 células preenchidas[/COLOR]
If Application.CountA(Range("N2:N6")) < 2 Then Exit Sub

[COLOR="Teal"] 'seleciona as células preenchidas[/COLOR]
Range("N2:N6").SpecialCells(xlCellTypeConstants).Select

[COLOR="Teal"]'conta quantas células têm conteúdos iguais ao _
conteúdo da célula ativa, adotado como critério _
e compara com a quantidade de células preenchidas, _
as quais estão selecionadas[/COLOR]
If Application.CountIf(Range("N2:N6"), _
ActiveCell.Value) = Selection.Count Then

[COLOR="Teal"]' verdadeiro[/COLOR]
MsgBox "iguais"

[COLOR="Teal"] 'falso[/COLOR]
Else: MsgBox "desiguais"

End If
End Sub

6. solução por fórmula - seguindo raciocínio idêntico ao que e foi seguido na solução por macro

retorna o conteúdo da primeira célula preenchida no intervalo, que será adotado como critério - fórmula matricial

=ÍNDICE(N2:N6;CORRESP(VERDADEIRO;N2:N6<>"";0))

conta as células que atendem ao critério

=CONT.SE(N2:N6;critério)

conta as células preenchidas no intervalo

=CONT.VALORES(N2:N6)

as três acima são ilustrativas do caminho seguido, basta utilizar esta, resultante da união das 3 fórmulas acima, e mais a comparação - fórmula matricial

retorna VERDADEIRO OU FALSO

=SE(CONT.VALORES(N2:N6)<2;"";(CONT.SE(N2:N6;ÍNDICE(N2:N6;CORRESP(VERDADEIRO;N2:N6<>"";0)))=CONT.VALORES(N2:N6))

No lugar do código que está escrito

If Application.CountA(Range("N2:N6")) < 2 Then Exit Sub

existe alguma maneira de trocar o ExitSub e escrever alguma coisa que faça com que a proxima linha do código a ser lida pelo programa seja uma linha que esteja bem mais embaixo??

... Then GoTo embaixo
...
...
...
embaixo:
...
...

End Sub

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!