In Excel habe ich eine Tabelle, die Daten aus einer SQL-Datenbank in eine Tabelle zieht und dann einen Bericht basierend auf diesen Daten generiert. Leider sind die Daten in dieser SQL-Datenbank unvollständig und ich möchte zusätzliche Zeilen in die Ergebnismenge aufnehmen, die manuell in die Tabelle eingegeben werden.
So oft ich möchte, kann ich diese zusätzlichen Zeilen nicht einfach manuell in die Tabelle einfügen, da sie gelöscht werden, wenn Excel neue Daten aus der SQL-Datenbank abruft. Stattdessen denke ich darüber nach, eine separate Tabelle mit denselben Spaltenüberschriften auf einem neuen Blatt zu erstellen und die Daten dort einzugeben und dann eine dritte Tabelle auf einem anderen Blatt zu erstellen, die die Zeilen aus der Tabelle, die Daten aus SQL und dem abruft, irgendwie kombiniert Tabelle, in der ich Daten manuell eingebe. Wie kann ich das erreichen? (Oder gibt es alternativ einen besseren Weg, den ich irgendwie vermisse?)
Beispiel:
Table 1 (From Database):
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Foo | 12 |
| Mary | 1/6/13 | Foo | 7 |
| Mary | 1/6/13 | Bar | 5 |
| John | 1/6/13 | Foo | 5 |
| John | 1/13/13 | Foo | 13 |
- -
Table 2 (Entered Manually):
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Baz | 3 |
| Mary | 1/6/13 | Baz | 2 |
| John | 1/13/13 | Baz | 5 |
- -
Result:
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Foo | 12 |
| Mary | 1/6/13 | Foo | 7 |
| Mary | 1/6/13 | Bar | 5 |
| John | 1/6/13 | Foo | 5 |
| John | 1/13/13 | Foo | 13 |
| Bob | 1/6/13 | Baz | 3 |
| Mary | 1/6/13 | Baz | 2 |
| John | 1/13/13 | Baz | 5 |
Antworten:
Hier ist eine reine Excel-Lösung ohne VBA. Es funktioniert mithilfe einer INDEX-Funktion, um die Zeilen und Spalten der SQL-Daten zu verkleinern, bis die Werte erschöpft sind und eine Fehlerbedingung auftritt. Eine IFERROR-Funktion fängt den Fehler ab und verwendet eine zweite INDEX-Funktion, um die Zeilen und Spalten der manuell eingegebenen Daten zu verkleinern, bis diese Werte erschöpft sind und eine Fehlerbedingung auftritt. Eine zweite IFERROR-Funktion fängt den Fehler ab und gibt einen Bindestrich ("-") zurück. (Die SQL-Daten müssen über die Multifunktionsleiste aktualisiert werden, damit die Formeln ein korrektes Ergebnis liefern.)
Erstellen Sie eine dynamische SQLDB mit benanntem Bereich für die SQL-Daten in Sheet1 mithilfe der folgenden Formel:
Erstellen Sie einen zweiten dynamischen benannten Bereich EXCELRNG für die manuell eingegebenen Daten in Sheet2 mit der folgenden Formel:
Beide benannten Bereiche setzen voraus, dass Variablennamen in Zeile 1 jedes der beiden Blätter eingegeben werden.
Geben Sie die Variablennamen in Zeile 1 von Blatt 3 ein (beginnend in Zelle A1).
Geben Sie die folgende Formel in Zelle A2 von Blatt 3 ein:
Kopieren Sie die Formel über die Spalten mit den Variablennamen und dann über die Zeilen, bis die Ergebnisse der Formeln alle Bindestriche ("-") sind.
Als nächster Schritt ist es möglich, eine Pivot-Tabelle in einem anderen Blatt zur Analyse und Organisation zu erstellen.
Der erste Schritt wäre wiederum, einen dynamischen benannten Bereich zu erstellen, z. B. RESULTRNG, und die folgende Formel in das Eingabefeld Name Manager für den benannten Bereich einzufügen:
Erstellen Sie dann eine Pivot-Tabelle in einem neuen Blatt und legen Sie RESULTRNG als die Tabelle fest, die Sie analysieren möchten. Dadurch werden alle nachfolgenden Striche aus der Formeltabelle in Sheet3 herausgefiltert.
Dies funktioniert, weil die RESULTRNG-Formel die Gesamtzahl der Zeilen in Sheet1 und Sheet2 (ohne den Header in Sheet2) und die Gesamtzahl der Spalten in Sheet1 hochzählt und ihre Ausdehnung basierend auf diesen Zählungen festlegt, wobei alle Bindestriche in nachfolgenden Zeilen ausgeschlossen sind ( oder Spalten) in der Sheet3-Formeltabelle.
quelle
Ich habe einen Weg gefunden, es zu tun. Diese Lösung ist etwas knifflig und erfordert, dass beide Tabellen ihre eigenen separaten Blätter haben (mit nichts anderem), aber ansonsten macht sie fast genau das, was ich will. (Hier scheint auch viel Potenzial für komplexere Operationen wie Joins zu bestehen.)
Wechseln Sie in der Multifunktionsleiste zur Registerkarte "Daten", klicken Sie auf "Aus anderen Quellen" und auf "Aus Microsoft-Abfrage". Klicken Sie dann auf Excel-Dateien, wählen Sie die Datei aus, in der Sie gerade arbeiten, und klicken Sie auf OK. Klicken Sie dann auf Abbrechen und klicken Sie auf "Ja", wenn Sie befördert werden, ob Sie die Bearbeitung in Microsoft Query fortsetzen möchten. Von hier aus können Sie auf die Schaltfläche SQL klicken und eine benutzerdefinierte SQL-Abfrage auf ein beliebiges Blatt in der Tabelle schreiben. In meinem Fall:
Hinweis: Bei mir funktioniert diese Methode nicht mehr, nachdem ich die Datei geschlossen und erneut geöffnet habe. Ich poste es trotzdem hier, falls es nur ein Problem mit meinem Computer ist oder jemand anderes es zum Laufen bringen kann.
quelle
Wenn Sie an einer VBA-Lösung interessiert sind, konnte ich Folgendes zum Laufen bringen:
Legen Sie einen dynamischen benannten Bereich für die Daten fest, die Sie von SQL Server abrufen. Öffnen Sie den Namensmanager, geben Sie einen neuen Namen ein (z. B. "SQLDB") und kopieren Sie die folgende Formel in das Eingabefeld "Verweist auf". Ich habe angenommen, dass sich Ihre eingegebenen Daten in Blatt 1 befinden:
Legen Sie einen anderen benannten Bereich für den Bereich fest, in dem die manuellen Daten eingegeben werden. Ich habe den Namen EXCELRNG verwendet und angenommen, dass er in Sheet2 enthalten ist. Der benannte Bereich beginnt in Zeile 2, um eine Kopfzeile auszuschließen. Die Formel hier ist identisch mit der ersten, mit Ausnahme des Blattes, auf das sie sich bezieht:
Hier sind die ersten Einstellungen, die ich für die Verbindung zur SQL-Tabelle verwendet habe. Das Dialogfeld wird aufgerufen, indem Sie auf der Registerkarte Daten auf der Multifunktionsleiste Verbindungen auswählen. Durch Deaktivieren der Hintergrundaktualisierung wird sichergestellt, dass das VBA-Makro angehalten wird, bis eine Aktualisierung der Daten in der Excel-Tabelle abgeschlossen ist. Das Aktualisieren der Verbindung beim Öffnen des Arbeitsblatts ist möglicherweise nicht erforderlich, aber ich wollte sicherstellen, dass die Authentifizierung erfolgt, bevor das Makro ausgeführt wird.
Schließlich ist dies der VBA-Code. Um es einzufügen, wählen Sie Visual Basic auf der Registerkarte Entwickler. Markieren Sie den Arbeitsblattnamen in der Liste links. Es wird als "VBA-Projekt (Blattname)" bezeichnet. Wählen Sie dann Modul einfügen in der Menüleiste oben auf dem Bildschirm und fügen Sie den Code in das neue Modul ein. Beachten Sie, dass ich die konsolidierte Tabelle in Blatt 3 eingefügt habe. Das Makro sortiert die neue Tabelle nicht, obwohl das nicht schwer hinzuzufügen wäre.
quelle
Hier ist eine Version von @ chuffs "Pure Excel" -Lösung, die speziell für die Arbeit mit Tabellen entwickelt wurde. (IE Die beiden Datenquellen, die Sie zusammenführen möchten, sind Tabellen.)
Der Hauptunterschied zwischen dieser Methode und dem in seiner Antwort angegebenen Chuff besteht darin, dass Sie für die beiden Datensätze, die Sie zusammenführen, keine benannten Bereiche definieren müssen, da es sich um Tabellen handelt, die bereits einen eigenen benannten Bereich haben. Benennen Sie also Ihren ersten
Table1
und Ihren zweiten TischTable2
.Erstellen Sie nun eine neue Tabelle in der oberen linken Ecke eines neuen Blattes und geben Sie ihr dieselben Spaltennamen wie die beiden anderen Tabellen. Geben Sie dann die folgende Formel in Zelle A2 des gerade erstellten Blattes ein:
Kopieren Sie als Nächstes diese Formel über alle Tabellenspalten und dann über die Zeilen, bis die Ergebnisse der Formeln alle Bindestriche ("-") sind. Hinweis: Das Sortieren dieser neuen Tabelle führt zu nichts, da der Inhalt jeder Zelle tatsächlich identisch ist (alle enthalten dieselbe Formel).
Wenn Spalten in der zusammengeführten Tabelle Nullen anzeigen, wenn eine leere Zelle angezeigt werden soll, können Sie die Formel in dieser Spalte mit der Ersatzfunktion wie folgt umschließen:
Wenn Sie eine Pivot-Tabelle erstellen möchten, die Daten aus dieser neuen Tabelle verwendet, müssen Sie einen benannten Bereich erstellen. Benennen Sie zuerst die Tabelle
Table3
. Gehen Sie nun zur Registerkarte Formeln und klicken Sie auf "Name definieren". Geben Sie der Referenz einen Namen und geben Sie die folgende Gleichung für ihren Wert ein ("Bezieht sich auf"):Sie können diese benannte Referenz dann als Bereich für Ihre Pivot-Tabelle verwenden.
quelle
Wenn Sie nur einmalig ein Ergebnis erzielen möchten, gibt es eine Website, auf der zwei Tabellen für Sie zusammengeführt werden: https://office-tools.online/table/merge/
Sie fügen die Tabellen in die Webseite ein und wählen die relevanten Parameter aus. Hier ist ein Screenshot des integrierten Beispiels, das zeigt, wie es verwendet wird:
quelle