VBA i API: jak połączyć Excela z zewnętrznymi systemami (np. pobrać kursy walut NBP)?

Dowiedz się, jak połączyć Excela z API NBP za pomocą VBA i pobierać dane, takie jak kursy walut. Praktyczny poradnik krok po kroku.
11 października 2025
blog
Poziom: Średnio zaawansowany

Artykuł przeznaczony dla użytkowników Excela znających podstawy VBA, którzy chcą integrować arkusze z zewnętrznymi API (np. NBP) i przetwarzać odpowiedzi JSON.

Z tego artykułu dowiesz się

  • Jak w Excelu wykorzystać VBA do wysyłania zapytań HTTP GET do zewnętrznych API?
  • Jak pobrać kursy walut z API NBP i odebrać odpowiedź w formacie JSON w VBA?
  • Jak przetwarzać odpowiedzi JSON w Excelu, obsługiwać błędy oraz tworzyć prosty interfejs do uruchamiania makr?

Wprowadzenie do integracji Excela z zewnętrznymi API

Microsoft Excel to nie tylko narzędzie do analizy danych i tworzenia wykresów – dzięki wbudowanemu językowi programowania VBA (Visual Basic for Applications) może stać się również potężnym interfejsem do komunikacji z zewnętrznymi systemami. Jednym z najczęstszych scenariuszy wykorzystania takiej integracji jest pobieranie danych z API (Application Programming Interface), np. aktualnych kursów walut, informacji o pogodzie czy danych finansowych.

API to specjalne interfejsy udostępniane przez serwisy internetowe, które pozwalają na automatyczną wymianę danych między aplikacjami. W przypadku Excela, integracja z API umożliwia dynamiczne pobieranie i aktualizowanie informacji bez konieczności ręcznego kopiowania danych ze stron internetowych.

Typowym protokołem wykorzystywanym do komunikacji z API jest HTTP, a najczęściej używaną metodą – zapytanie typu GET, które pozwala pobrać dane z określonego adresu URL. VBA w Excelu daje możliwość wysyłania takich zapytań i odbierania odpowiedzi, które następnie można przetwarzać i prezentować w arkuszu.

Zastosowania integracji Excela z API są bardzo szerokie i obejmują m.in.:

  • automatyczne pobieranie kursów walut z Narodowego Banku Polskiego,
  • aktualizację danych giełdowych lub cen produktów,
  • sprawdzanie statusów przesyłek kurierskich,
  • pobieranie danych pogodowych lub statystycznych.

Choć sama koncepcja może wydawać się złożona, podstawowa integracja API z Excelem nie wymaga zaawansowanej wiedzy programistycznej. VBA umożliwia stworzenie prostych makr, które wykonują takie zadania automatycznie, oszczędzając czas i zwiększając dokładność analiz.

Podstawy zapytań HTTP GET w VBA

Integracja Excela z zewnętrznymi systemami opiera się przede wszystkim na komunikacji przez protokół HTTP. W kontekście Visual Basic for Applications (VBA), jednym z najczęściej używanych typów zapytań jest HTTP GET. Umożliwia on pobranie danych z zewnętrznego źródła, takiego jak publiczne API, bez konieczności wysyłania dodatkowych informacji w treści zapytania.

VBA nie posiada wbudowanego, wysokopoziomowego narzędzia do obsługi żądań HTTP, dlatego najczęściej wykorzystuje się komponent Microsoft XML (MSXML2.XMLHTTP) lub WinHttp.WinHttpRequest. Oba podejścia pozwalają ustanowić połączenie z serwerem, wysłać zapytanie typu GET i odebrać odpowiedź – zazwyczaj w formacie JSON.

Ogólny schemat działania wygląda następująco:

  • Tworzenie obiektu do obsługi żądań HTTP.
  • Ustawienie adresu URL, który ma zostać wywołany (np. punkt końcowy API).
  • Wysłanie żądania metodą GET.
  • Odczytanie odpowiedzi z serwera.

