Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
Por KaiqueMello
Posts
#66347
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
Você não está autorizado a ver ou baixar esse anexo.
#66348
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))
Por osvaldomp
#66350
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.
KaiqueMello agradeceu por isso
#66363
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!
Você não está autorizado a ver ou baixar esse anexo.
Por osvaldomp
#66366
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;"")
KaiqueMello agradeceu por isso
#66367
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
Por osvaldomp
#66375
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.
KaiqueMello agradeceu por isso
#66378
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
Você não está autorizado a ver ou baixar esse anexo.
Por osvaldomp
#66380
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ê.
KaiqueMello agradeceu por isso
#66381
@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!
Por osvaldomp
#66382
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. ;)
KaiqueMello agradeceu por isso
#66385
@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?
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord