Criando uma lista de combinações exclusivas na planilha

1

Eu tenho um grande arquivo do Excel com milhares de linhas contendo dados de teste. Eu os classifiquei por identificadores nas colunas e estou tentando descobrir quais testes duplicados foram executados.

Existem 5 colunas contendo dados que interessam a cada linha. Alguém pode me ajudar a escrever uma macro VBA para encontrar linhas com combinações exclusivas desses testes e gerar uma lista das diferentes combinações presentes na planilha? Idealmente, gostaria que essa lista fosse exibida em uma folha separada.

Eu não quero esses dados em uma tabela dinâmica porque a tabela se torna muito grande para deduzir qualquer informação dela.

Eu joguei com as funções de concatenação, mas como algumas das colunas não têm os dados, elas não estão fazendo o que eu preciso fazer. Anexei o código que estou tentando modificar, que encontrei em um post diferente aqui. Eu estou tendo problemas com a declaração If no final (eu nem acho que vai fazer o que eu quero) porque eu recebo um erro de incompatibilidade de tipo. Eu sou novo no VBA, então estou enfrentando muitos problemas.

Obrigado !!

Sub GetCombinations()

Dim sheet1, sheet2 As Worksheet
Set sheet1 = Worksheets("Data")
Set sheet2 = Worksheets("Sort")

Dim sStartColumn As String
Dim iTopRow As Long
Dim sEndColumn As String
Dim iBottomRow As Long

sStartColumn = "AS"
iTopRow = 6
sEndColumn = "AU"
iBottomRow = sheet1.UsedRange.Rows.Count

Dim Rng As Range
Dim sRange1 As String
sRange1 = sStartColumn & CStr(iTopRow) & ":" & sEndColumn & CStr(iBottomRow)

Set Rng = sheet1.Range(sRange1)


Rng.Sort Key1:=Range("AS6"), Order1:=xlAscending, _
         Key2:=Range("AU1203"), Order2:=xlAscending, _
         Orientation:=xlSortColumns, Header:=xlYes

Dim j As Integer
Dim i As Integer


j = 2

For i = 7 To iBottomRow

    If sheet1.Cells(i, 45) Then

        sheet2.Cells(j, 1) = sheet1.Cells(i, 1)
        sheet2.Cells(j, 2) = sheet1.Cells(i, 2)
        sheet2.Cells(j, 3) = sheet1.Cells(i, 5)
        j = j + 1

    End If

Next i

End Sub

    
por Sarah 04.08.2017 / 17:13

1 resposta

1

ABORDAGEM:

  1. adiciona uma coluna que, para cada linha, contém a concatenação das 5 colunas
  2. faça o código funcionar de baixo para cima, procurando por duplicatas na nova coluna

Diga que os dados são como:

EmF1digite:

=A1&CHAR(1)&B1&CHAR(1)&C1&CHAR(1)&D1&CHAR(1)&E1

ecopieparabaixo.entãocorra:

SubDe_Dup()DimiAsLong,NAsLong,wfAsWorksheetFunctionDimr1AsRange,r2AsRangeN=Cells(Rows.Count,"F").End(xlUp).Row
    Set wf = Application.WorksheetFunction

    For i = N To 2 Step -1
        Set r1 = Cells(i, "F")
        Set r2 = Range(Range("F1"), Cells(i - 1, "F"))
        If wf.CountIf(r2, r1.Value) > 0 Then r1.EntireRow.Delete
    Next i
End Sub

terminando com:

Você nem precisa classificar os dados primeiro!

    
por 05.08.2017 / 14:52