Przykład użycia może wyglądać następująco:

Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.przyklad.com/dane", False
http.Send
MsgBox http.responseText

Warto zauważyć, że metoda Open przyjmuje kilka argumentów – typ żądania (np. "GET"), adres URL oraz informację o tym, czy połączenie ma być asynchroniczne. Po wywołaniu Send otrzymujemy odpowiedź, którą można dalej przetwarzać w zależności od formatu danych.

W praktyce, wykorzystanie zapytań HTTP GET w VBA otwiera drogę do pozyskiwania dynamicznych danych w czasie rzeczywistym, co znacznie zwiększa możliwości analityczne arkusza kalkulacyjnego. W kolejnych etapach można dodawać obsługę nagłówków, analizować odpowiedzi serwera lub łączyć się z konkretnymi źródłami danych, np. Narodowym Bankiem Polskim.

💡 Pro tip: Preferuj WinHttp.WinHttpRequest do zapytań GET, bo łatwo ustawisz timeouty i masz lepszą obsługę TLS; dodaj nagłówek Accept: application/json i zawsze weryfikuj http.Status przed użyciem odpowiedzi.

3. Przykład połączenia z API NBP przy użyciu VBA

Integracja Excela z API Narodowego Banku Polskiego (NBP) to praktyczny sposób na automatyczne pobieranie aktualnych danych finansowych bez konieczności ręcznego wprowadzania. NBP udostępnia publiczne API, które umożliwia m.in. pobieranie kursów walut w formacie JSON. W tej sekcji przedstawimy ogólny schemat połączenia z tym API z wykorzystaniem języka VBA.

Podstawowe kroki, które należy wykonać w VBA, aby połączyć się z API NBP, to:

  • Nawiązanie połączenia HTTP do wybranego zasobu API NBP
  • Wysłanie zapytania typu GET
  • Odebranie i tymczasowe przechowanie odpowiedzi JSON

Przykładowy endpoint API NBP wykorzystywany do pobierania kursu średniego euro z dnia bieżącego wygląda następująco:

https://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json

Przykład podstawowego kodu VBA do pobrania danych:

Sub PobierzKursEuro()
    Dim http As Object
    Dim url As String
    Dim odpowiedz As String

    Set http = CreateObject("MSXML2.XMLHTTP")
    url = "https://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json"

    http.Open "GET", url, False
    http.Send

    If http.Status = 200 Then
        odpowiedz = http.responseText
        MsgBox odpowiedz
    Else
        MsgBox "Błąd połączenia: " & http.Status
    End If
End Sub

Powyższy kod demonstruje, jak wysłać podstawowe zapytanie GET i odebrać odpowiedź z API. Na tym etapie dane są jeszcze w surowym formacie JSON i nie są przetwarzane — to zostanie omówione w kolejnych sekcjach.

Warto pamiętać, że API NBP oferuje różne tabele kursów walut (A, B, C), które różnią się zakresem dostępnych walut i typami kursów (np. średni, kupna, sprzedaży). Parametry te można zmieniać dynamicznie w adresie URL, dostosowując zapytanie do konkretnych potrzeb.

TabelaZawartośćPrzykład waluty
AKursy średnie większości walutEUR, USD
BKursy średnie mniej popularnych walutTHB, MXN
CKursy kupna i sprzedażyEUR, USD

Ten prosty przykład pokazuje, że dostęp do danych z API NBP można uzyskać bezpośrednio z poziomu Excela, co otwiera szerokie możliwości dalszej automatyzacji i analizy danych finansowych. Jeśli chcesz nauczyć się więcej o programowaniu w VBA i tworzeniu własnych rozwiązań w Excelu, sprawdź Kurs VBA (Visual Basic for Applications) w Microsoft Excel podstawowy – zasady tworzenia i kodowania algorytmów oraz automatyzacja pracy i tworzenie aplikacji.

Przetwarzanie odpowiedzi JSON w Excelu

