Abrakadabra, choć nie makabra. Magia ukryta w arkuszu kalkulacyjnym.

grafika

Dzięki nim świat przyspieszył. Dzięki nim praca księgowych, statystyków, logistów, matematyków i wielu innych specjalistów stała się prostsza i przyjemniejsza. Arkusze kalkulacyjne, bo o nich mowa, to towarzyszące nam od ponad 40 lat programy komputerowe, przedstawiające zbiory danych w postaci zestawu kolumn i wierszy, pozwalające na swobodną ich obróbkę, analizę i prezentację. Podstawowymi narzędziami obecnych arkuszy kalkulacyjnych są różnorodne funkcje matematyczne, statystyczne, finansowe, bazodanowe, logiczne czy funkcje daty i czasu, pozwalające na automatyzację przetwarzania danych oraz tworzenie symulacji. Znane nam aplikacje służące do obsługi arkuszy kalkulacyjnych pozwalają również na wizualizację danych przy pomocy w pełni funkcjonalnych, zaawansowanych pulpitów menadżerskich. Pierwotnie jednak nie były to tak zaawansowane narzędzia.

Rzut oka w przeszłość

Obecnie trudno sobie wyobrazić firmę, w której nie ma chociaż jednego laptopa. Wszelkie dokumenty, korespondencja czy faktury są skrupulatnie sporządzane w formie elektronicznej i w taki sposób przetwarzane. Pod koniec lat siedemdziesiątych ubiegłego wieku wyglądało to jednak zupełnie inaczej – komputery można było spotkać jedynie w domach entuzjastów, natomiast maszyny obliczeniowe „z prawdziwego zdarzenia” (zajmujące, notabene, sporej wielkości pomieszczenia) były domeną centrów obliczeniowych. To właśnie w nich były wykonywane analizy finansowe, prognozy czy podsumowania budżetu. Taka operacja mogła trwać całymi tygodniami, a zarezerwowana była jedynie dla firm, które stać było na wyłożenie czasami kilkudziesięciu tysięcy dolarów. Zdecydowana część musiała więc pozostać przy tradycyjnej metodzie analizy danych – kartce papieru, ołówku, gumce, kalkulatorze i dużej dozie cierpliwości. A mimo najszczerszych chęci dodanie kolejnej kolumny w takim zestawieniu było, delikatnie mówiąc, problematyczne.

Trudności w wykonywaniu analiz liczbowych i koszty, jakie ciągnęły one ze sobą, zainspirowały młodego studenta Harvard Business School, Daniela S. Bricklina (ur. 16 lipca 1951 w Filadelfii), do podjęcia próby stworzenia komputerowego odpowiednika arkusza kalkulacyjnego. Jego pierwotna wizja była niezwykła: ekran zapożyczony z samolotów wojskowych, kalkulator połączony z myszką i sterowanie gestami. Aby zwiększyć szansę powodzenia projektu, Bricklin poprosił o pomoc kolegę z Massachusetts Institute of Technology, Boba Frankstona – informatyka urodzonego w 1949 roku w Nowym Jorku.
Wypuszczony przez nich rok później pierwszy komputerowy program do obsługi arkusza kalkulacyjnego nazwany VisiCalc (od angielskiego visible calculator) mógł pomieścić zaledwie 254 wiersze i 63 kolumny (wszystkie o tej samej szerokości), a wszystko za sprawą obsługiwanego komputera – VisiCalc został wypuszczony na komputery Apple II, musiał się zmieścić się w zaledwie 32KB pamięci.

Nie były to jednak jedyne ograniczenia arkusza: program nie rysował wykresów, nie miał systemu pomocy, menu składało się z pojedynczych liter, a do przetwarzania wprowadzanych danych należało zmusić program ręcznie (za M.Wichary, „25 lat za kratkami”). Nie wpłynęło to jednak na brak zainteresowania nowoczesną aplikacją. Arkusze kalkulacyjne, pomimo początkowych problemów ze sprzedażą, były najczęściej kupowanymi aplikacjami w pierwszej połowie lat 80. XX wieku. Początkowo korzystali z nich tylko analitycy, niewiele później jednak arkusze zaczęły trafiać do księgowych, kierowników i użytkowników prywatnych. Popularność aplikacji Bricklina i Frankstona przyciągnęła innych developerów i na rynku pojawiło się mnóstwo konkurencyjnych produktów (po kilku latach można było wybierać w ponad sześćdziesięciu aplikacjach, choć większość z nich niczym się nie wykazywała).

