Daniel Krawiec ← Projekty

Migracja z VBA

Migracja VBA do Pythona dla miesięcznego raportowania

Problem

Kluczowe makro raportowe w VBA — nieudokumentowane, zbudowane przez pracownika, który odszedł. Regularnie się psuło.

Rozwiązanie

Odtworzenie logiki, przebudowa w Pythonie z dokumentacją, kontrolą wersji i testami jednostkowymi.

Wynik

Czas utrzymania miesięcznego zredukowany o 6 godzin. Proces odporny na awarie i gotowy do przekazania.

Sytuacja wyjściowa

Makro zostało napisane cztery lata wcześniej przez analityka finansowego, który od tamtej pory zmienił pracę. Uruchamiało się co miesiąc, żeby wygenerować pack raportów zarządczych — pobierało dane z trzech plików źródłowych, stosowało szereg transformacji i produkowało sformatowany raport Excel.

Nikt nie rozumiał w pełni jak działało. Działało, dopóki nie przestawało. Co dwa, trzy miesiące coś się psuło — format pliku źródłowego się zmieniał, arkusz zmieniał nazwę, albo Excel aktualizował się i jakaś przestarzała funkcja VBA przestawała działać. Każdy incydent kosztował zespół popołudnie debugowania, często dzień przed terminem raportu.

Co zrobiłem

Krok 1 — Zrozumieć co faktycznie robi

Przeszedłem przez kod VBA i udokumentowałem każdy krok: jakie dane wczytuje, jakie transformacje stosuje, jak wygląda wynik. Zajęło to dłużej niż się spodziewałem — makro rozrosło się przez lata jednolinijkowych poprawek, bez logicznej struktury i z hojnym użyciem On Error Resume Next.

Krok 2 — Napisać odpowiednik w Pythonie

Przebudowa używała pandas do manipulacji danymi i openpyxl do generowania Excela. Każda transformacja stała się nazwaną funkcją z jasnym kontraktem wejście/wyjście. Tam, gdzie VBA robił coś nieoczywistego, dodałem komentarze wyjaśniające logikę biznesową.

Krok 3 — Testowanie przed zastąpieniem

Przez dwa miesiące uruchamiałem obie wersje równolegle, porównując wyniki komórka po komórce. Znalazłem trzy rozbieżności — w dwóch przypadkach wersja Python była poprawna, a VBA miał długo nieodkryty błąd. W jednym przypadku źle odczytałem logikę VBA i musiałem poprawić Pythona.

Krok 4 — Pakiet przekazania

Finalne dostarczenie obejmowało: skrypt Python, README z instrukcją konfiguracji i opisem każdej transformacji, CHANGELOG dla przyszłych modyfikacji oraz zestaw testów weryfikujących kluczowe wartości wynikowe przy każdym uruchomieniu.

Wnioski

Porozmawiajmy.

Chcesz oddać proces, podzlecić wdrożenie albo po prostu umówić bezpłatny audyt? Napisz, co zżera czas Twojego zespołu — pierwsza 30-minutowa rozmowa jest bezpłatna.