Notifications
Clear all

Excluir dados iguais

14 Posts
3 Usuários
0 Reactions
1,664 Visualizações
(@leluir)
Posts: 24
Eminent Member
Topic starter
 

Ola sou novo por aqui, gostaria de saber como fazer uma macro para excluir dados iguais em uma planilha excel 2010. Ex: Coluna "A" A1 Luiz, A2 jose,A3 Luiz,A4 Luiz
quero excluir os dados de A1,A3 e A4, no caso excluir repetidos não serve pois deixa sempre um dado quero excluir todos .desculpem não sei se consegui explicar o que eu quero Obrigado.

 
Postado : 14/04/2014 10:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Leluir

Seja bem-vindo ao fórum!

Movi teu tópico para a sala VBA & Macros, pois este local é exclusivo para a apresentação dos novos usuários do fórum.

Por enquanto vou deixar o tópico sendo mostrados nos 2 locais, para você localizá-lo.

Patropi - Moderação

 
Postado : 14/04/2014 10:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Use a pesquisa do fórum!!

Sub AleVBA_11310()
     
    Dim x               As Long
    Dim LastRow         As Long
     
    LastRow = Range("A65536").End(xlUp).Row
    For x = LastRow To 1 Step -1
        If Application.WorksheetFunction.CountIf(Range("A1:A" & x), Range("A" & x).Text) > 1 Then
            Range("A" & x).EntireRow.Delete
        End If
    Next x
     
End Sub

Att

 
Postado : 14/04/2014 11:10 am
(@leluir)
Posts: 24
Eminent Member
Topic starter
 

Ola obrigado por responder bem rápido, mas o que eu quero é excluir todos os dados iguais não quero manter um dado ou seja se A1 luiz,A2 luiz, A3Luiz quero excluir todas que tiver luiz A1,A2,A3 obrigado.

 
Postado : 14/04/2014 3:04 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Veja se assim atende:

Option Explicit

Sub Exclui_Repetidos_GT()

Application.ScreenUpdating = False

Dim i           As Integer
Dim j           As Integer
Dim intCount    As Integer
Dim sNome       As String

j = 1
Do Until IsEmpty(Cells(j, "A"))
    i = 1
    sNome = Cells(i, "A").Value
    i = 2
    intCount = 0
    Do Until IsEmpty(Cells(i, "A"))
        If Cells(i, "A").Value = sNome Then
            intCount = intCount + i
            Cells(i, "A").EntireRow.Delete
        End If
        i = i + 1
    Loop
    If intCount > 0 Then Cells(1, "A").EntireRow.Delete
    j = j + 1
Loop

Application.ScreenUpdating = True

End Sub
 
Postado : 14/04/2014 8:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

leluir,

Acho que as macros anteriores não funcionam pois não se deve dar "loop" nesse caso. Macro não é minha praia mas acho que essa deve funcionar.

Me avise.

Abs,

Sub Macro1()

    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=IF(COUNTIF(C[-1],RC[-1])>1,""X"","""")"
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B1000")
    Range("B1:B1000").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Last = Cells(Rows.Count, "A").End(xlUp).Row
    For i = Last To 1 Step -1
        If (Cells(i, "B").Value) = "X" Then
            Cells(i, "A").EntireRow.Delete
        End If
    Next i

End Sub
 
Postado : 14/04/2014 8:58 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Mandrix, não tinha pensado em usar uma coluna auxiliar, boa a sacada.

Mas o código que eu escrevi, mesmo com loop, faz o mesmo que o teu código, pois eu coloquei um contador pra verificar as repetições. Contudo, a tua solução deve ser mais rápida.

Abs

 
Postado : 15/04/2014 5:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!
Segue minha versão.

Sub AleVBA_11310()
    Dim i   As Long
    i = Range("A" & Rows.Count).End(xlUp).Row
    Application.ScreenUpdating = False
    Columns(1).Insert
    [A1] = "AleVBA"
    With Range("A1:A" & i)
        .Offset(1, 0).Resize(.Rows.Count - 1, 1).Formula = "=COUNTIF($B$2:$B$" & i & ",B2)>1"
        .AutoFilter field:=1, Criteria1:="VERDADEIRO"
        .Offset(1, 0).Resize(.Rows.Count - 1, 1).EntireRow.Delete
        .AutoFilter
    End With
    Columns(1).Delete
    Application.ScreenUpdating = True
End Sub

Att

 
Postado : 15/04/2014 11:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gtsalikis,

O seu código não faz o mesmo que o meu código não...O meu faz o mesmo que a segunda versão do Alexandre. Teste com outras repetições e alternâncias e me fale.

Abs,

 
Postado : 15/04/2014 9:31 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Mandrix, me expressei mal. Desculpe.

Queria dizer que o resultado final é o mesmo (ao menos, até onde testei), mas fiz apenas loop. A sacada de vcs foi identificar tudo o que é repetido antes.

Abs.

 
Postado : 16/04/2014 5:32 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Então... Por isso falei pra vc testar outros cenários. O loop, em tese, não proporciona o resultado correto.

Por exemplo, essas 2 séries:

laranja
laranja
banana
maçã
abacate
goiaba
kiwi
mamão
melão
maçã
pera
uva
maçã

ou

laranja
banana
laranja
maçã
abacate
goiaba
kiwi
maçã
maçã
mamão
melão
pera
uva

Depois me fale.

Abs,

 
Postado : 16/04/2014 8:01 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Mandrix,

Tem razão. Eu testei com listas que, por acaso, deram certo, mas com os teus exemplos pude ver que a minha lógica estava errada.

As soluções que vc e o AleVBA apresentaram já resolveram o problema, porém, eu fiquei intrigado com o loop, e resolvi tentar uma última vez (apenas por curiosidade, teimosia, e pra passar o tempo, rsrs).

Option Explicit

Sub Exclui_Repetidos_GT()

Application.ScreenUpdating = False

Dim i           As Integer
Dim j           As Integer
Dim intCount    As Integer
Dim sNome       As String
Dim UL          As Integer

j = 1
Do Until IsEmpty(Cells(j, "A"))
    UL = Cells(Rows.Count, "A").End(xlUp).Row
    sNome = Cells(j, "A").Value
    i = UL
    intCount = 0
    Do Until i = j
        If Cells(i, "A").Value = sNome Then
            intCount = intCount + 1
            Cells(i, "A").EntireRow.Delete
        End If
        i = i - 1
    Loop
    If intCount > 0 Then
        Cells(j, "A").EntireRow.Delete
    Else
        j = j + 1
    End If
Loop

Application.ScreenUpdating = True

End Sub
 
Postado : 16/04/2014 9:03 pm
(@leluir)
Posts: 24
Eminent Member
Topic starter
 

Obrigado a todos que me ajudaram a solucionar meu problema abraços

 
Postado : 20/04/2014 5:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Eu fico feliz, por ter ajudado!!
;)
Att

 
Postado : 20/04/2014 6:29 pm