2016-06-25 24 views
1

Ich habe Hunderttausende von Datensätzen und möchte nur nicht doppelte Werte in Excel finden. Aus der Spalte A möchte ich die Werte in Spalte C, die ungleich B sind, überschreiten. Kann mir jemand auf die selbe helfen.Nicht doppelte Werte Kopieren Einfügen

A | B | C 
-------|-------|------- 
    1 | 4 | 1 
    2 | 5 | 2 
    3 | 6 | 3 
    4 | 7 | 13 
    5 | 8 | 14 
    6 | 9 | 15 
    7 | 10 | 
    8 | 11 | 
    9 | 12 | 
    10 | 16 | 
    11 | 17 | 
    12 |  | 
    13 |  | 
    14 |  | 
    15 |  | 
    16 |  | 
    17 |  | 

Ich habe bereits versucht, durch meine Werte in C einfügen und diese Formel in B-Säule setzen, wie well..But dies nach einigen Zellen nicht funktioniert.

=IF(ISERROR(MATCH(A1,$C$1:$C$10000,0)),"",A1) 

Antwort

0

Haben Sie eine Lösung für Ihr Problem eine Hilfsspalte sagen Column E (ändern Spalte E je nach Bedarf) verwendet wird.

Im Cell E2 schreiben die folgende Formel:

=IFERROR(INDEX($A$2:$A$20, MATCH(0,INDEX(COUNTIF(E1:$E$1, $A$2:$A$20)+(COUNTIF($A$2:$A$20, $A$2:$A$20)<>1),0,0), 0)),"") 

dann ziehen/kopieren Sie diese Formel nach unten je nach Bedarf. Dadurch erhalten Sie nicht doppelte Nummern von Column A.

Dann in Cell C2 folgende Formel eingeben:

=IFERROR(INDEX($E$2:$E$20,MATCH(0,IFERROR(MATCH($E$2:$E$20,$B$2:$B$12,0),COUNTIF($C$1:$C1,$E$2:$E$20)),0)),"") 

Dies ist eine Matrixformel es so begehen, indem Ctrl + Drücken der Umschalttaste + Geben Sie und ziehen/kopieren Sie diese Formel nach unten je nach Bedarf und Sie werden Ihr gewünschtes Ergebnis haben, wie in der Abbildung unten gezeigt:

enter image description here

EDIT: VBA Lösung ________________________________________________________________________________

Sub Demo() 
    Dim dict1 As Object, dict2 As Object, dict3 As Object 
    Dim c1 As Variant, c2 As Variant 
    Dim i As Long, lastRow As Long 

    Set dict1 = CreateObject("Scripting.Dictionary") 
    Set dict2 = CreateObject("Scripting.Dictionary") 
    Set dict3 = CreateObject("Scripting.Dictionary") 

    lastRow = Cells(Rows.count, "A").End(xlUp).Row '-->get last row of Column A 
    c1 = Range("A2:A" & lastRow) 
    'add unique values in Column A to dict1 
    For i = 1 To UBound(c1, 1) 
     dict1(c1(i, 1)) = 1 
    Next i 

    lastRow = Cells(Rows.count, "B").End(xlUp).Row '-->get last row of Column B 
    c2 = Range("B2:B" & lastRow) 
    'add unique values in Column B to dict2 
    For i = 1 To UBound(c2, 1) 
     dict2(c2(i, 1)) = 1 
    Next i 

    'check existence of dict1 values in dict2 
    'if not present add to dict3 
    For Each k In dict1.keys 
     If Not dict2.exists(k) Then 
      dict3.Add k, 1 
     End If 
    Next k 

    'display dict3 in Column C 
    Range("C2").Resize(dict3.count) = Application.Transpose(dict3.keys) 
End Sub 
+0

Hallo, Vielen Dank für das, ich für 100 Datensätze versuchte es perfekt funktioniert, ich glaube, diese Formel für kleine Anzahl von Datensätzen hilfreich sein können. Da ich mit dem gleichen Problem konfrontiert bin, nehme ich viel Zeit für 1500 Zeilen, da ich mehr als 100 Tausend Datensätze habe, also kann das nicht funktionieren. Gibt es irgendeine Art von VBA-Code, so dass wir die Formel vermeiden können und es schnell machen können und Ergebnis erhalten können. oder kann in SQL sein. Danke vielmals. –

+0

@RakeshGupta - Ich habe eine VBA-Lösung hinzugefügt. – Mrig