Ir ao conteúdo
  • Cadastre-se

Excel Macro Loop com If


Ir à solução Resolvido por R0DR1G0_CWB,

Posts recomendados

Prezados,
bom dia,

Tenho uma nova dúvida, acredito que essa é mais fácil...

Preciso fazer uma lógica onde calcule 1 valor menos o valor seguinte, CASO a conta dar 0, ir na outra coluna de Status e marcar nas 2 linhas como "Ok", caso der diferente de 0, marcar como "erro"...

Vejam meu anexo, acredito que ficaria mais fácil o entendimento...

Lembro que há um tempo atrás me ajudaram com um problema parecido com o seguinte código:

 

Sub conciliar()
On Error Resume Next
Dim ul As Long
'inicio:
ul = Planilha1.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To ul
conf1 = CStr(Cells(i, 7).Value & Cells(i, 8).Value)
For j = 2 To ul
If CStr(Cells(j, 7).Value & (Cells(j, 8).Value) * -1) = conf1 And Cells(j, 7).Row <> Cells(i, 7).Row Then
Cells(j, 2).EntireRow.Interior.Color = 65535
Cells(i, 2).EntireRow.Interior.Color = 65535
'GoTo inicio
End If
Next j
Next i
MsgBox "Conciliação realizada com Sucesso!", vbExclamation, "Sucesso!"
End Sub

Obrigado!

teste.xlsx

Link para o comentário
Compartilhar em outros sites

mas se você verificar o arquivo dos valores até o final, vão ter casos que tem mais positivos que negativos... 

A ideia é que depois de rodar a macro, tudo que estiver com status Ok, a soma da coluna dar zero

 

Veja como consegui fazer até agr por macro... 

 

Consegue me ajudar a corrigir ?

teste.zip

Link para o comentário
Compartilhar em outros sites

Não vejo problemas na sua macro, para o propósito dela está funcionando perfeitamente.

 

Em questão da soma não tem como dar zero mesmo, pois quando você somar por exemplo -2 +2 dá 0... mas se você somar -2 + -2 o resultado será o -4, ou seja para a soma da coluna igualar a 0, será necessário tratar boa parte dos valores.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Bom dia,

 

na verdade não, segue o código que realmente me ajudou.

 

Sub Status()
Dim ul As Long
inicio:
ul = Planilha1.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To ul
If Planilha1.Range("B" & i) <> "OK" And Planilha1.Range("A" & i).Value = Planilha1.Range("A" & i + 1).Value * -1 Then
Planilha1.Range("B" & i).Value = "OK"
Planilha1.Range("B" & i + 1).Value = "OK"
End If
Next i
For i = 2 To ul
If Planilha1.Range("B" & i).Value = "" Then
Planilha1.Range("B" & i).Value = "Erro"
End If
Next i
End Sub

Mesmo assim, obrigado pela ajuda cara!

 

Link para o comentário
Compartilhar em outros sites

Amigos, bom dia,

Eu havia marcado esse tópico como resolvido, porém analisando de novo a planilha, me deparei que ainda constam valores que deveriam estar com o status 'OK' mas não ficaram... É como se o código só faz o calculo quando há um número positivo seguido de um negativo, quando há por exemplo, dez números positivos e depois de outros números aleatórios terem esses mesmos 10 números negativos, ele não altera o status deles...

 

Vejam meu anexo por favor...

 

Alguém consegue me ajudar ?

teste.zip

adicionado 7 minutos depois

Em uma outra época, um amigo fez um código em vba para mim, onde conciliava valores que se repetiam na mesma coluna, por exemplo, há 10 valores positivos e 10 valores negativos, dai essa macro ela pintava todos os 20 valores de uma cor específica....

 

Não sei se daria para adptar esse código para minha nova necessidade...

Segue:

Sub conciliar()
On Error Resume Next
Dim ul As Long
'inicio:
ul = Planilha1.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To ul
conf1 = CStr(Cells(i, 7).Value & Cells(i, 8).Value)
For j = 2 To ul
If CStr(Cells(j, 7).Value & (Cells(j, 8).Value) * -1) = conf1 And Cells(j, 7).Row <> Cells(i, 7).Row Then
Cells(j, 2).EntireRow.Interior.Color = 65535
Cells(i, 2).EntireRow.Interior.Color = 65535
'GoTo inicio
End If
Next j
Next i
MsgBox "Conciliação realizada com Sucesso!", vbExclamation, "Sucesso!"
End Sub

 

Link para o comentário
Compartilhar em outros sites

@R0DR1G0_CWB

Fala cara, beleza? 

 

Eu testei o seu código, ele praticamente da o mesmo 'erro'... Veja meu anexo, se você pegar por exemplo, depois de rodar a macro do status, o valor 12,5... Vai encontrar alguns valores desse negativo mas cade o positivo ?

 

A ideia é deixar com o status OK, somente os números que se cruzam, ou seja, esses que estão com ok, na verdade deveriam estar com erro...

Fazendo essa conciliação no olho, verifiquei que o número de Errados é de 178, ou seja, são alguns que estão com 'ok' mas que na verdade deveriam estar como 'erro' também...

Pasta1.zip

Link para o comentário
Compartilhar em outros sites

Bom dia Rodrigo!

Obrigado pelo retorno até aqui!

 

Verificando com o resultado que foi feito na mão, alguns pequenos valores não entraram na macro, fiz alguns testes na planilha 2, verifique meu anexo por favor...

 

A soma da coluna Erro teria que dar: 169.573,43

 

Obrigado!!

image.png

Teste versão Feito.zip

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!