Zum Hauptinhalt springen

REST-APIs mit VBA aufrufen: JSON-Daten in Excel importieren

Veröffentlicht am 9. Mai 2026 · 10 Min. Lesezeit

Viele Unternehmensprozesse erfordern den Austausch von Daten zwischen Excel und externen Systemen. REST-APIs sind dabei der Standard. Ob Wechselkurse, Lagerbestände aus einem ERP-System oder Kundendaten aus einem CRM: Mit VBA lassen sich diese Schnittstellen direkt aus Excel ansprechen, ohne zusätzliche Software.

Dieser Beitrag zeigt Ihnen Schritt für Schritt, wie Sie HTTP-Requests aus VBA senden, JSON-Antworten verarbeiten und die Ergebnisse strukturiert in Ihre Tabelle schreiben.

Voraussetzungen

Bevor Sie loslegen, müssen zwei Verweise in Ihrem VBA-Projekt aktiviert werden (Menü: Extras > Verweise):

  • Microsoft XML, v6.0 – für HTTP-Requests über MSXML2.XMLHTTP60
  • Microsoft Scripting Runtime – für Dictionary-Objekte beim JSON-Parsing

Alternativ können Sie mit CreateObject("MSXML2.XMLHTTP") auch Late Binding verwenden, was die Verweise überflüssig macht.

Schritt 1: Einen einfachen GET-Request senden

Das folgende Beispiel ruft Daten von einer REST-API ab und gibt die Antwort als Text zurück.

Function ApiGet(url As String) As String
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "GET", url, False
    http.setRequestHeader "Content-Type", "application/json"
    http.setRequestHeader "Accept", "application/json"
    http.Send

    If http.Status = 200 Then
        ApiGet = http.responseText
    Else
        ApiGet = "FEHLER: HTTP " & http.Status & " - " & http.statusText
    End If

    Set http = Nothing
End Function

Schritt 2: Authentifizierung mit API-Key oder Bearer Token

Die meisten geschäftlichen APIs erfordern eine Authentifizierung. Hier zwei gängige Varianten:

' Variante 1: API-Key im Header
http.setRequestHeader "X-API-Key", "IHR_API_KEY_HIER"

' Variante 2: Bearer Token (OAuth 2.0)
http.setRequestHeader "Authorization", "Bearer " & strAccessToken

Sicherheitshinweis: Speichern Sie API-Schlüssel niemals direkt im VBA-Code. Verwenden Sie stattdessen eine geschützte Konfigurationszelle oder Windows-Umgebungsvariablen.

Schritt 3: JSON-Antworten parsen

Excel VBA hat keine eingebaute JSON-Unterstützung. Für einfache Strukturen können Sie String-Funktionen nutzen. Für komplexere Daten empfehlen wir die Open-Source-Bibliothek VBA-JSON (JsonConverter).

Einfaches Parsing mit String-Funktionen

Function ExtractJsonValue(json As String, key As String) As String
    Dim keyPos As Long, startPos As Long, endPos As Long
    keyPos = InStr(json, """" & key & """")
    If keyPos = 0 Then
        ExtractJsonValue = ""
        Exit Function
    End If

    startPos = InStr(keyPos, json, ":") + 1
    ' Leerzeichen und Anführungszeichen überspringen
    Do While Mid(json, startPos, 1) = " " Or Mid(json, startPos, 1) = """"
        startPos = startPos + 1
    Loop

    endPos = startPos
    Do While Mid(json, endPos, 1) <> """" And Mid(json, endPos, 1) <> "," _
        And Mid(json, endPos, 1) <> "}"
        endPos = endPos + 1
    Loop

    ExtractJsonValue = Mid(json, startPos, endPos - startPos)
End Function

Parsing mit VBA-JSON (empfohlen)

Sub ImportApiData()
    Dim json As String
    Dim parsed As Object
    Dim item As Object
    Dim row As Long

    json = ApiGet("https://api.beispiel.de/v1/produkte")
    Set parsed = JsonConverter.ParseJson(json)

    row = 2  ' Startzeile (Zeile 1 = Überschriften)
    For Each item In parsed
        Cells(row, 1).Value = item("id")
        Cells(row, 2).Value = item("name")
        Cells(row, 3).Value = item("preis")
        Cells(row, 4).Value = item("lagerbestand")
        row = row + 1
    Next item

    MsgBox "Import abgeschlossen: " & (row - 2) & " Datensätze."
End Sub

Schritt 4: POST-Requests für Datenübermittlung

Um Daten an eine API zu senden, verwenden Sie POST statt GET:

Function ApiPost(url As String, jsonBody As String) As String
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "POST", url, False
    http.setRequestHeader "Content-Type", "application/json"
    http.Send jsonBody

    ApiPost = http.responseText
    Set http = Nothing
End Function

' Aufruf:
Dim result As String
result = ApiPost("https://api.beispiel.de/v1/bestellungen", _
    "{""kunde"":""Müller GmbH"",""produkt_id"":42,""menge"":100}")

Fehlerbehandlung und Best Practices

ThemaEmpfehlung
TimeoutsSetzen Sie http.setTimeouts 5000, 5000, 10000, 30000 für ServerXMLHTTP
Fehler abfangenPrüfen Sie immer http.Status vor der Verarbeitung
Rate LimitingBauen Sie Application.Wait zwischen Requests ein
SSL-ZertifikateVerwenden Sie MSXML2.ServerXMLHTTP60 für HTTPS
LoggingSchreiben Sie Fehler in ein Log-Tabellenblatt

Praxisbeispiel: Wechselkurse automatisch aktualisieren

Sub WechselkurseAktualisieren()
    Dim json As String, kurs As String
    Dim waehrungen As Variant
    waehrungen = Array("USD", "GBP", "CHF", "JPY")

    Dim i As Long
    For i = 0 To UBound(waehrungen)
        json = ApiGet("https://api.exchangerate.host/latest?base=EUR&symbols=" _
            & waehrungen(i))
        kurs = ExtractJsonValue(json, waehrungen(i))
        Cells(i + 2, 1).Value = "EUR/" & waehrungen(i)
        Cells(i + 2, 2).Value = CDbl(kurs)
        Cells(i + 2, 3).Value = Now()
    Next i
End Sub

Fazit

VBA-basierte API-Anbindungen sind eine pragmatische Lösung, um Excel-Tabellen mit externen Datenquellen zu verbinden. Für Unternehmen, die bereits stark auf Excel setzen, ist dieser Ansatz oft schneller und kostengünstiger als eine vollständige Middleware-Lösung. Bei komplexen Integrationen oder hohen Sicherheitsanforderungen sollten Sie jedoch professionelle Unterstützung in Anspruch nehmen.


Das könnte Sie auch interessieren:

Unsere Services

Projekt anfragen