Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Power Query VBA Abfragen zusammenführen

Power Query VBA Abfragen zusammenführen
27.06.2022 11:20:20
Sarah
Hallo Zusammen,
ich hoffe hier kann mir jemand weiterhelfen.
Mein Ziel ist es mehrere Abfragen aus verschiedenen CSV-Dateien mit einem Makro zusammenzuführen.
Bisheriger funktionierender Stand:
Die Abfragen werden mit einem Makro erzeugt. Die Pfade für die Dateien werden mithilfe der Dateinamen erstellt und in einem Array gespeichert. In einer For-Schleife werden dann mit den erzeugten Pfade eine Abfrage mit Verbindung erstellt.
Abfragen zusammenführen im Power Query(ohne Makro) :
Wenn ich meine Abfragen manuell im Power Query erstelle, erhalten die Abfragen automatisch einen Namen. Diese Namen der Abfragen werden dann mit der Methode Table.Combine zusammengeführt.
Noch Offen:
Bei dem manuellen Zusammenführen der Abfragen, wird automatisch die Namen der Abfragen in der Methode "Table.Combine" aufgelistet , siehe Bild im Anhang.
Userbild
Nun möchte ich dieses Teil über mein Makro laufen lassen. Meine Namen der Abfragen sind in einem Array gespeichert. Nun weiss ich aber leider nicht, wie ich den Inhalt des Arrays nacheinander auslesen kann. Ich hatte auch schon die Idee mit Stringbuilder zu arbeiten und die Namen in einem großen String zu speichern nur hatte das leider nicht in meinem Makro funktioniert.
Ich würde mich freuen, wenn jemand eine Idee hätte, wie ich die Abfragenamen (wie in dem Bild) in die Methode mit einem Makro einschreiben könnte.
Ich hoffe meine Erklärung war verständlich, ansonsten erläutere ich gerne noch bestehende Unklarheiten. Ich bedanke mich und verbleibe
mit vielen Grüßen
Sarah
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Power Query VBA Abfragen zusammenführen
27.06.2022 12:21:09
Yal
Hallo Sarah,
hier gibt es verschiedene Möglichkeiten.
Abgesehen davon, wenn alle deine CSV dieselbe Struktur haben und idealerweise in nur einem Verzeichnis liegen, könnten diese in einer einzigen PQ-Abfrage gelesen werden. Filter-Möglichkeit vor dem Laden gäbe es auch.
Weiter kommen wir leider nur auf Basis von deinem bisherigen Werk. Beseitige oder verfremde darin alles, was nicht im Internet gehört und lade deine Datei mit "Zum File-Upload".
VG
Yal
Anzeige
AW: Power Query VBA Abfragen zusammenführen
27.06.2022 13:31:40
Sarah
Hallo Yal,
Die CSV-Dateien liegen zwar alle in einem Verzeichnis aber die Wahl der Dateien erfolgt aus einer vorgegeben Liste. In der Musterdatei ist diese Tabelle im Tabellenblatt 1 zu sehen. Mit dieser Tabelle werden die Dateinamen in ein Array gespeichert und anschließend ein Pfad erstellt. und in ein weiteres Array gespeichert. Der Name der Abfrage ist hier auch der Name der Datei. Daher benötige ich die Möglichkeit den Inhalt des Arrays(mit den Dateinamen/auch Abfragenamen) in einem String zu übergeben .
https://www.herber.de/bbs/user/153787.xlsm
Ich bedanke mich schon und verbleibe mit
vielen Grüßen
Sarah
Anzeige
AW: Power Query VBA Abfragen zusammenführen
27.06.2022 19:11:49
Yal
Hallo Sarah,
es geht wesentlich einfacher, und vor allem im Sinne der Erfindung von Power Query:
_ im Menü Daten, "Neue Abfrage", "aus Datei", "Aus Ordner". Du wählst das Verzeichnis "C:\Users\Ordner\" aus
_ Abfrage in "Dateiliste" umbenennen (nur für die Erklärung wichtig)
_ zuerst stehen lassen, also "Schliessen & laden in ...", "nur Verbindung herstellen"
_ auf die vorhandene Tabelle "Tabelle1", Menü "Daten", "aus Tabelle"
_ "Spalte hinzufügen", "Benutzerdefinierte Spalte", Name "Datei", Formel "=[Dateiname] & ".csv"
_ gehe auf die Abfrage "Dateiliste",
_ Menü "Start", "Abfrage zusammenführen", Spalte "Name" aus der Abfrage "Dateiliste" und Spalte "Datei" aus "Tabelle1", Join-Art "innerjoin"
_ im Überschrift vom Spalte "Content", die 2 Pfleile nach unten klicken,
_ Behandlung vornehmen, wie in deiner bisherige Datei-Abfrage.
Nun sind alle deine Datei aus der Liste in "Tabelle1" bereits kombiniert.
Dasselbe mit der Sollwert-Datei.
Dann beide in "Dateiliste" kombinieren,
Schliessen & Laden
in der Abfrage-Liste "Dateiliste" auswählen, rechtsklicken, "Laden in..." "Nur Verdindung" belassen, aber "Dem Datenmodell hinzufügen" anhaken.
Dann Menü "Einfügen", "Pivottabelle" und als Quelle den Datenmodell verwenden.
Fertig.
Dass deine Datei "Sollwert" nicht dieselbe Spaltendefinition wie die anderen Datei könnte zu einer Schwierigkeit führen.
VG
Yal
Anzeige
AW: Power Query VBA Abfragen zusammenführen
29.06.2022 10:25:16
Sarah
Hallo Yal,
vielen Dank für die ausführliche Beschreibung einer Lösung. Ich hatte zuvor auch so einen Versuch in dem die Daten anschließend kombiniert werden. Da ich alles über das Makro laufen lassen möchte und die benutzerdefinierten Spalten Schwierigkeiten verursacht haben, habe ich diesen anderen Weg gewählt. Sobald das Makro gestartet wird sucht es für die weiteren Arbeitsschritte die benutzerdefinierte Spalte, welche gleichzeitig erstellt werden soll. Dies ergab dann leider immer ein Fehler. Vielleicht gibt es eine andere Möglichkeit benutzerdefinierte Spalten über das Makro zu generieren, die mir noch nicht bekannt sind aber das ist mein bisheriger Versuchsstand. Da mit dem neuem Ansatz die restlichen Schritte problemlos funktionieren, würde ich mich freuen wenn es eine Möglichkeit gäbe den Arrayinhalt in einen langen String zu speichern. Ich bedanke mich und verbleibe mit
vielen Grüßen
Sarah
Anzeige
AW: Power Query VBA Abfragen zusammenführen
30.06.2022 14:57:58
Yal
Hallo Sarah,
ich vertehe deine Beschreibung nicht. Eine Power Query Abfrage ist ein abgeschlossenes Gewerk. Diese mit einer Makro zu verunstalten ("benutzerdefinierte Spalte" ist eine reine PQ-Begriff) ist nicht zielführend.
das kommagetrennte Auflisten von Zelleninhalte kann wie folgt erreicht werden (Über einen Array zu gehen ist unnötig verkompliziert):

