Ich musste JSON Daten aus einer REST API in Excel importieren. Die letzten Jahre habe ich mit VBA nicht viel gemacht, mit fehlt also die Übung. Hier dokumentiere ich kurz, wie ich die Daten mit etwas VBA in Excel bekomme.
1- Verweise aktivieren
✅ Microsoft XML, v6.0
✅ Microsoft Scripting Runtime

2- VBA-JSON installieren
- Download: https://github.com/VBA-tools/VBA-JSON
- JsonConverter.bas aus Download in das Projekt importieren (VBA Editor öffnen, Alt + F11; Datei > Datei importieren)
3- VBA Code
- Rechtsklick auf Module > Einfügen > Modul
- Code:
Sub js_json_api_example()
Dim req As MSXML2.ServerXMLHTTP60
Dim apiURL, ret As String
Set req = New MSXML2.ServerXMLHTTP60
' Example API: Openweathermap.org
apiURL = "https://samples.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=439d4b804bc8187953eb36d2a8c26a02"
' Verbindung herstellen
req.Open "GET", apiURL, False
req.send
' Status in Zelle A1 ausgeben
Range("a1").Value = req.Status & " - " & req.statusText
' JSON unformatiert in A2 ausgeben
ret = req.responseText
Range("a2").Value = ret
' JSON parsen
Dim jsonObject As Object
Set jsonObject = JsonConverter.ParseJson(ret)
' Variable Temp ausgeben (in Celsius umgerechnet, daher -273.15)
Range("a3").Value = Round(jsonObject("main")("temp") - 273.15)
End Sub
4- Ergebnis
- In Zelle „A1“ erscheint der Status des Requests
- In Zelle „A2“ erscheint das unformatierte JSON Objekt
- In Zelle „A3“ erscheint die in °C umgerechnete Temperatur aus dem JSON Objekt

Quellen & weiterführende Links:
https://github.com/VBA-tools/VBA-JSON
http://excelerator.solutions/2017/08/16/import-json-to-excel-using-vba/
http://excelerator.solutions/2017/08/28/excel-http-get-request/
https://wellsr.com/vba/2019/excel/vba-http-get-requests-api-serverxmlhttp60/
https://simpleexcelvba.com/how-to-get-http-request-with-xmlhttprequest/
https://technet.rapaport.com/Info/Prices/SampleCode/VBA_Example.aspx
Perfekte Doku 🙂
Vielen Dank
Freut mich!
Wo finde ich den Code?
Danke für den Hinweis, da funktioniert wohl das Embed nicht. Habe den Code eingefügt und im Gist verlinkt. VG
Vielen Dank! 🙂 Wie kann man dem Request noch einen Head (Token etc.) beifügen?
Ich habe lange nichts mehr in der Richtung gemacht. Evtl. hilft dir das:
https://stackoverflow.com/questions/37028710/custom-header-with-msxml2-serverxmlhttp
Hier noch eine andere evtl. nützliche Diskussion:
https://www.mrexcel.com/board/threads/msxml2-serverxmlhttp-adding-authentication-getting-json.1103491/