2016-06-24 9 views
1

Das ist eine peinlich einfache Frage, aber ich habe keinen Weg gefunden, es stundenlang herauszufinden und auch nicht eine Idee aus der Online-Suche zu finden.Einmalige Daten in einer Spalte zählen und dann mit anderen eindeutigen Daten abgleichen

Angenommen, ich habe die folgenden Daten in Excel-Tabelle (Tabelle 1) (die eigentlichen Daten können Tausende oder Millionen sein):

Name No. ID 
A  A1 
B  B4 
B  B5 
C  C0 
D  - 
A  A1 
A  A2 
E  - 
F  - 
C  C0 
B  B5 
B  B5 
B  B5 
B  B6 
A  A1 
A  A1 
A  A2 
B  B3 
B  B3 
B  B3 

Das Zeichen (-) in Spalte ID Nr oben kann auch eine Nummer 0 oder eine leere Zelle.

Ich möchte die obigen Daten wie folgt formatiert werden (Tabelle 2)

Name Number of ID 
A  2 
B  4 
C  1 
D  0 
E  0 
F  0 

Es bedeutet A 2 IDs hat (A1 und A2), B 4 IDs hat (B1, B2, B3 und B4) , C hat 1 ID (C0) und D, E und F haben keine ID.

Das Beste, was ich unter Verwendung von Pivot-Tabelle ist wie dieser

enter image description here

bekommen Wie man eine Aufgabe wie Tabelle 2 in MS Excel führt? Wenn möglich ein VBA-Skript davon.

Antwort

1

Wenn jemand Interesse an einer VBA-Lösung für das oben beschriebene Problem:

Sub GetUniquesCount() 
    Dim dict1 As Object, dict2 As Object 
    Dim c1 As Variant, c2 As Variant 
    Dim i As Long, lastRow As Long, count As Long 

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

    lastRow = Cells(Rows.count, "A").End(xlUp).Row 
    c1 = Range("A2:A" & lastRow) 
    For i = 1 To UBound(c1, 1) 
     dict1(c1(i, 1)) = 1 
    Next i 
    Range("D2").Resize(dict1.count) = Application.Transpose(dict1.keys) 

    lastRow = Cells(Rows.count, "B").End(xlUp).Row 
    c2 = Range("B2:B" & lastRow) 
    For i = 1 To UBound(c2, 1) 
     dict2(c2(i, 1)) = 1 
    Next i 

    For Each cel In Range("D2:D" & Cells(Rows.count, "D").End(xlUp).Row) 
     count = 0 
     For Each k2 In dict2.keys 
      If k2 Like cel.Value & "*" Then 
       count = count + 1 
      End If 
     Next k2 
     cel.Offset(0, 1).Value = count 
    Next cel 
End Sub 

enter image description here

3

Kopieren Sie die Spalte A in eine andere nicht verwendete Spalte und führen Sie den Befehl Daten ► Duplikate entfernen aus, und sortieren Sie sie anschließend. Nur wenige Formeln arbeiten effizient mit Tausenden von Datenreihen und keiner wird mit Millionen funktionieren.

Machen Sie dasselbe für Spalte B direkt daneben. Erweitern Sie nicht die Auswahl, die von Duplikate entfernen gewünscht wird.

Als nächstes verwenden Sie die folgende Formel in der Spalte neben dem unduplicated Satz der Spalte A Daten, die Sie gerade erstellt haben:

=COUNTIF(F:F, E2&"*") 

in dem Umfang, der nicht duplizierten Daten, geben Sie bitte unten. Ich habe angenommen, dass Sie Spalte E verwendet haben, um den ersten unduplizierten Datensatz und Spalte F für den zweiten Datensatz zu erstellen.

helper12count

+0

Dank. Ihre Antwort ist sehr hilfreich. Können Sie mir ein VBA-Skript zur Verfügung stellen, um diese Aufgabe auszuführen? Aber warte, ich möchte eine weitere Frage stellen, um fast die gleiche Aufgabe zu erledigen. Warte ... (+1) trotzdem ... –