Poziom technologiczny ówczesnych komputerów znacznie utrudniał życie programistom. Pamięć mierzona w kilobajtach nie pozwalała na opracowywanie dużych arkuszy, a tworzenie wykresów lub drukowanie wymagało wyjścia do systemu operacyjnego (DOS) i uruchomienia oddzielnej aplikacji. Dodatkowo niewiele komputerów było wyposażonych w kartę graficzną, więc część arkuszy pozwalała na tworzenie wykresów jedynie w trybie tekstowym (za pomocą semigrafiki).

Zmiany, zmiany, zmiany…

Mówi się , że program Bricklina i Frankstona skłonił IBM do wejścia na rynek komputerów osobistych, a firma czekała z premierą IBM PC na odpowiednią wersję VisiCalca. Faktem jest, że program ten był reklamowany w materiałach firmy z Binghamton, jednak to nie ta aplikacja była najistotniejszą w pierwszej dekadzie po premierze tego komputera.

W 1983 roku firma Lotus wypuściła program od początku tworzony z myślą o komputerach PC – Lotus 1-2-3. Nazwa aplikacji miała sugerować, że oprócz typowego arkusza kalkulacyjnego oferuje wbudowane funkcje graficzne (pięć rodzajów wykresów), a także dostęp do baz danych.
Innowacji było jednak znacznie więcej – wprowadzono jeden z pierwszych w historii kontekstowych systemów pomocy, ulepszono charakterystyczne menu, dodano nazwy komórek oraz etykiety przełamujące szerokość kolumny, a także pełne wykorzystanie klawiszy funkcyjnych. Najważniejszą nowością był jednak system makrodefinicji, pozwalający na automatyzowanie często wykonywanych czynności. Język makr był tak rozbudowany, że pozwalał na tworzenie skomplikowanych, dedykowanych różnym zastosowaniom aplikacji, które były sprzedawane oddzielnie przez małe firmy. Również Lotus z czasem dodał do swojego programu system nakładek, dzięki którym wkrótce rynek wypełniły rozszerzenia w postaci baz danych, dodatków graficznych, programów sprawdzających, aplikacji optymalizujących arkusze kalkulacyjne, a nawet edytorów tekstu. Tak wyposażony Lotus 1-2-3 stał się dla wielu osób kompletnym środowiskiem pracy (za M.Wichary, „25 lat za kratkami”).

Upadek programu Lotusa i pojawienie się nowego giganta

W połowie lat osiemdziesiątych ubiegłego wieku najważniejszym punktem oceny jakiegokolwiek programu obsługującego arkusze kalkulacyjne była jego zgodność z aplikacją Lotusa. Firma sporo straciła w oczach użytkowników ze względu na cenę swojego produktu (Lotus 1-2-3 był relatywnie drogi), przestarzałość niektórych funkcji, a także dostępność kilku niekompatybilnych ze sobą wersji. Dało to miejsce dwóm innym gigantom i ich produktom: firmie Borland z aplikacją Quattro i firmie Microsoft z aplikacją Multiplan (która była mocno krytykowana przez użytkowników ze względu na brak wykresów, słaby system pomocy, słabą dokumentację i uciążliwe nazywanie komórek – zamiast A1 program wykorzystywał znaną niektórym nomenklaturę R1C1). Multiplan nie zagrzał na rynku miejsca zbyt długo – już w 1985 roku Bill Gates zaprezentował nowy arkusz kalkulacyjny, nazwany dumnie Excel. Pierwszą jego wersję wydano tylko na Macintoshe, co sprawiło, że wiele firm zmieniało maszyny ze względu na samą aplikację. Program oferował przy tym wiele opcji, dzisiaj uważanych za must-have, jednak w tamtym okresie mocno innowacyjnych, np. przeliczanie w tle, kolorowanie i zmianę fontów, proste nagrywanie makr oraz dziesiątki innych ulepszeń. Entuzjastyczne przyjęcie Excela przez rynek utwierdziło Microsoft w przekonaniu, że firma obrała słuszny kierunek i wkrótce Excel trafił na platformę Windows, a niedługo później rozpoczęto przenoszenie innych DOS-owych aplikacji. Niedługo potem pojawił się przełomowy Windows 3.0, a arkusz kalkulacyjny Microsoftu stał się najpopularniejszym programem tego typu. I pozostaje nim do dzisiaj.

