Página 1 de 1

Exclusão de linhas com condição

Enviado: 15 Ago 2021 às 11:18
por KaiqueMello
Bom dia a todos!
Preciso excluir linhas que onde o conjunto de números que fazer o resultado do somarprod for zero.
Segue o documento com a explicação em anexo
exclusão com condição.xlsx

Re: Exclusão de linhas com condição

Enviado: 15 Ago 2021 às 11:25
por KaiqueMello
KaiqueMello escreveu: 15 Ago 2021 às 11:18 Bom dia a todos!
Preciso excluir linhas que onde o conjunto de números que fazer o resultado do somarprod for zero.
Segue o documento com a explicação em anexo
exclusão com condição.xlsx
Retificando pra fazer mais sentido.
Preciso excluir as linhas onde o conjunto de números faz o resultado do somarprod ser zero.
Segue o documento com a explicação em anexo
Fórmula usada no somarprod é que o Decio me passou em outro post : =SOMARPRODUTO(($A$2:A2=A2)*($C$2:C2))

Re: Exclusão de linhas com condição

Enviado: 15 Ago 2021 às 13:55
por osvaldomp
opção1
1. selecione qualquer célula em A1:E1
2. menu Dados | Filtro (ou Auto Filtro, conforme a versão do XL)
3. clique na setinha em E1 | desmarque Selecionar Tudo | marque 0
4. selecione a primeira linha visível abaixo da linha 1 | mantenha Shift pressionada e aperte End+seta para baixo
5. clique com o direito em qualquer parte da seleção | Excluir linha | desfaça o Filtro

opção2
1. selecione a coluna E
2. Ctrl+L | Localizar 0 | Substituir deixe vazia | Opções | marque Coincidir conteúdo ... | Substituir tudo | Fechar
3. F5 | Especial | Em branco | OK
4. clique com o direito em qualquer célula da seleção | Excluir | Linha inteira | OK

Se essa for uma operação repetitiva então você poderá gravar uma macro e colocar o código aqui no fórum se precisar de algum ajuste.

Re: Exclusão de linhas com condição

Enviado: 15 Ago 2021 às 21:16
por KaiqueMello
Boa noite osvaldomp, esse caso é um pouco mais complicado que isso, talvez eu não tenha expressado da forma correta, então vamos lá:
Eu preciso apagar todos os números que somados resultam no Zero como mostra a imagem abaixo, os números pintados de laranja no exemplo:
Imagem

O objetivo não é excluir apenas o Zero mas sim o conjunto de valores que somados resultam no Zero.
Note que a soma deles é atribuída a uma condição, que é o lote.
Estou enviando o arquivo novamente com a fórmula que estou usando.
exclusão com condição.xlsx
Desde já obrigado pela ajuda!

Re: Exclusão de linhas com condição

Enviado: 15 Ago 2021 às 22:32
por osvaldomp
Veja se agora entendi.

Cole uma cópia da fórmula abaixo em E2 e dê duplo clique no canto inferior direito daquela célula para estender a fórmula até a última linha da tabela (ou arraste).

Em seguida aplique o que eu sugeri no post anterior.
Código: Selecionar todos
=SE(OU(SOMARPRODUTO(($A$2:A2=A2)*($C$2:C2))=0;SOMARPRODUTO(($A$2:A3=A3)*($C$2:C3))=0);0;"")

Re: Exclusão de linhas com condição

Enviado: 15 Ago 2021 às 23:11
por KaiqueMello
Boa noite Osvaldo!
A fórmula funciona na maior parte mas por algum motivo ela não está funcionando totalmente:
Imagem
Aplicando o filtro em todos os números com Zero que a fórmula apresentou, a soma de todos eles aplicados no filtro não foi Zero, exemplo:
Imagem

Re: Exclusão de linhas com condição

Enviado: 16 Ago 2021 às 08:26
por osvaldomp
KaiqueMello escreveu: 15 Ago 2021 às 21:16
Eu preciso apagar todos os números que somados resultam no Zero como mostra a imagem abaixo, os números pintados de laranja no exemplo:
O objetivo não é excluir apenas o Zero mas sim o conjunto de valores que somados resultam no Zero.
Examinando o exemplo do seu print, o que eu entendi do critério é: lote igual e dois valores simétricos, sendo o valor negativo localizado logo abaixo do positivo.
Se não for isso, então esclareça.
E para facilitar, em lugar de postar uma planilha com 40 mil linhas, disponibilize uma com uma quantidade mínima de linhas que represente TODAS as variações e marque nela as linhas a serem excluídas com as necessárias explicações na própria planilha. Quem tentar te ajudar obviamente não vai conferir 40 mil linhas; eu conferi até a linha 14. ;)

Ainda, a linha que você comentou como "pulou essa linha" não se enquadra no critério, veja que a sua fórmula não retorna zero naquela linha.

Re: Exclusão de linhas com condição

