1 Co to jest formuła tablicowa? Formuły tablicowe (ang. CSE - formulas) zostały zaimplementowane w celu przyśpieszenia budowy obszernych arkuszy operujących na dużych tablicach. Formuły tablicowe (CSE), z punktu widzenia na rodzaj generowanych wyników, dzielimy na formuły wielokomórkowe i jednokomórkowe. Funkcje tablicowe wielokomórkowe zwracają wynik w formie tablicy (jedno bądź dwuwymiarowej), który jest umieszczany w zakresie komórek, natomiast formuły tablicowe jednokomórkowe zwracają jednoelementowy wynik. Argumenty funkcji tablicowych (CSE) są takie same co w przypadku zwykłych formuł, lecz w zależności od naszych oczekiwań od formuły tablicowej argumenty mogą być różnie wpisywane. Natomiast wspólną cechą formuł tablicowych jest to, że są one ujmowanie w nawiasy klamrowe {=...} oraz są zawsze zatwierdzane kombinacją klawiszy Ctrl-Shift-Enter - z tego powodu często są nazywane formułami CSE. Formuły tablicowe (CSE) mają jeszcze jedną bardzo przydatną cechę, która wynika z ich istoty. Mianowicie, z uwagi na fakt, że formułę wpisujemy tylko jeden raz, a obowiązuje ona w całym zakresie (tablicy), to arkusz kalkulacyjny Ms Excel uniemożliwia, blokuje zmianę, w tym usunięcie formuły z części, fragmentu zakresu. Operacje modyfikacji formuły bądź też jej usunięcia muszą dotyczyć całego zakresu tablicy, do której była wpisana ta formuła tablicowa, czyli przed dokonaniem zmian należy ponownie wybrać pełny zakres, w którym była zastosowana formuła tablicowa. Formuły tablicowe zastępują operacje kopiowania formuł źródłowych na cały zakres docelowy tych formuł źródłowych. Poza tym mają również mechanizmy iteracyjne, dzięki którym możliwe jest przetwarzanie wiersz po wierszu albo kolumna po kolumnie krokowo bez konieczności pisania procedur w VBA lub wprowadzania do arkusza komórek pomocniczych - przechowujących wyniki cząstkowe, pośrednie. Formuły tablicowe - przykład 1 - tablica liczb pseudolosowych Przygodę z formułami tablicowymi (CSE) rozpoczniemy od bardzo prostego przykładu. Otóż nasz problem polega na wygenerowaniu 300 liczb pseudolosowych, które mają być wpisane do komórek w zakresie A1:J30. Formuła generująca liczbę pseudolosową jest bardzo prosta: =los(). Oczywiście możemy wpisać tę formułę do komórki A1, następnie skopiować ją do schowka (np. Ctrl-c), wybrać zakres A1:J30 po czym wkleić formułę ze schowka (np. Ctrl-v). W rezultacie otrzymamy 300 liczb pseudolosowych, czyli rozwiążemy nasz problem, ale czy efektywnie? Arkusz będzie zawierał 300 identycznych formuł i po zapisaniu zeszytu na dysku będzie zajmował sporo miejsca, bo każda formuła musi być zapisana. Poza tym istnieje ryzyko polegające na tym, że użytkownik nadpisze którąś formułę stałą wartością liczbową i w takim przypadku w tej komórce już nie będzie losowana liczba pseudolosowa w chwili przeliczania całego arkusza. Aby prawidłowo utworzyć tablicę liczb pseudolosowych należy posłużyć się formułami tablicowymi, bo właśnie po to zostały stworzone. Zaznaczamy zakres A1:J30, wpisujemy formułę: =los() i zatwierdzamy ją kombinacją klawiszy Ctrl-Shift-Enter. Ms Excel wypełni cały wybrany zakres formułą postaci: {=los()}, tzn. dokładnie rzecz biorąc formuła jest
2 wpisana tylko raz, ale obowiązuje dla wszystkich komórek w wybranym zakresie. Można o tym przekonać się w bardzo prosty sposób, mianowicie wystarczy spróbować usunąć zawartość dowolnej komórki - Excel wyświetli stosowny komunikat informujący, że takiej operacji wykonać nie można na części tablicy. Formuły tablicowe - przykład 2 - stałe tablicowe Korzystając z arkusza kalkulacyjnego często posługujemy się stałymi, mogą to być zarówno liczby jak również i teksty. Są to te elementy, które nie są wynikiem działania formuł. Jak logika podpowiada, stałe również mogą tworzyć tablice jednowymiarowe (wektory pionowe, poziome) albo dwuwymiarowe (macierze). Aby utworzyć wektor poziomy, czyli poziomą jednowymiarową tablicę należy jej elementy rodzielić znakiem średnika, np.: ={"Miasto"; "Ulica"; "Nr domu"}. Nawiasy klamrowe służą do przekazania arkuszowi, że jest to tablica. Zaznaczamy zakres A1:C1, wpisujemy powyższą formułę i zatwierdzamy ją kombinacją klawiszy Ctrl-Shift-Enter. Excel wpisze poszczególne elementy stałej tablicy do kolejnych komórek. Jeśli do zakresu A2:C2 wpiszemy formułę: ={"Wrocław"; "Teatralna"; "53"}, do zakresu A3:C3 wpiszemy formułę: ={"Wrocław"; "Plac Solny"; "8"}, a do zakresu A4:C4 wpiszemy formułę: ={"Wrocław"; "Rynek"; "17"}, to uzyskamy tablicę adresów. Na tej tablicy możemy wykonywać operacje sortowania, możemy odwoływać się do poszczególnych komórek (elementów adresu) w innych formułach, lecz Excel nie pozwoli na usunięcie bądź edycję jednej komórki tablicy. Każdy adres, czyli wiersz tablicy adresów jest traktowany jako całość i jeśli zaistnieje potrzeba usunięcia bądź modyfikacji adresu, to należy zaznaczyć wszystkie trzy komórki w wierszu tablicy i dopiero wówczas można usunąć ten wiersz albo poddać go edycji. Jest to bardzo dobre zabezpieczenie utrzymania spójności danych w tablicy. Aby utworzyć wektor pionowy należy zastosować jako separator elementów takiego wektora znaku: "\" (ang. backslash). Dla przykładu, jeśli zaznaczymy zakres E2:E4, a następnie wpiszemy formułę: ={"Jan Kowalski"\ "Adam Nowak"\ "January Adamski"}.
3 Można oczywiście połączyć obie metody wpisywania i w ten sposób wprowadzimy macierz. Zaznacz zakres G2:H4 i wprowadź następującą formułę tablicową: ={"Jan"; "Kowalski"\ "Adam"; "Nowak"\ "January"; "Adamski"}. Kolejny przykład ilustruje wprowadzenie macierzy liczbowej. Zaznacz zakres J1:L3 i wpisz następującą formułę tablicową: ={1; 2; 3\ 4; 5; 6\ 7; 8; 9}. UWAGA: Arkusz kalkulacyjny Ms Excel 2010 ma błąd polegający na błędnym interpretowaniu znaków separatorów wierszowych i kolumnownych stałych tablicowych. Błąd powstał w wyniku polonizacji arkusza kalkulacyjnego. W wersji anglojęzycznej znakiem separatora kolumnowego jest "," (przecinek) a znakiem separatora wierszowego ";" (średnik), podczas gdy w wersji polskojęzycznej separtorem kolumnowym powinien być ";" (średnik), a separatorem wierszowym "\" (backslash). W trakcie tworzenia polskiej lokalizacji Excela wyłącznie zamieniono znak separatora kolumnowego z "," (przecinka) na "\" (backslash) - powodując dokładnie odwrotne znaczenie separatorów w stosunku do poprzednich wersji Excela i co gorsza - dokumentacji. Zgłosiłem błąd do Microsoft'u, dostał numer: 1138917260 oraz otrzymał klasę: Istotność C (minimalny wpływ na firmę) co oznacza w praktyce usunięcie błędu dopiero w najbliższym Service Packu. Formuły tablicowe - przykład 3 - działania w formułach tablicowych Formuły tablicowe oczywiście umożliwiają również przeprowadzanie obliczeń, czy ogólnie rzecz ujmując działań. Dla przykładu posłużymy się operacją mnożenia. Poniższe przykłady wykażą, że ta sama formuła będzie generowała różne wyniki w zależności od położenia komórki w tablicy. Występuje tutaj zjawisko nieco podobne do trybów adresowania (względny, mieszany, bezwzględny), ale mechanizm i zasada działania są zupełnie odmienne. Do obliczeń użyjemy dwóch wektorów ([1, 2, 3] i [4, 5, 6]). Wykonamy operację mnożenia obu wektorów, ale w rozumieniu formuł tablicowych a nie w rozumieniu algebry liniowej. Wykonamy cztery mnożenia zmieniając postać wektorów (pion/poziom). Ilustracja operacji mnożenia dwóch tablic jednowymiarowych (wektorów):
4 Omówię jeden przypadek, znajdujący się w zakresie E2:G4, w którym znajduje się formuła tablicowa postaci: {={1\2\3}*{4;5;6}}. Oznacza to, że pierwszy wektor jest pionowy a drugi poziomy. Excel wyznaczając poszczególne wartości komórek znajdujących się w zakresie tablicy (wybranego zakresu) określa położenie każdej komórki względem początkowej komórki zakresu, znajdującej się w lewym-górnym rogu zakresu tablicy. Komórka E2 znajduje się w pierwszym wierszu i pierwszej kolumnie zakresu funkcji tablicowej. Zatem, aby wyznaczyć jej wartość należy wziąć element z pierwszego wiersza wektora pionowego (1) i element z pierwszej kolumny wektora poziomego (4), a następnie wymnożyć te wartości: 1 * 4 = 4. Komórka E3 znajduje się w drugim wierszu i pierwszej kolumnie zakresu funkcji tablicowej. Zatem, aby wyznaczyć jej wartość należy wziąć element z drugiego wiersza wektora pionowego (2) i element z pierszej kolumny wektora poziomego (4), a następnie wymnożyć te wartości: 2 * 4 = 8. Komórka F4 znajduje się w trzecim wierszu i drugiej kolumnie zakresu funkcji tablicowej. Zatem, aby wyznaczyć jej wartość należy wziąć element z trzeciego wiersza wektora pionowego (3) i element z drugiej kolumny wektora poziomego (5), a następnie wymnożyć te wartości: 3 * 5 = 15. Stosując tę zasadę można w łatwy sposób wyznaczyć zawartość pozostałych komórek dla wszystkich przykładów. Formuły tablicowe - przykład 4 - tabliczka mnożenia Prostym, praktycznym przykładem zastosowania formuł tablicowych jest wygenerowanie tabliczki mnożenia. Ze swej istoty tabliczka mnożenia jest prostokątną tabelą zawierającą iloczyny wartości elementów znajdujących się z boczku i w główce tabeli. W naszym przykładzie utworzymy klasyczną tabliczkę mnożenia do "100", czyli 10 x 10. Jeśli w zakresach A4:A13 oraz B3:K3 wpiszemy kolejne liczby naturalne od 1 do 10, to wartości iloczynów powinny znaleźć się w zakresie B4:K13. Tworząc tabliczkę mnożenia z wykorzystaniem formuł klasycznych należy wpisać formułę do komórki B4: =$A4*B$3, a następnie przekopiować na pozostałe 99 komórek. Skutek jest taki, że arkusz będzie zawierał 100 formuł wykorzystujących adresowanie mieszane (kolumnowe i wierszowe). Jest to podejście dalece nieefektywne i nieprofesjonalne.
5 Prawidłowym sposobem utworzenia tabliczki mnożenia jest wykorzystanie tylko jednej formuły tablicowej. W tym celu należy zaznaczyć cały obszar tabliczki mnożenia, czyli obszar, w którym mają pojawić się iloczyny i wpisać jedną formułę tablicową: =A4:A13*B3:K3, a następnie zatwierdzić ją wciskając jednocześnie Control, Shift i Enter. Po zatwierdzeniu we wszystkich komórkach wybranego zakresu pojawi się wpis: {=A4:A13*B3:K3}. Dzięki temu będziemy mieli jedną formułę obowiązującą w całym zakresie, czyli w stu komórkach. Arkusz kalkulacyjny Ms Excel wyznaczając wartości poszczególnych komórek tablicy będzie określał ich indeksy (offsety) pionowe i poziome. Dzięki temu będzie pobierał odpowiednie elementy z wektora pionowego wpisanego do zakresu A4:A13 oraz poziomego B3:K3 po czym wyznaczał wartość ich iloczynu. Ponieważ wartości w boczku i główce tabliczki mnożenia są wyrażeniami stałymi, to wykorzystując formuły tablicowe możemy zawrzeć je w ciele formuły, bez konieczności wpisywania do komórek arkusza. W tym celu należy zaznaczyć obszar 10 x 10 komórek, w naszym przykładzie M4:V13, i wpisać dwu-argumentową formułę tablicową ={1;2;3;4;5;6;7;8;9;10}*{1\2\3\4\5\6\7\8\9\10}. Pierwszym argumentem jest wektor poziomy, drugim wektor pionowy. Arkusz kalkulacyjny Ms Excel wyznaczając po kolei wartości wszystkich 100 komórek będzie określał ich indeksy (offsety) i pobierał odpowiednie elementy, aby wyliczyć ich iloczyn. W tym rozwiązaniu boczek i główka tabliczki mnożenia są również wyznaczane poprzez formułę tablicową.
6 Formuły tablicowe - przykład 5 - złożona formuła tablicowa Nadszedł czas na bardziej praktyczny przykład. Załóżmy, że mamy tabelę podsumowującą sprzedaż zrealizowaną w 12-tu miesiącach (w wierszach) w rozbiciu na stawki podatku VAT (kolumny). Mamy wyznaczyć wartość podatku VAT za cały rok. Jest to typowy problem, który powinien być rozwiązany za pomocą jednokomórkowej formuły tablicowej, ponieważ należy wykonać wiele mnożeń, sumowań i zaokrągleń. Formuła powinna wyglądać następująco: =SUMA(ZAOKR(B3:D14*B2:D2;2)). Jak widać jest to prawie zwykła formuła, tak na prawdę różni się od zwykłej formuły dwoma elementami: sposobem podania argumentów oraz zatwierdzeniem kombinacją klawiszy Ctrl- Shift-Enter. Kwoty netto sprzedaży znajdują się w zakresie B3:D14, należy je odpowiednio przemnożyć przez stawki podatku VAT, które znajdują się w nagłówku tabeli w zakresie B2:D2. Ponieważ wpisujemy formułę do jednej komórki i nie będziemy jej kopiować do innych komórek to nie musimy się zastanawiać na trybem adresowania - wykorzystamy najprostszy, czyli tryb względny.
7 Analizując zakresy tablic Excel określi ile mnożeń ma wykonać jako 12 wierszy x 3 kolumny, czyli musi wyliczyć 36 iloczynów. Następnie każdy iloczyn zaokrągli i doda w pamięci (bez angażowania komórki) do łącznej sumy. Po wykonaniu wszystkich mnożeń końcową sumę wpisze do komórki, w której znajduje się ta formuła tablicowa. Formuła tablicowa jest bardzo prosta i nie wymaga wykorzystania komórek pomocniczych ani bardzo długich formuł, poza tym zapewnia poprawność wyniku i spójność wyliczeń dla wszystkich miesięcy. W przypadku rozwiązania klasycznego, z formułami w pomocniczych komórkach autor arkusza musi zadbać o właściwy tryb adresowania tak, aby podczas kopiowania formuły do pozostałych komórek pomocniczych wykonywały poprawne obliczenia. Formuły tablicowe - przykład 6 - NPV - Net Present Value Formuły tablicowe pokazują swoje zalety w bardzo spektakularny sposób w przypadku wyliczania różnego rodzaju wskaźników ekonomicznych, których formuły operują na większych zakresach komórek, wykonują operacje sumowania pośredniego, potęgowania itp. Dobrą ilustracją tej grupy obliczeń analitycznych z obszaru kontrolingu (ang. controlling) jest wyznaczanie wartości bieżącej netto inwestycji czy ogólniej projektu. Ogólny wzór na wyznaczenie wartości bieżącej netto - NPV: NPV - Net Present Value - wartość bieżąca netto CF - Cash Flow - przepływy pieniężne okresu "t", CF = Przychody - Koszty I - Investments - wartość inwestycji początkowej
8 r - stopa dyskontowa, czasami oznaczana jako "d" n - ilość okresów, w jakich rozpatrujemy inwestycję Pomimo względnie skomplikowanego wzoru na określenie NPV, zawierającego sumowanie po okresach ilorazu stosując formuły tablicowe można wyznaczyć wartość za pomocą tylko jednej, nieskomplikowanej formuły bez konieczności stosowania kolumn pomocniczych. Kolumna "A" zawiera numery okresów, dla których rozpatrujemy inwestycję, kolumna "B" zwiera informację o spodziewanych przychodach z inwestycji, kolumna "C" zawiera planowane koszty związane z tą inwestycją w poszczególnych okresach. W kolumnie "F" mamy informacje o założonej stopie dyskontowej i wartości początkowej inwestycji, czyli wydatku inicjującym projekt poza kosztami w kolejnych okresach. Formuła tablicowa wyznaczająca wartość bieżącą netto - NPV jest następująca: {=SUMA(ZAOKR((B9:B13-C9:C13)*(1/(1+F8)^A9:A13);2))-F9} W zakresie B9:B13 znajdują się spodziewane przychody z inwestycji, a w zakresie C9:C13 mamy wpisane kwoty kosztów związanych z tą inwestycją (projektem) w odpowiednich okresach. Zatem formuła tablicowa {=B9:B13-C9:C13} wyliczy wartości przepływów pieniężnych CF dla wszystkich okresów. Jednak ta formuła musiała by być wpisana do wektora pionowego składającego się z pięciu elementów, ponieważ generuje wynik składający się z pięciu wartości. Z uwagi na fakt, że tych wyników użyjemy w dalszych obliczeniach tablicowych (jako liczniki ułamka), to nie musimy się tą wielowartościowością przejmować. W zakresie A9:A13 są wpisane numery okresów, zatem formuła tablicowa {=1/(1+F8)^A9:A13} wyliczy pięć współczynników dyskontujących. Nie musimy się przejmować wielowartościowością wyniku tej formuły, ponieważ użyjemy ich jako argumentu w dalszych obliczeniach tablicowych - jako mianownika ułamka. Na szczególną uwagę zasługuje fakt użycia trybu adresowania względnego komórki F8 zawierającej wartość stopy dyskontowej. Możemy skorzystać z tego trybu adresowania pomimo, że obliczenia będą wykonane dla pięciu wierszy (9..13) ponieważ wynik formuły tablicowej nie będzie kopiowany. Formuła tablicowa {=ZAOKR((B9:B13-C9:C13)*(1/(1+F8)^A9:A13);2)} zwróci wektor pięciu liczb będących wynikiem wyliczenia wartości ułamka (licznik/mianownik) dla poszczególnych okresów zaokrąglając je do dwóch cyfr po przecinku dziesiętnym, czyli do pełnych groszy.
9 Uzupełniając powyższą formułę tablicową o funkcję agregującą uzyskamy jedną liczbę. Formuła tablicowa będzie miała postać: {=SUMA(ZAOKR((B9:B13- C9:C13)*(1/(1+F8)^A9:A13);2))}. Jeśli od wyliczonej wartości odejmiemy wartość inwestycji początkowej, której wartość znajduje się w komórce F9 to uzyskamy wycenę efektywności planowanej inwestycji (projektu) w aktualnej (bieżącej) wartości pieniądza. Ostateczna postać funkcji tablicowej wyznaczającej wartość NPV jest postaci: {=SUMA(ZAOKR((B9:B13- C9:C13)*(1/(1+F8)^A9:A13);2))-F9}. Alternatywą dla funkcji tablicowych jest wykorzystanie kolumn pomocniczych wyliczanych za pomocą formuł klasycznych. Takie podejście zaśmieca jednak arkusz wieloma zbędnymi liczbami i jest podejściem dalece nieprofesjonalnym. Przykładowa metoda wyznaczenia wartości NPV w oparciu o kolumny pomocnicze z formułami klasycznymi wygląda następująco: