Wie simuliert man eine vollständige äußere Verknüpfung in Excel?

34

Nehmen wir an, ich habe einige Daten in Excel (und nicht in einer echten Datenbank). In einem Blatt habe ich Daten, wobei eine Spalte als ID fungiert, und ich habe sichergestellt, dass die Werte in dieser Spalte eindeutig sind. In einem anderen Blatt habe ich auch einige Daten, wiederum mit einer Spalte, die als ID verwendet werden kann, und sie sind auch eindeutig. Wenn die Zeile N in Blatt 1 einen bestimmten Wert hat und die Zeile M in Blatt 2 denselben Wert hat, sind sich die Zeilen N und M sicher, dass sie dasselbe Objekt der realen Welt beschreiben.

Was ich frage: Wie kann ich das Äquivalent eines vollständigen Outer-Joins erhalten, ohne Makros zu schreiben? Formeln und alle Funktionen, auf die über das Menüband zugegriffen werden kann, sind in Ordnung.

Ein kleines Beispiel für "Spieldaten":

Blatt1:

Dostoyevski    Russia
Pushkin        Russia
Shelley        England
Flaubert       France
Hugo           France
Eichendorff    Germany
Byron          England
Zola           France

Blatt 2:

Shelley        Percy Bysshe
Eichendorff    Josef Freiherr Von
Flaubert       Gustave
Byron          Lord
Keller         Gottfried
Dostoyevski    Fyodor
Zola           Emile
Balzac         Honoré de

Gewünschte Ausgabe (Sortierung ist nicht wichtig):

Dostoyevski    Russia   Fyodor
Pushkin        Russia
Shelley        England  Percy Bysshe
Flaubert       France   Gustave
Hugo           France
Eichendorff    Germany  Josef Freiherr von
Byron          England  Lord
Zola           France   Emile
Keller                  Gottfried
Balzac                  Honoré de

Allen, die von diesem Szenario entsetzt sind: Ich weiß, dass dies der falsche Weg ist, es zu tun. Wenn ich eine Wahl hätte, würde ich nicht Excel dafür verwenden. Es gibt jedoch genügend Situationen, in denen eine pragmatische Lösung erforderlich ist, stat und eine bessere (aus IT-Sicht) Lösung nicht angewendet werden kann.

rumtscho
quelle
Wenn Sie beide Listen sortieren und nebeneinander platzieren, sollte es ziemlich einfach sein, die gewünschte Spalte manuell abzugleichen. Wenn Sie viele Daten haben, können Sie eine Funktion schreiben, die zwei Bereiche umfasst und dies für Sie erledigt.
Dan
@ Dan, wie gesagt, ich bitte darum, dies zu tun, ohne eine Funktion zu schreiben . In Situationen, in denen ich es schreiben kann, ist die Lösung trivial (zumindest für mich, weil ich vorher VBA geschrieben habe)
rumtscho
Excel unterstützt SQL-Abfragen über Datenverbindungen. Ich bin schrecklich darin, daher kann ich leider nicht viel mehr Ratschläge geben, aber es kann sich lohnen, nach dir zu suchen.
Kyle
@Kyle Ich habe diese Option zu meiner Antwort hinzugefügt. Es ist nichts für schwache Nerven und es könnte ein Chaos sein, damit zu spielen und / oder Overkill zu machen, aber hey, warum nicht!
Enderland

Antworten:

43

Einfacher Ansatz - Standard-Excel-Operationen

Kopieren Sie zunächst beide Schlüsselspalten aus beiden Tabellen und fügen Sie sie als einzelne Spalte in ein neues Blatt ein.

Verwenden Sie die Option "Duplikate entfernen", um eine Liste aller Ihrer eindeutigen Schlüssel zu erhalten.

Fügen Sie dann zwei Spalten hinzu (in diesem Fall eine für jede Ihrer Datenspalten in jeder Tabelle). Ich empfehle Ihnen, das Format auch als Tabellenoption zu verwenden, da Ihre Formeln dadurch viel schöner aussehen. Verwenden Sie in vlookup die folgende Formel:

=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")

Wobei Sheet4!A:Brepräsentiert, was auch immer die Quelltabellendatentabelle für den jeweiligen Wert ist. Der IFERROR verhindert die hässlichen # N / A-Ergebnisse, die angezeigt werden, wenn die Suche nicht erfolgreich ist, und gibt in diesem Fall eine leere Zelle zurück.

