Ir ao conteúdo
  • Cadastre-se

Excel Excluir valores repetidos VBA


Posts recomendados

Bom dia pessoal, tudo bem?

Preciso de uma ajuda, tenho um código (elaborado pela @Midori) onde utiliza o Procv, porém eu preciso de um complemento, após rodar o código alguns valores se repetem inclusive o erro #N/D. Eu gostaria de acrescentar nesse código uma linha que excluísse os valores repetidos e esse erro.Botão incluir1.xlsx

 

Botão incluir1.xlsx

Link para o comentário
Compartilhar em outros sites

@Zamboni_du Esta é a edição que comentei, veja se assim resolve,

 

'KMinicial C10, 6
Area.FormulaR1C1 = _
    "=IF(R[-1]C[-13]=RC[-13],"""",IF(ISERROR(" & _
    "VLOOKUP(RC[-13],Entregas!R7C5:R26C14,10,0)),""" & _
    """,VLOOKUP(RC[-13],Entregas!R7C5:R26C14,10,0)))"
'KMFinal C11, 7
Area.Offset(0, 1).FormulaR1C1 = _
    "=IF(R[-1]C[-14]=RC[-14],"""",IF(ISERROR(" & _
    "VLOOKUP(RC[-14],Entregas!R7C5:R26C15,11,0)),""" & _
    """,VLOOKUP(RC[-14],Entregas!R7C5:R26C15,11,0)))"

 

Link para o comentário
Compartilhar em outros sites

@Zamboni_du A alteração vai resolver o problema da fórmula e entendo que é só isso que precisa fazer. Mas se a planilha já tem dados errados terá que apagar tudo e começar novamente, como eu te expliquei no outro tópico, já que a correção passará a ter efeito nos dados após a edição do código porque a planilha Entregas está sempre mudando a NF. E o resultado é o que a macro faz com a alteração correta.

 

Se ainda não conseguiu resolver anexe a planilha com a macro editada.

Link para o comentário
Compartilhar em outros sites

@Zamboni_du Testei aqui com essas duas sequencias e funcionou. Estes foram os passos:

 

1) Apaguei tudo na da planilha Dados e deixe apenas os nomes das colunas.

2) Colei na planilha Dados a tabela das NFs de 5341-1 até 5346-1.

3) Deixei a planilha Entregas com a tabela das notas 5341-1 até 5346-1.

4) Rodei a Macro. Com isso as colunas X e Y da planilha Dados foram preenchidas corretamente com os dados sem repetição (os repetidos foram substituídos por vazio).

 

Para as notas 5347-1 a 5352-1 repeti os mesmos passo acima a partir do 2 (não apaguei nada na planilha Dados dessa vez, só colei os dados abaixo dos outros que já estavam preenchidos). E deixei a planilha Entregas com as NFs 5347-1 a 5352-1.

 

Se a macro não funcionou na sua planilha você deve ter feito algo errado, talvez não tenha deixado a planilha Entregas com os dados correspondentes da planilha Dados. Entenda que antes de rodar a macro a planilha Dados deve ter as NFs correspondentes da planilha Entregas. E a macro não vai mudar o que já foi atualizado/preenchido nas linhas anteriores (linhas com o vazio deixado pela fórmula também são dados preenchidos).

Link para o comentário
Compartilhar em outros sites

@Midori, O problema é que eu preciso das informações que estão na planilha dados. Se eu apagar funcionas mas eu não posso apagar pois as informações da planilha dados eu lanço por exemplo hoje e as informações da planilha Entregas eu lanço no dia seguinte, dessa forma sempre haverá informações na planilha Dados.

Link para o comentário
Compartilhar em outros sites

@Zamboni_du Não tem problema, as informações podem continuar na planilha, a macro não apaga o que já foi atualizado. Eu só postei o passo a passo simulando uma planilha em branco apenas para você entender como é feita a atualização como se fosse a primeira utilização da planilha. Veja que após a primeira atualização nenhuma informação é apagada.

 

O importante é entender que a planilha Dados só será corretamente atualizada quando as notas correspondentes já estão na planilha Entregas (que será no dia seguinte, como você comentou) e isso não é problema do processo, é apenas questão de seguir a etapa.

 

Mas se você já tem uma planilha preenchida e quer tirar os dados repetidos, aí já é diferente. Porque isso será uma mudança em um processo que começou de outra forma. Em outras palavras, você estava usando uma macro, preencheu vários dias e agora quer mudar a forma como isso é feito. E nesse caso terá que mudar manualmente (isso não é difícil) ou criar outra macro só pra isso. E só depois de adequar sua planilha a essa nova forma poderá voltar a atualizar com a nova macro que passará a deixar assim nas próximas atualizações.

Link para o comentário
Compartilhar em outros sites

@Midori você pode postar a planilha que você fez os teste? A que eu incluí as alterações ela não roda o código depois que eu lanço a sequência das NFs 5341-1 a 5346-1. Quando vou na planilha Dados as informações dessa sequência estão ok, aí rodo o código com a sequência das NFs 5347-1 a 5352-1 e nada acontece. Porém se eu selecionar a coluna X e Y nas linhas referente as NFs 5347-1 e 5352-1 da planilha Dados e apagar (mesmo não batendo nada) aí funciona. Isso que eu não entendi pois eu apago tudo que está na coluna X e Y para realizar os testes  

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • 2 semanas depois...

 

@Midori, me ajude por gentileza, você mencionou que mesmo a célula estando em branco elas não estão vazias, porém eu preciso que elas fiquem vazias, isso é possível? Eu preciso disso porque temos dois veículos então não tem uma ordem de lançamento. Na planilha que enviei para testar isso seria você lançar os dados do dia 26 e depois do dia 30 e depois do dia 27, quando faço isso os dados do dia 27 não aparecem.

Link para o comentário
Compartilhar em outros sites

@Zamboni_du As linhas da coluna X não podem ficar sem conteúdo na planilha ou a macro vai escrever sobres os dados existentes. Não entendi de que forma as células em branco isso impede que novos dados sejam lançados, independente da quantidade de veículos ou da data de lançamento... Resolve se excluir da planilha todas as linhas sem conteúdo na coluna X?

Link para o comentário
Compartilhar em outros sites

@Midori , não resolve pois se excluir as linhas vai excluir as informações. Eu gostaria de realizar o processo da seguinte forma, inserir as informações de KM e hora da primeira entrega (planilha Entregas) clicar no botão inserir e as informações serem lançadas na planilha Dados, na segunda entrega a mesma coisa, ou seja inserir um a um, é possível? Na planilha que eu inseri os códigos que você enviou se eu fizer dessa forma não funciona o preenchimento das demais entregas apenas da primeira.

Link para o comentário
Compartilhar em outros sites

Em 13/08/2021 às 15:00, Zamboni_du disse:

Eu gostaria de realizar o processo da seguinte forma, inserir as informações de KM e hora da primeira entrega (planilha Entregas) clicar no botão inserir e as informações serem lançadas na planilha Dados, na segunda entrega a mesma coisa, ou seja inserir um a um, é possível?

Sim, foi o que comentei no passo a passo.

 

O pré-requisito é que as duas planilhas (Dados e Entregas) tenham as NFs correspondentes.

 

Era assim que você atualizava com a macro anterior, correto? É só continuar como antes.

Link para o comentário
Compartilhar em outros sites

@Midori , mas isso não acontece, se eu lançar o Km e hora de uma linha na planilha Entregas e rodar a macro a macro preenche a planilha Dados com o km e a hora porém as demais linhas fiam em branco e ao digitar a segunda linha e rodar a macro nada acontece pois na primeira vez a macro preencheu as linhas vazia e na segunda vez que rodo nada acontece, então eu vou na planilha Dados seleciono as colunas em branco aí sim a macro funciona. porque na sua está diferente? Tem como vê postar ela aqui?

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@Zamboni_du Talvez você esteja fazendo confusão entre as células vazias e o vazio que a fórmula deixa para os dados repetidos ou que não encontrou na planilha Entregas. Modifiquei a macro para ficar assim: Caso não encontre a NF na planilha entregas a célula fica com um ponto; E para os dados repetidos underline.

 

Para testar usei a última planilha anexada.

 

Sub Incluir()
    Dim PlanDados   As Worksheet
    Dim Area        As Range
    Dim Inicio      As Long
    Dim Fim         As Long
    
    Set PlanDados = ThisWorkbook.Sheets("Dados")
    Set Area = PlanDados.[X2]
    
    Inicio = IIf(Area = "", 1, Area.End(xlDown).Row)
    Fim = IIf(PlanDados.[A2] = "", 1, PlanDados.[A1].End(xlDown).Row)
    
    If Fim - Inicio > 0 Then
        Set Area = Area.Cells(Inicio).Resize(Fim - Inicio)
        
        'KM
        Area.FormulaR1C1 = _
        "=IF(COUNTIF(Entregas!R7C5:R26C5,RC[-13])=0,"".""" & _
        ",IF(RC[-13]=R[-1]C[-13],""_"",VLOOKUP(RC[-13],Entregas!R7C5:R26C14,10,0)))"
        
        'H
        Area.Offset(0, 1).FormulaR1C1 = _
        "=IF(COUNTIF(Entregas!R7C5:R26C5,RC[-14])=0,"".""" & _
        ",IF(RC[-14]=R[-1]C[-14],""_"",VLOOKUP(RC[-14],Entregas!R7C5:R26C15,11,0)))"
        
        With Area.Resize(Area.Rows.Count)
            .Copy
            .PasteSpecial xlPasteValues
            .Offset(0, 1).Copy
            .Offset(0, 1).PasteSpecial xlPasteValues
            PlanDados.Activate
            .Cells(Area.Rows.Count).Offset(0, 1).Select
        End With
        Application.CutCopyMode = False
    End If
End Sub

 

Link para o comentário
Compartilhar em outros sites

  • mês depois...

@Midori  Você pode me ajudar novamente? Eu fiz uma alteração e acrescentei uma coluna na planilha Dados com o nome de Data de entrega, teria como acrescentar uma linha de comando na rotina que você criou para converter a coluna Data de entrega em data no lugar da formula que existe nela?

Botão incluir.zip

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Eventualmente você poderia resolver o seu problema utilizando o Power Query q é uma ferramenta embutida no Excel. O Power Query poderia ser resumido como uma forma de programação assistida.

Na planilha anexada eu procurei manipular um pouco os seus dados, mas confesso q não compreendi perfeitamente o q você deseja fazer.

 

No vídeo abaixo você tem uma introdução do q se trata a ferramenta.

 

 

Botão incluir PQ.zip

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!