Sub test()
Dim Z As Range
Dim Liste As String
For Each Z In Worksheets("Tabelle1").Range(Range("N2"), Range("N99999").End(xlUp)).Cells
Liste = Liste & ", " & Z.Value
Next
Liste = Mid(Liste, Len(", ") + 1) 'das führende Komma+Leerzeichen wieder loswerden
MsgBox Liste
End Sub
Wahrscheinlich soll es ein Komma ohne anschliessende Leerzeichen werden. Aber die Anpassung bekommst Du hin.
VG
Yal
Anzeige
AW: Power Query VBA Abfragen zusammenführen
12.07.2022 14:17:48
Sarah
Hallo Yal,
die Verwendung des Makros dient zur Sicherheit und Minimierung von Anwenderfehler. Vielen Dank für die Lösung zur Erstellung einer Liste. Ich habe dies auch gut umsetzten können. Nun ist mir folgendes aufgefallen. Wenn ich meine "Liste" als Variable in meine M-Formel übergebe wird ein zusätzliches Anführungszeichen am Anfang und Ende angehängt. Die Variable an sich hat keine zusätzlichen Anführungszeichen zu Beginn. Gibt es eine Möglichkeit, dass diese nicht angehängt werden?
In der Abbildung sieht man den erweiterten Editor mit der Auflistung.
Userbild
Die Abfragename wurde mit der Variable Liste im Makro übergeben.
Userbild
Für die korrekte Verwendung muss der erweiterte Editor folgendermaßen aussehen.
Userbild
Ich bedanke mich und freue mich über neue Ideen.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Power Query VBA Abfragen zusammenführen


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Daten: Stelle sicher, dass deine CSV-Dateien im gleichen Verzeichnis liegen und die Dateinamen in einem Excel-Arbeitsblatt aufgelistet sind.

  2. Array erstellen: Speichere die Dateinamen in einem Array. Dies kann in VBA so aussehen:

    Dim Dateinamen() As String
    ' Hier wird das Array mit den Dateinamen gefüllt
  3. Power Query einrichten: Gehe in Excel zu Daten -> Neue Abfrage -> Aus Datei -> Aus Ordner. Wähle das Verzeichnis mit deinen CSV-Dateien aus.

  4. Abfragen zusammenführen: Verwende die Table.Combine Methode, um die Abfragen zusammenzuführen. Hierbei ist es wichtig, die Namen der Abfragen korrekt zu übergeben. Du kannst die Namen in einem großen String speichern:

    Dim Liste As String
    For Each Dateiname In Dateinamen
       Liste = Liste & Dateiname & ", "
    Next
    Liste = Left(Liste, Len(Liste) - 2) ' Letztes Komma entfernen
  5. M-Formel anpassen: Übergebe die Liste in deine M-Formel, um sie korrekt in Power Query zu verwenden.