Dies gibt Ihnen Ihre resultierende Tabelle.


Sheet3:

Bildbeschreibung hier eingeben

Sheet4:

Bildbeschreibung hier eingeben

Ergebnisdaten:

Bildbeschreibung hier eingeben

Ergebnisformeln ( Ctrl+ ~schaltet dies um):

Bildbeschreibung hier eingeben


Eingebaute SQL-Abfrage

Sie können dies auch mit der integrierten SQL-Abfrage tun. Es ist ... viel weniger benutzerfreundlich, aber vielleicht wird es ein besserer Anwendungsfall sein. Dies erfordert wahrscheinlich, dass Sie Ihre "Quell" -Daten als Tabellen formatiert haben.

  1. Klicken Sie auf eine Zelle in einem neuen Blatt
  2. Gehen Sie zu Daten -> Aus anderen Quellen -> Aus Microsoft Query
  3. Wählen Sie auf der Registerkarte "Datenbanken" die Option "Excel-Dateien *" und klicken Sie auf "OK"
  4. Wählen Sie Ihre Arbeitsmappe aus
  5. Wählen Sie die folgenden vier Felder aus:
    • Bildbeschreibung hier eingeben
  6. Klicken Sie auf "Weiter" und "OK" bei der netten, in den 90er Jahren formatierten Warnung, die Sie sehen
  7. Befolgen Sie diese Anweisungen, um den ersten linken äußeren Join zu erstellen. In meinem Fall verwende ich die "Länder" -Tabelle als linke Quelle und die "Namen" als rechte.
    • Bildbeschreibung hier eingeben
    • Dies gibt nur einige der Zeilen (da Sie auf der ID beitreten)
  8. Der Teil "Eine Subtraktionsverknüpfung erstellen und dann als Vereinigung hinzufügen" ist komplizierter.

    • Hier ist die Konfiguration zum Subtrahieren von Joins: Bildbeschreibung hier eingeben
    • Kopieren Sie die SQL dieses Joins von der SQL-Schaltfläche:
    • SELECT countries$.ID, countries$.Val1, names$.ID, names$. Val2 FROM {oj C:\Users\Username\Desktop\Book2.xlsx. countries$ countries$LEFT OUTER JOIN C:\Users\Username\Desktop\Book2.xlsx. names$ names$ON countries$.ID = names$.ID} WHERE ( names$.ID ist Null)

  9. Kehren Sie zum ersten erstellten Outer Join zurück. Bearbeiten Sie SQL und manuell

    • Unionunten hinzufügen
    • Fügen Sie den obigen Subtraktionsverknüpfungstext am unteren Rand der Verknüpfung hinzu
  10. Klicken Sie unmittelbar links neben der SQL-Schaltfläche auf die Schaltfläche "Daten zurückgeben"
    • Möglicherweise möchten Sie die SQL bearbeiten, um nur die spezifischen Daten auszuwählen, die Sie zu diesem Zeitpunkt benötigen. Ich finde es einfacher, Spalten im Ergebnis auszublenden.
  11. Platzieren Sie die Abfrage irgendwo und bestätigen Sie den Speicherort
    • Bildbeschreibung hier eingeben

Nicht für schwache Nerven. Wenn Sie jedoch die großartige Chance haben möchten, einige nicht aktualisierte Teile von Office zu sehen, solange Sie möglicherweise noch am Leben sind, ist dies eine großartige Chance.

Enderland
quelle
1
Haben Sie eine Referenz für die [@ID] -Notation? Ich bezweifle nicht, dass es funktioniert, aber ich habe es noch nie gesehen und arbeite viel in Excel.
TJL
1
@TJL Wenn Sie eine Tabelle als Tabelle formatieren, wird diese Art von Notation zum Verweisen auf andere Spalten verwendet. Viel klarer als Zellbezüge. Es könnte ein 2010+ Feature sein? Ich bin mir nicht sicher. Ich habe die Magie der Formatierung als Tabelle nicht genug vor 2010 verwendet ..
Enderland
Können Sie in der ursprünglichen Abfrage nicht einfach das Wort LEFT in das Wort FULL ändern? Ich bin sicher, es wird nur der ACE OLEDB-Treiber verwendet, um diese Abfrage auszuführen, die die FULL JOIN-Syntax unterstützt.
Kyle Hale
14

Kann ich als alternative Lösung Power Query vorschlagen ? Es ist ein kostenloses Excel-Add-In von Microsoft, mit dem genau solche Aufgaben ausgeführt werden können. Die Funktionalität wird auch direkt in Excel 2016 integriert und ist somit zukunftssicher.