Po nawiązaniu połączenia z wybranym API i uzyskaniu odpowiedzi w formacie JSON, kolejnym krokiem jest jej przetworzenie – czyli odczyt i zapis danych w arkuszu Excela. Excel natywnie nie obsługuje formatu JSON w VBA, dlatego konieczne jest użycie dodatkowych narzędzi lub bibliotek.

JSON (JavaScript Object Notation) to lekki format wymiany danych, który strukturalnie przypomina obiekty i tablice. W kontekście Excela, dane JSON należy zamienić na strukturę zrozumiałą dla VBA – zazwyczaj do postaci typów takich jak Dictionary, Collection lub tablice.

Najczęstsze podejścia do przetwarzania JSON:

  • Korzystanie z biblioteki „JsonConverter” – popularna, darmowa biblioteka VBA autorstwa Tim'a Hall'a, która umożliwia parsowanie JSON do struktury słowników i kolekcji.
  • Ręczne parsowanie JSON – możliwe przy bardzo prostych strukturach, ale podatne na błędy i niezalecane dla danych zagnieżdżonych.
  • Wczytywanie danych JSON jako tekst i późniejsze wykorzystanie funkcji Excela – przydatne w przypadku małych plików lub analiz ad hoc.

Przykład podstawowego wykorzystania biblioteki JsonConverter do przetworzenia odpowiedzi API:

' Wymaga dodania modułu JsonConverter.bas
Dim json As Object
Dim http As Object

Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.nbp.pl/api/exchangerates/tables/A?format=json", False
http.Send

Set json = JsonConverter.ParseJson(http.ResponseText)

' Przykład odczytania kursu pierwszej waluty:
MsgBox json(1)("rates")(1)("currency") & " - " & json(1)("rates")(1)("mid")

Po przetworzeniu danych JSON możliwe jest ich dynamiczne wpisywanie do komórek Excela, co pozwala na automatyczną aktualizację raportów, analiz czy wykresów.

Porównanie metod przetwarzania JSON

Metoda Zalety Wady
JsonConverter Łatwość użycia, obsługa zagnieżdżeń Wymaga dodania zewnętrznego modułu
Ręczne parsowanie Brak zależności, pełna kontrola Skalowanie trudne, podatność na błędy
Import tekstu do arkusza Szybkość dla jednorazowych analiz Brak strukturalnej kontroli nad danymi

Wybór metody zależy od złożoności danych oraz potrzeby ich dalszego przetwarzania. Dla profesjonalnych zastosowań zdecydowanie zaleca się korzystanie z dedykowanej biblioteki.

💡 Pro tip: Parsuj JSON biblioteką JsonConverter, a dane zapisuj hurtowo tablicą (Range.Value = arr) zamiast komórka‑po‑komórce – to radykalnie przyspiesza działanie; przed odczytem pól sprawdzaj ich istnienie metodą Exists.

Omówienie struktury danych zwracanych przez API

Podczas integracji Excela z zewnętrznym API, kluczowe jest zrozumienie, w jakiej formie dane są zwracane. W przypadku API Narodowego Banku Polskiego (NBP), odpowiedzi zazwyczaj przyjmują postać danych w formacie JSON (JavaScript Object Notation). JSON to lekki format wymiany danych, który jest łatwy do odczytu zarówno dla ludzi, jak i maszyn.

Struktura takiej odpowiedzi może się różnić w zależności od rodzaju zapytania, jednak istnieją wspólne elementy charakterystyczne dla danych zwracanych przez API NBP.

Typowa odpowiedź JSON z API NBP

Poniżej przedstawiono uproszczony przykład odpowiedzi API NBP dla kursów walut:

{
  "table": "A",
  "currency": "euro",
  "code": "EUR",
  "rates": [
    {
      "no": "068/A/NBP/2024",
      "effectiveDate": "2024-04-09",
      "mid": 4.3212
    }
  ]
}

Najważniejsze elementy tej struktury to:

  • table – oznaczenie tabeli kursowej (np. A, B, C).
  • currency – nazwa waluty (np. „euro”).
  • code – trzyliterowy kod waluty (np. „EUR”).
  • rates – tablica zawierająca obiekty z informacjami o kursach, z takimi polami jak:
    • no – numer tabeli kursowej,
    • effectiveDate – data obowiązywania kursu,
    • mid – kurs średni waluty.

