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
| Thema | Empfehlung |
|---|---|
| Timeouts | Setzen Sie http.setTimeouts 5000, 5000, 10000, 30000 für ServerXMLHTTP |
| Fehler abfangen | Prüfen Sie immer http.Status vor der Verarbeitung |
| Rate Limiting | Bauen Sie Application.Wait zwischen Requests ein |
| SSL-Zertifikate | Verwenden Sie MSXML2.ServerXMLHTTP60 für HTTPS |
| Logging | Schreiben 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:
- Dynamische Arrays in Excel: FILTER, SORTIEREN, EINDEUTIG meistern
- Benannte Bereiche und strukturierte Tabellen in Excel
- Barrierefreie Word-Dokumente: Zugänglichkeit nach BITV 2.0