Benutzerdefinierte Datenübertragung?

7

Ich habe einen Export für eine Gruppe, die sich aus Studenten / Mentoren zusammensetzt. Jeder in der Gruppe ist sowohl Student als auch Mentor. Ich muss die Daten transformieren, um Mentoren mit zugewiesenen Studenten zu haben, anstatt Studenten mit zugewiesenen Mentoren.

Die Software gibt mir einen Export wie fünf Spalten in einem Blatt, das Schülernamen und Mentoren enthält, die diesem Schüler zugewiesen wurden:

ID Numbers of Students | Students | Mentor 1 | Mentor 2 | Mentor 3

Ich benötige ein Blatt, um die Daten mit Mentoren in einer Spalte und entsprechenden Schülern zu referenzieren, wie z.

ID Numbers of Mentors | Mentors | Student 1 | Student 2 | Student 3 | Student 4

Studenten sind Mentoren und Mentoren sind Studenten - es sind die gleichen Namen. Mentoren haben maximal vier zugewiesene Studenten. Nur eine Reihe pro Mentor.

Ich denke QUERY()oder vielleicht, ARRAYFORMULA()aber ich konnte keine Verwendung VLOOKUP()oder FILTER()mit zuweisen ARRAYFORMULA(). Ich komme damit nicht weiter.

Welche Google Spreadsheet-Formel verwende ich, um die Daten wie beschrieben zu transponieren? Können Sie ein Beispiel geben? Ich werde eine benutzerdefinierte Funktion akzeptieren, aber dies kann sicherlich mit vorhandenen Tools durchgeführt werden.

Tom
quelle
Warum teilen Sie uns kein Dokument mit und zeigen uns das erwartete Ergebnis?
Jacob Jan Tuinstra
1
Hallo Jacob, hier ist ein fiktives Beispiel: docs.google.com/spreadsheet/…
Tom

Antworten:

4

Anhand Ihres Beispiels kann diese Formel in Zeile 2 verwendet werden:

=TRANSPOSE(FILTER(B$2:B;MMULT(C$2:E=B2;TRANSPOSE(SIGN(COLUMN(C$2:E$2))))))

muss aber so weit wie nötig ausgefüllt werden. Hoffentlich können Sie die Verweise an Ihre tatsächlichen Daten anpassen, aber kommentieren Sie zurück, wenn dies ein Problem ist.

MMULT-Verwendung

Wenn Sie eine einzelne Formel benötigen, die automatisch den gesamten Datensatz auffüllt, kann dies mit nativen Funktionen erfolgen, ist jedoch schrecklich komplex und recht ineffizient. Ich würde eine benutzerdefinierte Funktion vorschlagen, wenn eine Lösung mit einer Formel erforderlich wäre.

AdamL
quelle
Süß, danke für eine Antwort AdamL. Ich suchte nach einer einzigen Formel, gab diese aber nicht an. Ich verfolge es nicht gut genug, um mich anzupassen. Wenn Sie sich das Beispielblatt ansehen, bleibt die Formel redundant - können Sie es überprüfen und erklären? Funktioniert dies mit einem expand () - Wrapper?
Tom
Sie haben die Formel in Zeile 22 eingefügt, sodass die Formel in ihrer jetzigen Form nicht korrekt referenziert wird. Die Formel in F22 sollte lauten =TRANSPOSE(FILTER(B$22:B;MMULT(C$22:E=B22;TRANSPOSE(SIGN(COLUMN(C$2:E$2)))))).
AdamL
Schließlich fand ich heraus, warum ich die Lösung von AdamL nicht verwenden konnte: Einige meiner Zellen in C $ 2: E hatten nachgestellte oder führende Leerzeichen, die die Formel vollständig brachen. Sobald das Leerzeichen entfernt wurde, funktionierte es genau wie erwartet. Danke AdamL.
Tom
0

Ich glaube, dass dies mit benutzerdefinierten Funktionen in Google-Dokumenten möglich ist. Ich habe eine Funktion geschrieben, die:

  1. Scannen Sie die Tabelle nach eindeutigen Mentoren und speichern Sie sie im Array
  2. Für jeden gefundenen Mentor liest ein Schüler und speichert ihn in einer Reihe hinter dem Namen des Mentors
  3. Druckt die Daten in ein neues Blatt (Daten sind im Grunde ein Array von Arrays)

So kann jede Zeile der Originaltabelle eine andere Anzahl von Spalten haben.

Voraussetzungen sind:

  • Der Originaltisch mit Studenten muss auf einem Blatt mit dem Namen "Studenten" stehen.
  • Die Originaltabelle mit Studens muss das gleiche Layout wie im Beispiel haben (oder Sie müssen die Startzeile und -spalte für das Scannen im Code bearbeiten). Das Blatt kann keine weiteren Informationen enthalten, da sonst das Skript beschädigt wird.
  • In derselben Tabelle müssen Sie ein neues sauberes Blatt erstellen (z. B. "Mentoren"), und die Ergebnisse werden gedruckt.

Sehen Sie sich meine Beispieltabelle an, in der ich sie getestet habe: https://docs.google.com/spreadsheet/ccc?key=0AtL0o7PQ5KfldGk3TVp3U3ZkcVF3YUl6UFhxS0pZT2c&usp=drive_web#gid=0

Leider hat Google einige Zeit gebraucht, um meinen Code zu überprüfen, sodass ich ihn nicht einfach in Google Apps Script für Sie freigeben kann. Sie können es jedoch hier aus dem Pastebin kopieren: http://pastebin.com/0hFMhC8e und Ihre eigene benutzerdefinierte Funktion erstellen. Gehen Sie einfach zu Ihrer Tabelle (mit den Daten), erstellen Sie eine neue saubere Tabelle, gehen Sie zu Extras > Skript-Manager > Neu , wählen Sie im neuen Fenster aus der Liste in der linken Tabelle aus , löschen Sie den Beispielcode, kopieren Sie meinen Code und fügen Sie ihn aus dem Pastebin ein , benennen Sie Ihre neue Funktion "transposeColumns" und speichern Sie sie. Gehen Sie dann mit der Tabelle zur Witwe / Registerkarte und öffnen Sie den Skriptmanager. Hit Reload - Button in dem Manager und Sie sollten sehen , dass es Ihnen neue Funktion. Also dann einfach auswählen und drückenAusführen . Sie werden um die Erlaubnis gebeten, dass das Skript auf die Google Drive-API zugreifen darf. Senden Sie es. Jetzt sollten die Daten aus dem Blatt "Schüler" automatisch übernommen und auf das aktuell aktive Blatt übertragen werden. Versuchen Sie möglicherweise, das Skript erneut auszuführen, wenn es nach dem Senden der Berechtigung nichts mehr tut.

Es gibt einige Probleme wie: Was ist mit den Studentenausweisen - die leicht in das Skript eingefügt werden können, um sie auch zu kopieren. Das Skript selbst wurde so einfach wie möglich in JavaScript geschrieben. Könnte meiner Meinung nach optimiert werden.

RadekVechet
quelle