Porównanie formatu JSON i struktury danych Excela

Aby dane z API były przydatne w Excelu, należy je odpowiednio odwzorować. Poniżej znajduje się porównawcza tabela pokazująca, jak struktura JSON może zostać przekształcona na strukturę tabelaryczną w arkuszu kalkulacyjnym:

JSONExcel
"currency": "euro"Kolumna: Nazwa waluty
"code": "EUR"Kolumna: Kod waluty
"rates" → "effectiveDate": "2024-04-09"Kolumna: Data
"rates" → "mid": 4.3212Kolumna: Kurs średni

Takie podejście pozwala na łatwe sortowanie, filtrowanie i dalszą analizę danych bezpośrednio w arkuszu. Zrozumienie tej struktury jest kluczowe przed próbą przetwarzania danych w VBA, ponieważ umożliwia poprawne odczytanie żądanych informacji i ich integrację z istniejącymi arkuszami Excela. Jeśli chcesz poszerzyć swoją wiedzę i skutecznie wykorzystywać VBA w pracy z danymi, warto rozważyć udział w Kursie VBA (Visual Basic for Applications) w Microsoft Excel - analiza danych i automatyzacja raportowania.

Obsługa błędów i wyjątków w kodzie VBA

Integrując Excela z zewnętrznymi API za pomocą VBA, niezwykle ważne jest zadbanie o odpowiednią obsługę błędów. Problemy mogą wystąpić na wielu etapach: od błędów sieciowych, przez niepoprawne dane, aż po błędne użycie funkcji w kodzie. Dzięki właściwemu zarządzaniu wyjątkami możemy zapewnić stabilne działanie aplikacji, czytelne komunikaty dla użytkownika oraz łatwiejsze debugowanie.

Dlaczego obsługa błędów jest ważna?

  • Stabilność aplikacji: zapobiega nagłemu zatrzymaniu działania makra.
  • Informacja dla użytkownika: umożliwia wyświetlenie komunikatu o problemie w zrozumiały sposób.
  • Debugowanie: pomaga programiście zidentyfikować źródło błędu.

Metody obsługi błędów w VBA

Technika Zastosowanie
On Error Resume Next Pomija błąd i przechodzi do następnej instrukcji; przydatne przy mniej krytycznych operacjach.
On Error GoTo [Etykieta] Przekierowuje wykonanie kodu do bloku obsługi błędu; stosowane przy bardziej złożonych operacjach.
Err.Number / Err.Description Umożliwia analizę typu błędu i podjęcie odpowiednich działań.

Przykład: podstawowa obsługa błędów dla zapytania HTTP

Sub GetDataFromAPI()
    On Error GoTo ErrorHandler

    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "GET", "https://api.nbp.pl/api/exchangerates/tables/A?format=json", False
    http.Send

    If http.Status <> 200 Then
        MsgBox "Błąd połączenia: " & http.Status
        Exit Sub
    End If

    ' Przetwarzanie odpowiedzi JSON...

    Exit Sub

ErrorHandler:
    MsgBox "Wystąpił błąd: " & Err.Description, vbCritical, "Błąd"
End Sub

Powyższy kod pokazuje prostą strukturę obsługi błędów: w przypadku problemu z połączeniem lub wywołania wyjątku, użytkownik zostaje poinformowany o błędzie, a dalsze wykonywanie makra zostaje przerwane. W bardziej rozbudowanych aplikacjach stosuje się także logowanie błędów oraz ich klasyfikację.

Dobrze zaimplementowana obsługa wyjątków znacząco zwiększa niezawodność i profesjonalizm rozwiązania opartego na VBA i API.

💡 Pro tip: Stosuj On Error GoTo z blokiem sprzątającym i logowaniem szczegółów (Err.Number, Err.Description, http.Status, fragment responseText); dla kodów 429/5xx zaimplementuj ponowienia z rosnącym opóźnieniem.

