Zählen Sie die Anzahl eindeutiger Kombinationen mehrerer Spalten in Excel

Zählen Sie die Anzahl eindeutiger Kombinationen mehrerer Spalten in Excel

Ich habe zwei Spalten in einer Tabelle und muss eine Formel schreiben, um zu bestimmen, wie oft jede Kombination vorkommt. Beispiel:

A  1
A  1
A  2
A  2
A  2
B  1
B  1
B  2

Das Ergebnis sollte sein:

A  1  2
A  2  3
B  1  2
B  2  1

Ich habe es gestern ganz einfach gemacht, indem ich es in eine SQL-Tabelle importiert habe, aber ich muss es so machen, dass es jeder machen kann, indem er einfach diese beiden Spalten in eine Tabelle einfügt. Es sollte dann ein zweites Blatt mit der Mengentabelle füllen.

Antwort1

Bearbeiten: Einfache Lösung (der Dank geht an SaintWacko)

Verketten Sie die beiden Spalten:

=$A2&$B2

Erstellen Sie eine Pivot-Tabelle, indem Sie die verknüpfte Spalte als „Zeilenbeschriftung“ und „Wert“ verwenden. Stellen Sie dann sicher, dass der „Wert“ Zählungen berechnet (sollte Standard sein).

Komplizierte Lösung

Sie können die beiden Spalten in Spalte C zusammenfügen:

=$A2&$B2

In Spalte D benötigen Sie eine Funktion, die ermittelt, ob das Element ein Duplikat eines anderen Elements ist, sodass der Wert nur für eines der einzelnen Elemente „true“ ist (dies funktioniert nur, wenn die Elemente nach Datenspalten sortiert sind, aber das Makro erledigt das später).

=$C1<>$C2

Berechnen Sie dann die Anzahl der Übereinstimmungen in Spalte E:

=COUNTIF($C:$C,$C2)

Ein Makro findet alle Kombinationen für Sie, platziert sie auf Blatt 2 und kopiert die Zählungen. Der folgende Code macht einige Annahmen, aber Sie können ihn wahrscheinlich so ändern, dass er Ihren Anforderungen entspricht.

Option Explicit

Sub GetCombinations()

    Dim sheet1, sheet2 As Worksheet
    Set sheet1 = Worksheets(1)
    Set sheet2 = Worksheets(2)

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

    sStartColumn = "A"
    iTopRow = 1
    sEndColumn = "E"
    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("A2"), Order1:=xlAscending, _
             Key2:=Range("B2"), Order2:=xlAscending, _
             Orientation:=xlSortColumns, Header:=xlYes

    Dim i, j As Integer

    j = 2

    For i = 2 To iBottomRow

        If sheet1.Cells(i, 4) 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

Das sollte es tun.

verwandte Informationen