Wie auch immer, mit Power Query sind die Schritte ziemlich einfach:

  1. Importieren Sie beide Tabellen als Abfragen in den Power Query Editor.
  2. Führen Sie eine Transformation für Zusammenführungsabfragen durch, indem Sie die entsprechende Verknüpfungsspalte und den Verknüpfungstyp auf Vollständig außen festlegen.
  3. Laden Sie Ihre Ergebnistabelle in ein neues Blatt.

Das Schöne daran ist, dass Sie, sobald Sie dies eingerichtet haben, bei Änderungen an Ihren Basisdatentabellen einfach auf Daten> Alle aktualisieren klicken und Ihr Power Query-Ergebnisblatt ebenfalls aktualisiert wird.

Kyle Hale
quelle
Wirklich interessant. Ein Freund von mir, der ein Restaurant besitzt, fragte mich nach MS Office und zeigte mir seine Suite 2016, die MS Access nicht enthält. Ich verstehe jetzt, warum das so ist. Excel hatte viele Einschränkungen. Ich habe nie über 2003 gekauft, weil keine der Funktionen von Wert war und ich auch den neuen Look nicht mochte; 2010 und höher. Access macht all das und noch viel mehr, und es stellt sich die Frage, warum so viele Menschen versuchen, eine Datenbank in Excel zu erstellen, wenn dies mit Access erreicht werden kann. Das Einzige, was ich sehen kann, ist, dass es, um eine gute Access-DB zum Laufen zu bringen, auch eine gute VB-Erfahrung braucht.
Ejbytes
@ejbytes die meisten Leute verstehen das Konzept der Kalkulationstabellen. Die meisten verstehen das Konzept einer Datenbank nicht. Ich hatte ein Projekt, bei dem eine Tabelle als Datenbankprojekt in eine Datenbank konvertiert wurde, und die Benutzer nannten sie immer noch "die Tabelle" - auch nach ausführlichen Erklärungen zur Funktionsweise einer Datenbank!
Enderland
@enderland Ich denke du hast recht. Eine Tabelle mit nicht strengen Regeln und nicht zusammenhängender Flexibilität ... und als Filter getarnten Abfragen. Eine Plattform für Verschiebungstabellen und -listen.
Ejbytes
@ejbytes tldr version ist MS wollte ein Columnstore-Speicher-Modul in Excel testen, um mehr Zeilen einzulassen. Es enthielt externe Datenverbindungen. Es erwies sich als äußerst beliebt und wurde in einem ETL-Tool hinzugefügt. Jetzt haben sie alle Tools als PowerBI aufgerollt.
Kyle Hale
@KyleHale Ich verwende Office 2010 und versuche, einen FULL OUTER JOIN durchzuführen, aber Power Query ignoriert IDs aus der zweiten Tabelle, die nicht in der ersten Tabelle enthalten sind.
GeMir
0

Eine schnelle Möglichkeit, eine (äußere Verknüpfung) halb zu simulieren, besteht darin, Ihre zweite Liste direkt unter Ihrer ersten Liste einzufügen, dh, Ihre (Primärschlüssel) befinden sich alle in derselben (Primär-) Spalte. Sortieren Sie dann diese Primärspalte. Am Ende erhalten Sie eine verschachtelte Liste. Führen Sie dann eine transponierte IF-Gleichung aus (der Superuser bringt die Tabellenlayoutansicht durcheinander.):

listA listB


sam blue tim 32874 tim red mary 5710 chris green gustav 047 fred blue
mary black

Kopieren / Einfügen / Sortieren, das Ergebnis sieht so aus: AB Chris Green Fred Blue Gustav 047 Mary 5710 Mary Black Sam Blue Tim 32874 Tim Red

dann Formel für Zelle c1: (c1) = if (A1 = A2, B2)

Das Ergebnis sieht so aus:

ABC chris green FALSCH fred blue FALSCH gustav 047 FALSCH mary 5710 black mary black FALSCH sam blue FALSCH tim 32874 red tim red FALSCH

Sortieren Sie C, um Fehler usw. zu beseitigen. Dies ist eine grundlegende Version der Idee. Erweitern Sie sie einfach, wenn weitere Daten erforderlich sind. -wag770310

d587793
quelle
Können Sie dies in irgendeiner Weise formatieren, um es lesbar zu machen?
Davidbaumann