Notifications
Clear all

Destacar duplicatas somente a partir da segunda ocorrência.

18 Posts
3 Usuários
0 Reactions
3,274 Visualizações
(@vic7or)
Posts: 94
Estimable Member
Topic starter
 

Fala galera do Planilhando.com.br
Sou novo na área do Excel..

E, hoje, me deparo com um problema de destacar valores duplicados de uma tabela.

O ambiente do problema é o seguinte:

  • Possuo registros desde 2009.
  • São registros que, ao longo dos anos, seguem registrando o status de cada item.
  • Cada item, pode ou não aparecer no mesmo ano, ou nos anos seguintes.
  • Ou seja, os mesmos itens que apareceram em 2009, com um status, pode aparecer em 2012, com outro status.
  • Assim como, um pode aparecer em 2009 com um status, 2010 com outro, 2011 com outro, 2012.. ......
  • Bem como, um item pode aparecer em 2012 e não aparecer em 2013. Assim como um de 2013 pode aparecer pela primeira vez.
  • O caso, é que agora, foi-me solicitado para tentar descobrir o Status de origem de cada item.
    Um item "A", que está no ano de 2013, teve ocorrências em todos os anos anteriores (ou seja, 5 vezes).
    Desta maneira, deve-se manter o Status atual desse item e, também, ao lado, buscar o status de origem deste item.
    E, se por acaso o item aparecer como primeira ocorrência, o status de origem permanecer em branco (ou apenas copiar o status da ocorrencia atual).

    Um problema gigante? Não sei. Mas é um dos meus primeiros trabalhos.

    Estou utilizando a seguinte função:

    =SE(CONT.SE($A$1:A;H)>1;H***;"")

    O que faz?
    Busca os registros duplicados.
    Tranquilo.
    Se não for duplicado, ele deixa em branco. Se não, ele escreve o valor lá.
    O caso, é que queria destacar apenas a partir do segundo registro duplicado e deixar o valor "distinto" fora desse destaque.

    Será que fui claro?

    Se eu conseguir destacar a partir da SEGUNDA ocorrencia, fica tranquilo.
    Pois conseguirei ordenar por data, assim, poderei filtrar somente as ocorrencias distintas.

    Já fizeram algo parecido?

    Estou pesquisando por aqui, se puderem ajudar, estou aberto a ideias e dicas.
    Quando eu encontrar a solução, colocarei aqui.

     
    Postado : 22/05/2013 6:10 am
    (@fernandofernandes)
    Posts: 43750
    Illustrious Member
     

    Cara, já imaginei uma solução, até meio parecida com o que vc mesmo propôs. Mas para aplicar e ver se funciona, difícil sem aplicar direto no seu modelo.
    Sei q pode haver dados confidenciais, tenta trocar os numeros por valores aleatórios, ou dar uma boa detonada na informação, exceto nas colunas onde aplicaríamos a solução.

    E disponibilize aqui seu arquivo, por favor não esqueça de compactar, de acordo com as regras do site.

    Valeu,

     
    Postado : 22/05/2013 6:40 am
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    Opa, Fernando.
    Olha só.. aconteceu algo estranho..
    A planilha tem, aproximadamente 70.000 registros.
    E, aquela formula destacava (em outra coluna), apenas os valores duplicados.

    O problema, como apresentado anteriormente, é que ele destacava também, justamente o primeiro valor (que seria o "distinto").

    Ao copiar para uma outra planilha, uns 50 registros para apresentar aqui, e mudar os valores... a formula funcionou.
    ...pois é.
    Ela passou a destacar apenas do segundo registro em diante.
    ...
    não me pergunte como.
    Pois apenas copiei e colei a formula pra outra planilha.

    O que eu fiz, foi alterar, agora, de =SE(CONT.SE($A$2:A;A)>1;A;"") para =SE(CONT.SE($A$2:A;A)=1;A;"DUPLICATED").

    Ou seja, na alteração, eu disse que quero APENAS os valores que aparecem uma unica vez. Os outros, que fiquem como "Duplicado".

    ...e passei pra planilha maior... e funcionou.

    Não me pergunte o pq.

    =/

    Mas, qual era a outra alternativa que você estava pensando?

     
    Postado : 22/05/2013 7:06 am
    (@gtsalikis)
    Posts: 2373
    Noble Member
     

    As duas fórmulas funcionaram pra mim.

     
    Postado : 22/05/2013 7:32 am
    (@fernandofernandes)
    Posts: 43750
    Illustrious Member
     

    na sua ideia original, vc tinha falado de itens e de statuses. Neste modelo que você subiu, só há itens, sem status.
    Eu ia escrever uma fórmula bacana cujo intervalo cresce conforme a fórmula "desce", esta fórmula traria o status original (ou seja, da primeira ocorrência) a partir da segunda ocorrência. E na primeira ocorrência, talvez mostraria um indicativo de que é a primeira ocorrência daquele item, ou deixar vazio mesmo.

    Mas se a sua nova forma já deu certo, legal. Qualquer coisa estamos aí!

    Abraço,

     
    Postado : 22/05/2013 7:33 am
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    Tava dando o exemplo apenas das duplicadas.

    Agora fiz um esquema aqui, com STATUS, por exemplo.

    O STATUS apresentado aí, tem valor fictício.

    Os itens apresentam mais de 10 status variáveis.
    Não quer dizer que o primeiro Status seja sempre, por ordem, "A".

    Como dito, ele é um valor fictício no exemplo.

    O importante, é buscar o primeiro valor do status da primeira ocorrência.

    Vou procurar uma fórmula em PROCV para trazer sempre a primeira ocorrência de STATUS desse ITEM.

    Mas, fiquei interessado em saber como você utilizaria essa idéia, Fernando.
    Se tiver paciencia para nos mostrar, eu estaria grato.
    Att.

     
    Postado : 22/05/2013 8:19 am
    (@fernandofernandes)
    Posts: 43750
    Illustrious Member
     

    Então, pelo que eu entendi da sua ideia original, uma tabela, com sei lá quantas colunas, mas uma chamava-se ITEM e outra STATUS.
    E você precisava a partir da segunda ocorrência de um item, uma fórmula que traga o status original, ou seja, o status da primeira ocorrência dele.

    Isso é o que este modelo anexado faz.

     
    Postado : 22/05/2013 8:40 am
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    Sensacional.

    =SE(CONT.SE($A$2:$A2;$A2)=1;"ITEM NOVO";PROCV($A2;$A$2:$B2;2;0))

    Ainda estou estuando a utilização do PROCV, mas pelo que já vi ele encontrará o primeiro valor que ele verá.
    Sendo assim, sua formula procura quantas vezes a ocorrência aparece, e se for mais de um, executa o procv que procurará a primeira ocorrência desse valor.

    Obrigado, Fernando.

    Agora, vou trabalhar em cima da sua solução, pois adicionarei condições à ela.

    Mas isso, eu vou procurar fazer por conta própria. Se eu tiver algum problema, eu procuro o auxílio de vocês.

    O que tentarei fazer é o seguinte (agora, com essa solução apresentada):

    Para cada ANO, há uma aba da planilha.
    Pois, se juntá-las, terei mais de 200.000 registros e se tornará uma grande dor de cabeça trabalhar com tantos registros.
    Cada ABA possui o mesmo cabeçalho de colunas. Logo, estão totalmente padronizadas.
    Para incluir o problema anterior (destacar as primeiras ocorrencias de status e apontar quais são novas ocorrencias dos ITENS), gostaria de fazer com que aquela solução oferecida pelo Fernando Fernandes percorresse todas as abas, de 2009 à ATUAL, e valesse em todas as abas. É possível?
    Logicamente, a de 2009 não precisará procurar em 2010 por valores repetidos. Mas, a 2010 precisará percorrer as linhas de 2009. E, no fim das contas, 2013, percorrer às de 2012 para 2009.

    É possível fazer uma função que encaixe-se nessa idéia?

    A segunda condição que devo aplicar, é mais fácil:
    utilizar a condição utilizada =SE(CONT.SE($A$2:$A2;$A2)=1;"ITEM NOVO";PROCV($A2;$A$2:$B2;2;0)), mas buscando por ordenação de data. Pois o PROCV busca o primeiro registro. Mas, nem sempre o primeiro registro quer dizer que seja a primeira data de ocorrência.

    Enfim.
    Vou estudar como executar essas duas condições.

    A primeira, eu não sei nem por onde começar. A segunda, já é mas light.
    Obrigado, galera.

     
    Postado : 22/05/2013 9:51 am
    (@fernandofernandes)
    Posts: 43750
    Illustrious Member
     

    Minha sugestão é a seguinte.... o Excel aguenta 1 milhão de linhas. Trabalhar com os dados em planilhas diferentes vai te dar dor de cabeça, aliás, muita dor de cabeça. Por outro lado, se tiver tudo na mesma planilha, é possível fazer uma fórmula só, procurando qual a menor data da coluna de datas, para o item procurado. E assim retornar o primeiro status, não em posição, mas verificando a data mais antiga...

    Não é uma formula simples, como você pode ver abaixo, e só funciona se você topar colocar tudo numa mesma planilha.
    E mais, esta nova fórmula atenderá as suas duas novas solicitações.

    Me empolguei na criação do modelo.... não se assuste com a fórmula matricial grandona que eu criei:

    =SE(MAIOR(($A$2:$A$1001*($B$2:$B$1001=$B2));CONT.SE($B$2:$B$1001;$B2))&$B2=$A2&$B2;"ITEM NOVO";ÍNDICE($C$2:$C$1001;CORRESP(MAIOR(($A$2:$A$1001*($B$2:$B$1001=$B2));CONT.SE($B$2:$B$1001;$B2))&$B2;$A$2:$A$1001&$B$2:$B$1001;0);1))

    Finalizando com Ctrl+Shift+Enter (pq é matricial)

    Segue arquivo anexo, considerando-se todos os anos numa mesma planilha. Mantive a solução anterior que pega o status do primeiro registro, e criei uma nova coluna de "status original", utilizando a fórmula acima, que traz o status da primeira ocorrência cronológica, que pode não ser necessariamente o primeiro registro do item).

    Nota importante:
    1) Vc vai ter dúvidas. Quando tiver, procure por Funções Matriciais no forum.
    2) Eu fixei os intervalos para até linha 1001. Seria interessante vc aprender o Intervalo Dinâmico, (viewtopic.php?f=20&t=98), para que nunca mais precise alterar os limites das fórmulas, para enxergar linhas adicionais.

    F.F.

     
    Postado : 22/05/2013 11:19 am
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    Caraca, que fórmula.
    Vou precisar de um tempo pra digerir.
    hahaha

    Vou dar uma olhada direitinho e já volto.

     
    Postado : 22/05/2013 11:43 am
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    É isso mesmo, cara.
    A fórmula trás, mesmo estando a data de forma aleatória, ele busca de forma cronológica e trás o status primário do item.

    Vou estudar essas sugestões que você deu nos links aí, e estudar o uso desse INDICE aí.

    Logo mais eu trago a leitura dessa fórmula pra ver se entendi.

     
    Postado : 22/05/2013 11:54 am
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    Mano, to com dor de cabeça de tentar entender essa formula @_@"

     
    Postado : 23/05/2013 1:15 pm
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     
    =SE(MAIOR(($A$2:$A$1001*($B$2:$B$1001=$B2));CONT.SE($B$2:$B$1001;$B2))&$B2=$A2&$B2;"ITEM NOVO";ÍNDICE($C$2:$C$1001;CORRESP(MAIOR(($A$2:$A$1001*($B$2:$B$1001=$B2));CONT.SE($B$2:$B$1001;$B2))&$B2;$A$2:$A$1001&$B$2:$B$1001;0);1))

    Finalizando com Ctrl+Shift+Enter (pq é matricial)

    Cara, to me matando muito pra entender essa coisa toda. ha ah ha ha

    Mas funcionou direitinho.
    ele tá calculando a maior ocorrencia da data, usando o "K" como a contagem de ocorrências da célula. Ou seja, sempre vai ser a mais antiga. Até aí, perfeito.
    o caso é que não to entendendo nada depois disso

    CONT.SE($B$2:$B$1001;$B2))&$B2=$A2&$B2

    ", a parte "&$B2=$A2&$B2"
    Pelo que tá parecendo, ele quer saber se a menor data do item é igual a CONCATENAÇÃO da Data com o Item?

    Minha cabeça explodiu aí.

    To tentando entender esta fórmula para realizar um novo procedimento, que buscará o status ANTERIOR ao atual.

    Pode me dar a dica da parte que eu destaquei pra você? Obrigado. Se quiser, eu posto lá no tópico novamente essa dúvida.

     
    Postado : 23/05/2013 2:26 pm
    (@vic7or)
    Posts: 94
    Estimable Member
    Topic starter
     

    Vamos dizer que temos 5 registros.
    com data crescente, mesmo

    01.01.2013 - Item A - Status 1
    02.01.2013 - Item B - Status 2
    03.01.2013 - Item C - Status 3
    04.01.2013 - Item D - Status 4
    05.01.2013 - Item E - Status 5

    Digamos que a data é a coluna A, item é a coluca B e status a C. Logo...

    =MAIOR(($A$2:$A$1001*($B$1:$B$5=$B2));CONT.SE($B$1:$B$5;$B2))&$B1=$A1&$B1

    Serie equivalente a verificar as datas de toda as linhas e, o "CONT.SE" é o valor da posição que ele quer procurar.
    Logo, o CONT.SE contará todas as ocorrencias dessa linha (item) e, será de "5". Então, ele procurará o maior valor na quinta ordem = A DATA mais antiga.
    Perfeito.
    Então,

    =CONT.SE($B$1:$B$5;$B1))&$B1=$A1&$B1

    é equivalente à 5&$B1=$A1&$B1.

    E como 5ITEM 1 é igual a 01.01.2013ITEM1 ?
    Ou ele tá dizendo que esse 5 == 01.01.2013 ?

     
    Postado : 23/05/2013 2:43 pm
    (@fernandofernandes)
    Posts: 43750
    Illustrious Member
     

    vc reabriu esse tópico?

     
    Postado : 23/05/2013 10:04 pm
    Página 1 / 2