TOP

SQL-Abfrage in Excel VBA

Es gibt viele Möglichkeiten, Daten aus externen Quellen in ein Excel-Blatt zu übertragen. In diesem Artikel schauen wir uns an, wie man Daten aus einer MS Access-Datenbankdatei und aus einer Excel-Datei mithilfe von SQL in VBA abfragt. Ja, wir werden etwas SQL mit VBA mischen! Und es ist besser, als Sie vielleicht denken!

SQL steht für Structured Query Language und ist eine Sprache zum Abrufen von Informationen aus Datenbanken (z. B. MS Access, MS SQL Server, Oracle, Sybase, SAP, MySQL und andere).

Sie können Daten auch aus dem Internet, Textdateien oder anderen Excel- oder CSV-Dateien abrufen.


1. SQL-Abfrage von Excel VBA zur Datei MS Access

Wir benötigen also eine Datenbankverbindung (Variable varConn im Makro unten) und eine SQL-Abfrage (Variable varSQL), um den Abruf von Daten aus der Datenbank für den Bericht zu automatisieren. Das folgende Beispiel ist eine SQL-Abfrage, die Daten aus einer kleinen Datenbank in MS Access abruft.

Klicken Sie auf MS Access-Datenbank herunterladen. Die MS Access-Datei sieht folgendermaßen aus:

Schreiben wir unser Makro, das die SQL-Abfrage ausführt.

Öffnen Sie im Menü Service – Makros – Editor Visual Basic, insert ein neues Modul (Einfügen – Modulmenü) und kopieren Sie dort den Makrotext:

Sub SQLQuery_1()
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Access Driver (*.mdb, *.accdb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Klicken Sie auf Speichern und kehren Sie zu Excel zurück. Wählen Sie im Menü Ansicht – Makros (Alt+F8) den Namen unseres Makros „SQLQuery_1“. Es erscheint ein Dialogfeld. Klicken Sie auf „Datenbank...“, suchen Sie nach unserer Datei „Access“ und klicken Sie auf „OK“.

Jetzt können wir sehen, dass unsere Makroabfrage die Spalten „Monh“, „Product“ und „City“ aus der Tabelle „Sumproduct“ aus der Datenbank „test.mdb“ in die Datei „Excel“ gezogen hat.

2. SQL-Abfrage von VBA an die geschlossene Datei Excel

Ebenso können wir Daten aus einer regulären Excel-Datei wie aus einer Datenbank abrufen. Dazu müssen wir unseren Makrocode etwas umschreiben und den Verbindungstreiber von Access auf Excel ändern.

Wir exportieren die Sumproduct-Tabelle von Access nach Excel und speichern die Datei. Als nächstes fügen wir unseren geänderten Code in ein neues Modul ein und führen das Makro aus:

Sub SQLQuery_2()
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Es erscheint ein Fenster, in dem wir unsere Excel-Datei auswählen können (sollte Sumproduct.xlsx heißen oder eine andere Erweiterung haben). Wir finden und wählen es aus. Klicken Sie auf OK und wir erhalten die gleichen Daten wie aus der Access-Datei.

Artikel zum Thema:

  • Daten aus Access in Excel importieren