Nieśmiertelny król

Przyznać trzeba, że Microsoft dba o rozwój arkusza kalkulacyjnego, jak mało który z konkurentów. Z każdą kolejną wersją (pojawiającą się mniej więcej co trzy lata) gigant z Redmond dodaje kolejne kilkanaście, a czasami nawet kilkaset nowych funkcji (przydatność niektórych to zupełnie odrębny temat), a także powiększa ilość danych, które można w nim przechowywać (obecnie 1 048 576 wierszy i 16 384 kolumny).

Rysunek 2. Menu z podpowiedziami nazw funkcji

Rysunek 3. Wyświetlony komentarz z podpowiedzią o składni danej funkcji

Funkcje w arkuszach kalkulacyjnych, o czym większość zapewne wie, mają ściśle określoną składnię, zapamiętanie której, razem z nazwą, przy takiej ich ilości jest prawie niemożliwe. Jednak Microsoft i ten aspekt postanowił dopieścić, udostępniając dwie podstawowe możliwości wprowadzania funkcji do komórek. Pierwszą z nich, najbardziej domyślną, jest wyświetlenie podpowiedzi podczas samego wprowadzania funkcji do komórki. Nie musimy nawet pamiętać pełnej nazwy interesującej nas funkcji – jeśli znamy tylko jej początek, Excel podpowie nam resztę, wyświetlając listę pasujących funkcji – użytkownikowi pozostaje jedynie wybrać odpowiednią za pomocą kursora myszy i dwukrotnie na niej kliknąć. Kiedy już odpowiadającą nam funkcję mamy wybraną, pojawi się komentarz informujący o argumentach, które należy funkcji przekazać, aby zadziałała poprawnie. Jak widać, przez cały czas arkusz firmy z Redmond prowadzi użytkownika za rękę, ułatwiając w ten sposób korzystanie z aplikacji.

No dobrze, ale co, jeśli nie pamiętamy nawet początku nazwy funkcji albo musimy wykorzystać jakąś, o której wiemy tylko, że istnieje? Excel również w tym wypadku został wyposażony w przewodnik step-by-step: okno o intuicyjnej nazwie „Wstawianie funkcji”. W tym małym aplecie znajdują się wszelkie dostępne formuły, podzielone na intuicyjne grupy, a dodatkowo po wskazaniu każdej z nich zostaje nam przedstawiony krótki opis danej formuły. W momencie wybrania funkcji uruchomiony zostanie kreator, umożliwiający wskazanie poszczególnych argumentów przy pomocy naszego ulubionego narzędzia wskazującego, a finalnie automatycznie wygenerowana formuła umieszczona zostanie we wskazanej komórce arkusza kalkulacyjnego.

Rysunek. 4 Okno „Wstawianie funkcji” z arkusza MS Excel

O ile korzystanie z pojedynczych funkcji nie powinno sprawić trudności w codziennym użytkowaniu, przed użytkownikiem może pojawić się wyzwanie w postaci, dla przykładu, zestawienia konkretnej wysyłki z kontrahentem. Dla utrudnienia wymagane dane znajdują się w dwóch odrębnych arkuszach kalkulacyjnych. Ha! Nic prostszego! Wszelkie formuły w arkuszach kalkulacyjnych można ze sobą łączyć poprzez zagnieżdżanie, przez co zestawienie formuł INDEKS i PODAJ.POZYCJĘ wykona to zadanie w ciągu zaledwie kilku do kilkunastu sekund (w zależności od ilości przetwarzanych danych).

Prawdziwa magia i kombajny robocze