Enviado: 16 Ago 2021 às 11:23
por KaiqueMello
Bom dia Osvaldo, primeiramente peço desculpas, pois além de eu não saber expressar corretamente o que eu precisava, também anexei um arquivo muito grande. :oops: :(

Estou enviando o arquivo bem enxuto e também com a devida explicação nele.

Novamente, desculpe-me
pasta1.xlsx

Re: Exclusão de linhas com condição

Enviado: 16 Ago 2021 às 13:51
por osvaldomp
Olá, @KaiqueMello .

Ok, me parece que agora ficou mais claro.

Resumindo com base no seu último exemplo e explicações: o critério para a exclusão das linhas pode ocorrer com dois valores (ex: 15 e -15), pode ocorrer com três valores (ex: 39, 30 e -69), pode ocorrer com quatro valores (ex: 11, 27, 1 e -39), sempre em linhas adjacentes na coluna C.
Você não informou se pode ocorrer com mais de quatro valores.

Nesse caso eu não vejo como aplicar uma solução manual, então sugiro uma solução por macro.

O que me ocorre de momento é um código que iria analisar toda a coluna E, a partir de cada célula com valor zero e aí buscaria na coluna C, de baixo para cima, os valores envolvidos naquela soma zero e excluiria tais linhas, independente da quantidade de linhas envolvidas.
Considerando a última planilha todas as linhas seriam excluídas.

Retorne se a solução por macro for aceitável pra você.

Re: Exclusão de linhas com condição

Enviado: 16 Ago 2021 às 14:22
por KaiqueMello
@osvaldomp, boa tarde!

Primeiramente, obrigado até agora!

Sim, isso pode ocorrer com mais de quatro valores, analisando a planilha, tem um caso que a soma ocorre até 36 vezes antes do resultado ser zero.
O que me ocorre de momento é um código que iria analisar toda a coluna E, a partir de cada célula com valor zero e aí buscaria na coluna C, de baixo para cima, os valores envolvidos naquela soma zero e excluiria tais linhas, independente da quantidade de linhas envolvidas.
Considerando a última planilha todas as linhas seriam excluídas.
Se houver essa possibilidade, com certeza será ótimo, independente se for por macro ou manual.
A única coisa que gostaria de saber por macro, é se antes de ele realizar a exclusão, eu posso ver se a conta vai bater (dar "0"), antes das linhas serem excluídas.
Obrigado!

Re: Exclusão de linhas com condição

Enviado: 16 Ago 2021 às 17:38
por osvaldomp
Olá, @KaiqueMello .
Seguem as dicas sobre instalação e operação da macro. Desconsidere caso você já domine.
Instale uma cópia do código abaixo em um módulo comum, assim:
1. copie o código daqui
2. a partir da planilha em que estão os dados tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor / Inserir / Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

para rodar o código:
6. tecle 'Alt+F8' / selecione a macro correspondente / Executar, ou insira um botão na planilha e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 / Opções).
Essas três opções para rodar o código podem ser implantadas isoladamente ou em conjunto.
Código: Selecionar todos
Sub ExcluiLinhas()
 Dim z As Long, v As Long
  Application.ScreenUpdating = False
  [E:E] = ""
  z = Cells(Rows.Count, 1).End(3).Row + 1
  Range("E2:E" & z).Formula = "=SUMPRODUCT((A$2:A2=A2)*(C$2:C2))"
  Range("E2:E" & z).Value = Range("E2:E" & z).Value
  Do
   z = [E:E].Find(What:=0, lookat:=xlWhole, after:=Cells(z, 5), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row
   Do Until Application.Sum(Range(Cells(z, 3), Cells(z - v, 3))) = 0
    v = v + 1
   Loop
   Rows(z - v & ":" & z).Delete
   v = 0
   If Application.CountIf([E:E], 0) = 0 Then: [E:E] = "": Exit Sub
  Loop
End Sub
#
funcionamento - o código irá limpar a coluna E, irá inserir a sua fórmula naquela coluna e em seguida irá excluir as linhas conforme o critério estabelecido antes. Não coloque fórmulas na coluna E.
Testei o código no arquivo do seu primeiro post. Antes de rodar o código havia 39.499 linhas com dados na planilha e depois de rodar o código restaram 23.477 linhas com dados. Aqui roda em aprox 50 seg.
#
KaiqueMello escreveu: 16 Ago 2021 às 14:22 A única coisa que gostaria de saber por macro, é se antes de ele realizar a exclusão, eu posso ver se a conta vai bater (dar "0"), antes das linhas serem excluídas.
Não, mas você pode verificar de outra forma: antes de rodar o código coloque uma cópia desta fórmula em qualquer célula vazia da linha 1 (esta linha não será deletada)~~~> =SOMA(C:C) ~~~> irá retornar 37.786.827,43. Em seguida transforme a fórmula em valor (copiar/colar valor), assim a a planilha não irá recalcular a cada vez que uma linha for deletada pelo código, o que iria aumentar o tempo de execução.
Em seguida rode o código. Ao terminar a execução coloque uma cópia da mesma fórmula em outra célula vazia. Se o valor retornado for igual à soma antes de rodar o código isso mostra que a soma de tudo o que foi deletado é zero. ;)

Re: Exclusão de linhas com condição

Enviado: 16 Ago 2021 às 20:30
por KaiqueMello
@osvaldomp

Muito obrigado por tudo, deu certo aqui!

Apenas uma pergunta, restaram alguns valores simétricos positivos e negativos com o mesmo lote que se anulam, porém eles não estão sequenciais como mostra a imagem abaixo, existe uma forma de excluir esses valores, nesse caso o somarprod não é eficaz.
Imagem
Mas você resolveu o problema principal, essa é só uma dúvida a mais que faz parte do tópico.
OBS: como marco como resolvido?