Paarweise Kombinationen aus vielen Optionen in Excel zählen

577
ermintrude75

Ich habe einen großen Datensatz von Schülern und den Klassen, die sie besucht haben. Jeder Schüler hat 12 bis 18 von rund 80 verfügbaren Kursen besucht. Mit Excel (2013) würde ich gerne herausfinden, wie viele Schüler beide Klassen genommen haben. Ich stelle mir eine Tabelle mit den 80 Klassen als Reihen und Spalten vor, und dann würde ich für jede Kreuzung eine Zählung davon sehen, wie viele Schüler diese Kombination nahmen.

Die Daten kommen als Excel-Datei mit einer Zeile pro Schüler pro Klasse an:

Student Class Smith E101 Jones E101 Parker E101 Brown E102 Green E102 Smith E201 Jones E202 Parker E201 Brown E202 Green E203 ... 

Vorgesehene Ausgabe:

 E101 E102 E201 E202 E203 ... E101 0 2 1 0 E102 0 0 1 1  E201 2 0 0 0 E202 1 1 0 0 E203 0 1 0 0 ... 

(Natürlich brauche ich nur eine diagonale Hälfte davon, da die andere Hälfte es spiegelt.)

Ich habe eine Pivot-Tabelle verwendet, um die Daten in eine Tabelle mit Schülern als Zeilen und alle möglichen Klassen als Spalten zu bringen, die eine 1 anzeigen, in der ein Schüler eine bestimmte Klasse besucht hat.

 E101 E102 E201 E202 E203 ... Smith 1 1  Jones 1 1  Parker 1 1  Brown 1 1  Green 1 1 ... 

Ich bin dann aber fest, wie ich mit so wenig manuellen Eingriffen wie möglich an meinem gewünschten Output vorgehen soll.

Kann jemand einen Weg vorschlagen, um die Ausgabe zu erzielen, die ich in Excel benötige? Ich habe ziemlich lange gesucht, aber nichts gefunden.

Oder sollte ich nach anderer Software suchen?

3
Willkommen bei Super User! Bitte beachten Sie, dass https://superuser.com kein kostenloser Skript- / Code-Schreibservice ist. Wenn Sie uns sagen, was Sie bisher versucht haben (einschließlich der Skripts / des Codes, die Sie bereits verwenden) und wo Sie stecken bleiben, können wir versuchen, bei bestimmten Problemen zu helfen. Sie sollten auch lesen [Wie kann ich eine gute Frage stellen?] (Https://superuser.com/help/how-to-ask). DavidPostill vor 5 Jahren 0
Ich verwende keine Skripte / Codes. Ich bin so weit gekommen, eine Pivot-Tabelle wie oben zu verwenden, um von einer flachen Liste zu einer Kreuztabelle zwischen Schüler und Klasse zu gelangen. Ich weiß jetzt nicht, ob es einen Weg gibt, das zu erreichen, was ich (in der Post) in Excel trotz recht langer Suche erreichen möchte. Meine Frage ist daher, kann ich diese Informationen in Excel erhalten und wenn ja, wie? Ich will nicht stumpfsinnig sein, aber ich sehe nicht, was mit meiner Frage falsch ist, und würde gerne weitere Erklärungen dazu erhalten. Ich bitte nicht um Code, sondern Vorschläge für Ansätze. ermintrude75 vor 5 Jahren 2

1 Antwort auf die Frage

2
robinCTS

Dies ist in Excel mit einer Formel, die auf Ihre Pivot-Tabelle angewendet wird, ziemlich einfach.

Wenn die beiden Tische so eingerichtet sind

Worksheet Screenshot showing Tables and Formula

J2Geben Sie die folgende Formel in ein und drücken Sie Strg-Eingabe / Kopieren-Einfügen / Ausfüllen & Rechts / Auto-Ausfüllen in die restlichen Tabellenzellen:

= IF( J$1=$I2, "", COUNTIFS( INDEX($A$1:$F$6,ROW($A$1:$F$6),MATCH(J$1,$A$1:$F$1,0)):INDEX($A$1:$F$6,1+ROWS($A$1:$F$6)-ROW($A$1:$F$6),MATCH(J$1,$A$1:$F$1,0)), 1, INDEX($A$1:$F$6,ROW($A$1:$F$6),MATCH($I2,$A$1:$F$1,0)):INDEX($A$1:$F$6,1+ROWS($A$1:$F$6)-ROW($A$1:$F$6),MATCH($I2,$A$1:$F$1,0)), 1 ) ) 


Erläuterung:

Das erste Argument der COUNTIFS()Funktion ist die dynamisch erzeugte Spalte der Pivot-Tabelle, die dem Spaltenkopf der Ausgabetabelle entspricht. Es ist ein bisschen leichter zu verstehen, wenn wir uns die dazwischen bewerteten Schritte (für Zellen L2) ansehen :

INDEX($A$1:$F$6,ROW($A$1:$F$6),MATCH(L$1,$A$1:$F$1,0)):INDEX($A$1:$F$6,1+ROWS($A$1:$F$6)-ROW($A$1:$F$6),MATCH(L$1,$A$1:$F$1,0))
INDEX($A$1:$F$6,1,MATCH("E201",$A$1:$F$1,0)):INDEX($A$1:$F$6,6,MATCH("E201",$A$1:$F$1,0))
INDEX($A$1:$F$6,1,4):INDEX($A$1:$F$6,6,4)
$D$1:$D$6

(Beachten Sie, dass die zweiten Argumente jeweils INDEX()nur die vollständig dynamischen Start- und Endzeilen der Pivot-Tabelle sind.)

Ähnliches gilt für das dritte Argument der COUNTIFS()Funktion, aber diesmal die dynamisch erzeugt Spalte des Drehtisches zum entspricht Zeile Header der Ausgabetabelle. Für Zelle L2wertet es aus $B$1:$B$6.

Somit ist die COUNTIFS()Funktion L2wird

COUNTIFS($D$1:$D$6,1,$B$1:$B$6,1) 

Dies ist die Standardmethode zum Zählen der Anzahl der Zeilen (Schüler), in denen beide Spalten ein enthalten 1(dh der Schüler war in beiden Klassen eingeschrieben).

Die Kapselungsfunktion IF()sorgt nur dafür, dass die diagonalen Zellen leer sind.

Vielen Dank @robinCTS! Bitte entschuldigen Sie die Entschuldigung für die Antwortzeit. Ich hatte einige Probleme beim Anmelden bei StackExchange, was bedeutet, dass ich bis jetzt nicht antworten konnte. Ich habe die Lösung jedoch gelesen und implementiert. Ich habe einfach die Bereiche für meine eigenen Daten angepasst und es funktioniert perfekt. Ich schätze besonders die detaillierte Erklärung jedes Elements - es hat einige Zeit gedauert, aber ich verstehe. Ich bin sehr dankbar für deine Zeit! ermintrude75 vor 5 Jahren 1
@ ermintrude75 Kein Problem. Froh, dass ich Helfen kann! Es tut mir nur leid, dass Ihre Frage anfangs geschlossen war und so lange gedauert hat, bis sie wieder geöffnet wurde. robinCTS vor 5 Jahren 0