Funkcji Excela jest o więcej, jak szeroko cenione tabele przestawne, sumy częściowe czy możliwość prezentacji danych w pulpitach menadżerskich – można poświęcić temu cały cykl tekstów, a i tak nie wszystkie możliwości tego potężnego narzędzia zostałyby opisane. Na przestrzeni lat arkusze kalkulacyjne zostały wyposażone w funkcjonalności, które uczyniły z nich istne kombajny do codziennej analitycznej pracy. Jednak nawet najlepsza firma nie jest w stanie przewidzieć wszystkich potrzeb każdego klienta. Mimo całego ogromu możliwości, jakie oferują programy do obsługi arkuszy kalkulacyjnych, w pewnej chwili może dojść do sytuacji, w której zabranie nam jednej małej funkcji albo niewielkiej automatyzacji, która wpłynie jednak mocno na ogólną wydajność całego działu. Oczywiście, można pokusić się wtedy o napisanie całego systemu, który zostanie po prostu zintegrowany z arkuszem kalkulacyjnym i zapewni nam brakujące funkcjonalności, jednak szybszą i na pewno tańszą metodą jest skorzystanie z kolejnego narzędzia, jakie oferują niektóre aplikacje.

Większość użytkowników Excela prędzej czy później spotkała się z terminem makr. Cóż to jednak za wynalazek, jakie ma znaczenie w pracy codziennej i jak w ogóle zacząć przygodę z makrami? Mówiąc najprościej: makra to wewnętrzne skrypty pakietu biurowego, które znacznie usprawniają, automatyzują pracę i minimalizują ryzyko wystąpienia błędu podczas pracy. Wyobraźmy sobie monotonną, codzienną sytuację: każdego ranka, zaraz po pierwszej kawie, przy naszym służbowym biurku mamy wysłać prezesowi raport efektywności poszczególnych sekcji firmy. Każdego dnia pobieramy pliki, które przechowują dane odnośnie pracy danego działu, później kopiujemy dane w nich zawarte do jednego pliku, obrabiamy dane, usuwając kolumny, które nas nie interesują, zmieniany typ danych z kolumny AX na dane liczbowe z trzema miejscami po przecinku, uruchamiamy filtry, sortujemy dane po kolumnie D, na końcu wpisujemy pierwszą formułę… Mnie od samego czytania głowa boli. Spójrzmy jednak na ten problem z innej perspektywy: zadanie mamy to samo, jednak zamiast kopiować wszystkie dane z plików składowych do głównego arkusza,  po prostu je pobieramy, otwieramy plik z naszym makrem, klikamy jeden przycisk i… spokojnie bierzemy trzy łyki kawy, czekając na gotowy raport. Później mamy jedynie go wysłać prezesowi, więc znowu klikamy jeden przycisk i raport ląduje w skrzynce mailowej szefa.

Cóż, mi osobiście ostatnie cztery linijki dużo bardziej odpowiadają. Tym właśnie są makra – prostymi skryptami, które wykonają za nas ogrom „brudnej” roboty, nie przeszkadzając nam w naprawdę istotnych zadaniach.

No dobrze, brzmi kusząco, ale skoro makra tak szybko i przyjemnie wykonują czasochłonne zadania, to również ich utworzenie musi być niezmiernie trudne. Otóż nic bardziej mylnego. Pomijam możliwość nagrywania makr (choć Excel sprawnie może rejestrować ruchy, jakie wykonamy w arkuszu kalkulacyjnym) – jest to metoda skrócona, jednak dużo mniej wydajna i często mniej czytelna. Zamiast tego dobrze jest się zapoznać ze zintegrowanym środowiskiem do pisania makr, jakie udostępnia nam Excel.

Rysunek 5. Okno zintegrowanego środowiska do pisania makr w Microsoft Excel

Okno „Microsoft Visual Basic for Applications” jest w miarę przyjaźnie zaprojektowane. Po lewej stronie u góry umieszczone jest drzewo projektu, czyli wszystkie arkusze, moduły, klasy i formularze, które znajdują się w naszym zeszycie arkusza kalkulacyjnego, po prawej zaś będzie wyświetlany kod każdej z dodanych przez nas sekcji. Aby rozpocząć pisanie makra, potrzeba jedynie utworzyć przynajmniej jeden moduł o dowolnej nazwie. W tym celu na białym polu, pod drzewkiem projektu, należy kliknąć prawym przyciskiem myszy, wybrać opcję „Insert” i „Module” (niestety, Microsoft oferuje środowisko kodowe jedynie w języku angielskim). Po wykonaniu tych operacji po prawej stronie od razu zostanie wyświetlony kod znajdujący się w naszym module (na tym etapie po prostu białe pole). Od tej chwili można rozpocząć pisanie aplikacji w języku VBA.

Visual Basic for Applications (VBA) to język skryptowy zaimplementowany w aplikacjach pakietu Office, choć nie tylko. Jest dość prosty, więc nie powinien stanowić problemu nawet dla laika. Jak każdy język programowania, rządzi się swoimi zasadami, których należy przestrzegać, aby makra mogły zostać poprawnie zinterpretowane przez program. Przede wszystkim należy pamiętać, że każde makro mieści się pomiędzy słowami kluczowymi rozpoczynającymi i kończącymi makro: Sub i End Sub. Wszystko, co znajduje się pomiędzy tymi słowami kluczowymi zostanie zinterpretowane i wykonane za każdym razem, gdy makro zostanie wywołane – zawsze w tej samej kolejności i w taki sam sposób.

Podobnie, jak w innych językach programowania, również w VBA istnieją zmienne, instrukcje warunkowe, pętle czy funkcje. Z tą różnicą, że – podobnie, jak w Pythonie – w VBA nie ma konieczności określania typu zmiennej, bo zrobi to za nas interpreter. Dzięki tej funkcjonalności nie musimy się martwić o poprawny typ zmiennej. Dodatkowo kod VBA jest czytelny i prosty w zrozumieniu. Do napisania prostego skryptu, który doda do siebie dwie liczby całkowite i wyświetli wynik w okienku komunikatu, wystarczy kilka prostych linijek kodu.

Rysunek 6. Kod przykładowego makra

Rysunek 7. Okienko komunikatu wywołane instrukcją MsgBox

Jak widać, kod VBA nie jest skomplikowany, a rezultat może być naprawdę niewiarygodny. Dodatkowym atutem jest fakt, że interpreter VBA prowadzi użytkownika w taki sam sposób, jak sam arkusz kalkulacyjny podczas wpisywania formuł – tutaj również zostaje wyświetlony dymek komentarza z argumentami, które należy przekazać do używanej funkcji, a nazwy funkcji są podpowiadane podczas wprowadzania. Dodatkową zaletą jest natomiast fakt, że wpisując (dla przykładu) funkcję MsgBox, wystarczy wpisać samo msg i wcisnąć jednocześnie klawisz spacji i ctrl – nazwa zostanie automatycznie uzupełniona.

Podsumowanie

Korzystanie z arkusza kalkulacyjnego może naprawdę mocno ułatwić życie. Powyższy przykład to jedynie namiastka możliwości tego potężnego narzędzia. Oczywiste jest, że im bardziej skomplikowane zadania ma wykonać nasze makro, tym bardziej skomplikowany będzie kod. Jak widać na poniższym listingu kodu, do wysyłki wiadomości trzeba dodać kilka linijek, które w pierwszej chwili wydają się nieco skomplikowane, ale w rzeczywistości są logiczne. Dochodzą tu, oczywiście, podstawy programowania obiektowego (deklaracja dwóch zmiennych „Poczta” i „Email” jako obiektów, a następnie wywołanie na nich odpowiednich metod: Set Poczta = CreateObject(„Outlook.Application”) to utworzenia nowego obiektu aplikacji Microsoft Outlook i Set Email = Poczta.CreateItem(0) do tworzenia nowej wiadomości e-mail w obiekcie aplikacji Outlook), jednak VBA stanowi dobrą i prostą bazę do zapoznania się z zasadami programowania, a przy okazji ułatwienia sobie życia podczas codziennej pracy.

Oczywiście VBA to nie jedyne narzędzie udostępnione przez Microsoft w arkuszu kalkulacyjnym. Dzięki temu narzędziu można z powodzeniem tworzyć zaawansowane pulpity menadżerskie, prowadzić symulacje finansowe czy importować i przekształcać dane z zewnątrz za pomocą PowerQuery, co mocno rozszerza i usprawnia pracę, dodając możliwość importu danych nawet z baz danych Oracle czy SQL Server.

Arkusz kalkulacyjnym jest niewątpliwie wyjątkowym narzędziem, którego tajniki warto odkrywać i zaznajamiać się z jego możliwościami. Z pewnością skorzystają na tym wszyscy użytkownicy, a ogrom możliwości, połączony z prostotą użytkowania, pozytywnie wpłynie nie tylko na efektywność, ale ocenę pracy.