Tworzenie prostego interfejsu użytkownika w Excelu

Po przygotowaniu kodu VBA do komunikacji z API, warto ułatwić użytkownikowi korzystanie z tej funkcjonalności poprzez opracowanie prostego i intuicyjnego interfejsu w samym Excelu. Dzięki temu nawet osoby bez doświadczenia programistycznego będą mogły pobierać dane z zewnętrznych systemów za pomocą kilku kliknięć.

Excel oferuje kilka sposobów na stworzenie interfejsu użytkownika, które można dostosować do konkretnych potrzeb:

  • Przyciski formularza (Form Controls) – umożliwiają szybkie dodanie przycisku do arkusza, który można powiązać z procedurą VBA. To najprostszy sposób na uruchomienie kodu.
  • Formularze UserForm – bardziej zaawansowana metoda, pozwalająca projektować własne okna dialogowe z kontrolkami takimi jak pola tekstowe, listy rozwijane czy przyciski akcji.
  • Komórki jako pola wejściowe – można wykorzystać wybrane komórki jako miejsca do wprowadzenia parametrów (np. daty lub kodu waluty), a wynik zwracać bezpośrednio do arkusza.

Najczęściej stosowanym rozwiązaniem w prostych projektach jest umieszczenie przycisku w arkuszu, który po kliknięciu uruchamia makro pobierające dane z API. Można go łatwo dodać z poziomu zakładki „Deweloper” w Excelu. Alternatywnie, dla bardziej rozbudowanych aplikacji, warto rozważyć stworzenie dedykowanego formularza UserForm, który poprowadzi użytkownika krok po kroku przez proces pobierania danych.

Tworząc interfejs, należy pamiętać o przejrzystości i łatwości obsługi. Dobrze zaprojektowany UI zwiększa użyteczność rozwiązania oraz ogranicza ryzyko błędów użytkownika.

Zastosowania praktyczne i dalsze rozszerzenia

Integracja Excela z zewnętrznymi API otwiera przed użytkownikami szerokie możliwości automatyzacji i usprawnienia codziennej pracy z danymi. Dzięki wykorzystaniu VBA i protokołu HTTP można pobierać aktualne informacje wprost do arkusza kalkulacyjnego, eliminując konieczność ręcznego kopiowania danych.

Jednym z najczęstszych przypadków użycia jest automatyczne pobieranie kursów walut, np. z API Narodowego Banku Polskiego. Ale to tylko początek – podobną metodologię można zastosować do wielu innych źródeł danych:

  • Aktualizowanie notowań giełdowych z zagranicznych serwisów finansowych
  • Pobieranie prognozy pogody dla określonego miasta w czasie rzeczywistym
  • Sprawdzanie statusu wysyłki z systemów kurierskich
  • Łączenie się z systemami ERP lub CRM w celu synchronizacji danych
  • Import danych statystycznych z otwartych baz danych, jak np. Eurostat lub GUS

W praktyce, każdy system lub usługa oferująca publiczne lub prywatne API może zostać zintegrowana z Excelem. Może to obejmować zarówno zapytania jednorazowe, jak i cykliczne pobieranie danych, np. przy otwarciu pliku lub kliknięciu przycisku. Kluczem jest zrozumienie formatu odpowiedzi (najczęściej JSON lub XML) oraz umiejętność przekształcenia go w dane użyteczne w arkuszu.

Rozszerzeniem podstawowych zastosowań może być budowa dynamicznych dashboardów, które aktualizują się automatycznie, tworzenie raportów porównawczych na podstawie danych z wielu źródeł, a także integracja z usługami chmurowymi, takimi jak Google Maps, OpenWeather czy serwisy społecznościowe.

Możliwości są niemal nieograniczone – wszystko zależy od potrzeb użytkownika i dostępności odpowiedniego API. Excel staje się wtedy nie tylko narzędziem do obliczeń, ale także potężnym interfejsem do pracy z danymi z całego internetu.

icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments