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.