Häufige Fehler und Lösungen

  • Fehler bei der Abfrageausführung: Wenn die Abfragen nicht korrekt zusammengeführt werden, stelle sicher, dass die Struktur deiner CSV-Dateien identisch ist.

  • Anführungszeichen in der M-Formel: Wenn zusätzliche Anführungszeichen erscheinen, überprüfe, wie du die Liste in Power Query übergibst. Achte darauf, dass du die richtigen Anführungszeichen verwendest.

  • Leere Abfragen: Achte darauf, dass dein Array keine leeren Werte enthält, da dies zu Fehlern beim Zusammenführen führen kann.


Alternative Methoden

  1. Power Query ohne VBA: Du kannst alle CSV-Dateien direkt über Power Query importieren, anstatt ein VBA-Makro zu verwenden. Wähle Daten -> Neue Abfrage -> Aus Ordner und folge den Anweisungen.

  2. Power Query und VBA kombinieren: Du kannst Power Query zum Laden der Daten nutzen und VBA für spezifische Transformationen, die in Power Query nicht möglich sind.


Praktische Beispiele

  • Beispiel 1: Wenn deine CSV-Dateien die gleiche Struktur haben, kannst du sie einfach über eine einzige Power Query Abfrage laden und dann mit Table.Combine zusammenführen.

  • Beispiel 2: Wenn du spezifische Spalten in deinen Abfragen benötigst, kannst du diese Spalten in der M-Formel definieren, bevor du die Abfragen zusammenführst.


Tipps für Profis

  • Verwendung von Power Query Arrays: Lerne, wie du Power Query Arrays effektiv nutzen kannst, um Daten dynamisch zu verarbeiten.

  • Optimierung der Abfragegeschwindigkeit: Achte darauf, dass du die Abfragen so optimierst, dass sie schneller geladen werden. Verwende Nur Verbindung, um die Abfragen nicht unnötig zu laden.

  • Dokumentation: Halte eine gute Dokumentation deiner VBA-Codes und Power Query Abfragen, um spätere Anpassungen zu erleichtern.


FAQ: Häufige Fragen

1. Frage
Wie kann ich die Namen der Abfragen dynamisch in VBA anpassen?
Antwort: Du kannst die Namen der Abfragen in einem Array speichern und dann in einer Schleife durch die Namen iterieren, um sie in der Table.Combine Methode zu verwenden.

2. Frage
Welches ist der beste Weg, um CSV-Dateien in Power Query zu importieren?
Antwort: Der einfachste Weg ist, die Funktion Aus Ordner zu verwenden, um alle Dateien in einem Verzeichnis gleichzeitig zu importieren und dann die notwendigen Transformationen in Power Query vorzunehmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige