Jacek URYGA TYPY WARTOCI I FORMAT DANYCH W ARKUSZU KALKULACYJNYM MS EXCEL Streszczenie Jedn z najczstszych czynnoci wykonywanych przez uytkowników Excela jest wprowadzanie danych i formuł do komórek arkusza. Programici Excela implementujcy algorytmy przetwarzania danych w jzyku Visual Basic for Applications (VBA) posługuj si kodem, który take wprowadza wartoci i formuły do komórek arkusza oraz odczytuje wprowadzone lub obliczone wartoci. Niniejszy artykuł jest prób uporzdkowania wiedzy o sposobach, w jaki Excel interpretuje dane znajdujce si w komórkach z punktu widzenia uytkownika i programisty VBA. Firma Microsoft, producent oprogramowania Excel, niestety nie udokumentowała w pełni opisywanych tu cech rodowiska tej aplikacji. Słowa kluczowe: typy danych Excela, format liczbowy w Excelu, programowanie w jzyku VBA w Excelu Wstp Uytkownicy arkusza kalkulacyjnego Excel, zarówno ci, którzy rcznie wprowadzaj dane do arkuszy, jak i programici piszcy kod wprowadzajcy dane w sposób automatyczny, czsto zmagaj si z problemem nieoczekiwanej zmiany formatu danych komórki lub ostrzeeniami, e dane te nie pasuj do obowizujcego w komórce formatu. Wyjanienie działania tego mechanizmu opiera si na pojciu typów wartoci i typów zapisu w Excelu. 1. Komórki arkusza Dokumenty tworzone w Excelu, zwane skoroszytami, składaj si z arkuszy, które z kolei podzielone s na komórki. Komórki słu do przechowywania wartoci i formuł. Jeli komórka przechowuje formuł, arkusz wywietla warto obliczon przez t formuł. Przechowywana lub obliczona w komórce warto moe by jednego z nastpujcych czterech typów wartoci: Dr in. Jacek Uryga, adiunkt w Wyszej Szkole Finansów i Prawa w Bielsku-Białej. 35
tekst, czyli dowolny cig znaków; liczba, tj. warto reprezentujca liczb całkowit lub niecałkowit, a take dat i czas; warto logiczna, czyli prawda lub fałsz; warto błdu, tj. specjalna warto reprezentujca błdn warto, np. wynik dzielenia przez 0. Formuła jest przechowywana jako cig znaków okrelajcych poprawny składniowo wzór. Excel pozwala równie na ustawienie opcji, czy wartoci formuł maj by wyliczane automatycznie, tj. po kadej aktualizacji arkusza, czy rcznie, tzn. po zainicjowaniu przez uytkownika (np. za pomoc skrótu klawiszowego F9). 2. Format danych komórki Sposób wywietlania tekstu i liczb w komórkach zaley od okrelonego dla komórki formatu danych. Natomiast wartoci logiczne i wartoci błdów wywietlane s niezalenie od formatu danych. Wartoci logiczne s prezentowane jako napisy PRAWDA lub FAŁSZ, a wartoci błdów jako napisy postaci #DZIEL/0!, #ADR! itp. Format danych komórki moemy okreli za pomoc narzdzia Formatowanie komórek. Mona je uruchomi np. z menu kontekstowego po klikniciu prawym klawiszem myszy w wybran komórk, a nastpnie wybraniu zakładki Liczby tego narzdzia. Formaty wbudowane i formaty uytkownika Excel zawiera pewn liczb wbudowanych formatów, ale umoliwia równie uytkownikowi definiowanie formatów własnych. Wszystkie formaty wbudowane i formaty zdefiniowane przez uytkownika znajduj si w kategorii Niestandardowe wspomnianego narzdzia. Formatów wbudowanych w przeciwiestwie do formatów uytkownika nie mona usun (przycisk Usu jest nieaktywny). Podstawowym sposobem definiowania formatu jest modyfikacja kodu formatuj cego dowolnego sporód formatów danych wystpujcych w kategorii Niestandardowe. Nowy kod formatujcy zostanie dopisany do listy istniejcych formatów w tej kategorii. Wszystkie formaty danych moemy podzieli na cztery grupy: format ogólny, formaty tekstowe, formaty liczbowe i formaty liczbowo-tekstowe. Domylnie kada komórka w nowym dokumencie lub nowym arkuszu ma format ogólny. 36
Format ogólny Jeeli komórka ma format ogólny, to wartoci tekstowe wywietlane s jako cig znaków tworzcych t warto, a liczby wywietlane s w zapisie dziesitnym lub naukowym (tj. wykładniczym). W formacie ogólnym liczby w zapisie dziesitnym wywietlane s z dokładnoci do 10 cyfr. Jeeli dokładno ta jest niewystarczajca, to Excel wywietla zaokrglone wartoci lub wybiera zapis naukowy w zalenoci od tego, który sposób jest dokładniejszy. Na przykład, warto 0,0001234567 zostanie wywietlona jako zaokrglenie 0,000123457, natomiast warto 0,0000123456 zostanie wywietlona jako 1,23456E-05, a nie jako zaokrglenie 0,000012346. Formaty tekstowe Formaty tekstowe okrelaj sposób wywietlania wartoci tekstowych; liczby wywietlane s zgodnie z zasadami opisanymi dla formatu ogólnego. W tym wypadku format danych okrela, czy wartoci tekstowe maj by wywietlane samodzielnie czy jako cz napisu (w kontekcie). Na przykład warto tekstowa tak mogłaby si wywietla w komórce jako: Przesyłka odebrana: tak. Formaty liczbowe Formaty liczbowe okrelaj sposób wywietlania wartoci liczbowych; mog by one wywietlane w postaci dziesitnej z okrelon dokładnoci, naukowej (tj. wykładniczej) z ustalon licz pozycji znaczcych, procentowej, ułamkowej lub daty i czasu. Wartoci tekstowe wywietlane s jak w formacie ogólnym. Formaty liczbowo-tekstowe pozwalaj okreli sposób wywietlania danych niezalenie dla wartoci liczbowych i dla wartoci tekstowych. Wicej informacji (nie s jednak kompletne) znajduje si w artykule na stronach serwisu Microsoft Office w artykule [2]. 3. Wprowadzanie danych do komórek Format danych ma wpływ nie tylko na sposób wywietlania wartoci, ale take na to jak interpretowany jest zapis wprowadzany do komórki. Typy zapisów wyróniane przez Excel przedstawia tabela 1. Zapis liczb zaley oczywicie od ustawie w danym systemie operacyjnym odnoszcych si do jzyka, formatu liczb, dat i symbolu waluty. Podane przykłady odnosz si do ustawie dla jzyka polskiego. 37
Warto wszake odnotowa, e Excel umoliwia stosowanie własnego separatora dziesitnego i separatora tysicy. W tym celu naley wyłczy opcj Uyj separatorów systemowych i okreli znaki poszczególnych separatorów. Tabela 1. Typy zapisów w Excelu Typ zapisu Przykłady Liczba w zapisie dziesitnym 7012, 24,014, -0,51,,141 Liczba w zapisie naukowym 2e52, -4,12E2, 47,1e+4 Liczba w zapisie procentowym 43%, 2,6%, -,87% Liczba w zapisie ułamkowym 4/5, 12 3/7 Liczba w zapisie walutowym 45 zł, 2,35 zł, -8,0 zł Data 2011-07-13, 11-07-13, 4/5, 13-5 Czas 15:21, 3:2:16, 15:1 Data i czas 12-09-17 13:06:01, 5-13 4:07 Warto logiczna PRAWDA, Fałsz Warto błdu #dziel/0!, #ARG! Tekst Ala ma kota, =2+3*5, 4/5, 102,43 Formuła =2+3*5, =POTGA(2;3) ródło: opracowanie własne Zauwamy, e niektóre zapisy nie s interpretowane jednoznacznie. Np. zapis postaci 5/7 moe by zinterpretowany jako ułamek lub data zalenie of formatu danych komórki. Natomiast kady z zapisów 5-7, 7-5, 5/7 i 7/5 interpretowany jest jako dzie 7 maja biecego roku. Na schemacie (rysunek 1) przedstawiony jest algorytm, zgodnie z którym Excel interpretuje dane zapisy w komórce. 38
Rysunek 1. Algorytm interpretowania zapisów w komórkach Czy wpis rozpoczyna si od apostrofu dane jako tekst (apostrof nie jest czci tekstu) Czy komórka ma format tekstowy dane jako tekst Czy wpis jest formuł dane jako formuł Czy wpis jest wartoci logiczn? dane jako warto logiczn Czy wpis jest liczb dane jako liczb dane jako tekst 39
Z algorytmu tego wynika, e wprowadzany do komórki cig znaków zostanie zapisany jako warto tekstowa w jednym z trzech przypadków: gdy cig znaków rozpoczyna si apostrofem. Znak apostrofu nie wchodzi przy tym w skład tekstu, ale jest wywietlany w pasku formuły; komórka ma format tekstowy; wprowadzony cig znaków nie zostanie rozpoznany jako formuła, warto logiczna, warto błdu lub liczba. Naley przy tym zwróci uwag, e jeeli Excel zapamituje zapis liczbowy jako warto tekstow, to zgłaszany jest błd (widoczny w postaci małej ikonki obok komórki). 4. Dostosowywanie formatu danych Specyficzn cech Excela to, e przy wprowadzaniu do komórek liczb lub formuł moe zmieni si format danych tych komórek. Zachowanie takie jest zwykle nieoczekiwane przez uytkownika i przez to moe by dla niego kłopotliwe w czasie pracy z arkuszem. Wystpuj take pewne drobne rónice w działaniu tego mechanizmu przy wprowadzaniu danych interaktywnie i za pomoc kodu VBA. Jeli wprowadzana warto liczbowa zapisana jest dziesitnie, to Excel zapamituje j i wywietla zgodnie z aktualnym formatem komórki. Podobnie Excel postpuje w przypadku, gdy format komórki jest formatem zdefiniowanym przez uytkownika. Wówczas niezalenie od zapisu liczby jest ona wywietlana zgodnie z tym formatem. Interpretacja zapisów niejednoznacznych takich jak 5/7 zaley w tych przypadkach równie od aktualnego formatu danych. Jeli wyraa on dat lub czas, to zapis ten interpretowany jest jak data; w przeciwnym wypadku Excel traktuje go jak ułamek. Jeli natomiast format danych komórki jest formatem wbudowanym, a zapis liczby nie jest zgodny z tym formatem i nie jest zapisem dziesitnym, to Excel ustala dla tej komórki inny format wbudowany taki, który odpowiada zapisowi wprowadzanej liczby. W tabeli 2 przedstawiamy list formatów wbudowanych, które Excel moe ustali przy wprowadzaniu liczb do komórek. Przy wprowadzaniu niektórych formuł Excel moe równie zmieni format danych komórki. O zmianie formatu nie decyduje jednak typ zapisu liczby wartoci liczbowe zwracane przez formuły nie cechuj 40
si bowiem jakim szczególnym typem zapisu lecz format danych komórek bdcych argumentami wywołania tych formuł. Tabela 2. Formaty wbudowane wykorzystywane przy dostosowywaniu formatu danych komórki Format liczbowy Kod formatuj cy Przykład zapisu powoduj cego zmian formatu Naukowy 0.00E+00 2e3 Procentowy 0% 0.00% 7% 2,5% Walutowy $#,##0_);[Red]($#,##0) $#,##0.00_);[Red]($#,##0.00) 3 zł 3,5 zł Daty m/d/yyyy d-mmm 2012-03-21 12-6 Czasu h:mm h:mm:ss 15:4 2:3:45 Daty i czasu m/d/yyyy h:mm 3/4 23:5:03 Ułamkowy #?/? 3 5/7 ródło: opracowanie własne Na przykład, jeeli komórka A1 ma format walutowy, a komórka A2 format ogólny, to wprowadzajc do trzeciej komórki formuł =A1+A2 Excel zmieni format tej komórki na walutowy. Na zakoczenie wspomnijmy jeszcze o opcji Rozszerz formaty i formuły zakresu danych. Opcja ta domylnie jest włczona i powoduje, e jeeli trzy sporód piciu komórek w kolumnie lub w wierszu bd miały taki sam format, to przy wprowadzaniu wartoci do szóstej z kolei komórki jej format danych zostanie ustalony na taki jak wspomnianych trzech. 5. Wprowadzanie i odczytywanie wartoci komórek w jzyku VBA W rodowisku programowania VBA w Excelu komórki s obiektami klasy Range. Obiekty tego typu posiadaj kilka właciwoci zwizanych z wprowadzaniem, formatowaniem i odczytywaniem wartoci. Format danych mona okreli za pomoc właciwoci NumberFormatLocal przypisujc jej łacuch formatujcy tego samego typu, jaki wpisywany jest za pomoc wspomnianego wczeniej narzdzia Formatowanie 41
komórek. Istnieje równie odpowiednik tej właciwoci zwany NumberFormat, która jest niezalena od biecych ustawie jzykowych i pozostaje zgodna z ustawieniami jzykowymi obowizujcymi dla jzyka angielskiego. Format ogólny mona okrela dwojako za pomoc łacucha General lub łacucha pustego. Na przykład ActiveCell.NumberFormatLocal = General ActiveCell.NumberFormatLocal = Wartoci i formuły znajdujce si w komórce mona odczyta za pomoc czterech właciwoci: Text, Value, Value2 i FormulaLocal (ostatnia właciwo równie wystpuje w odmianach pod nazwami: Formula, FormulaR1C1 i FormulaR1C1Local.) Właciwo Text jest typu String, a wic zwraca warto znajdujc si w komórce jako łacuch znaków. Jeeli w komórce jest formuła, właciwo ta zwraca warto obliczon przez formuł. Właciwo ta jest tylko do odczytu nie da si za jej pomoc wpisywa do komórek wartoci. Właciwoci Value i Value2 pozwalaj zarówno na odczyt jak i zapis komórek. W przypadku odczytu zwracaj one warto znajdujc si w komórce lub obliczon przez formuł, przy czym typ zwracanej wartoci odpowiada typowi wartoci odczytanej z komórki i formatowi danych tej komórki. Mówic dokładniej: właciwo Value zwraca wartoci tekstowe jako String, wartoci logiczne jako Boolean, a wartoci liczbowe jako Double, Date lub Currency w zalenoci od formatu danych. Zwrómy uwag, e zwracana warto nigdy nie jest typu całkowitego. Wartoci błdów nie s zwracane; próba odczytania takiej wartoci z komórki koczy si błdem wykonania nr 13. Właciwo Value2 działa analogicznie z tym, e wartoci liczbowe zwracane s niezalenie od formatu jako Double i w zwizku z tym nie s wywietlane ani jako daty, ani jako kwoty pienine. Zapis do komórek odbywa si nieco inaczej. W przypadku właciwoci Value wartoci typu String zapisywane s jako wartoci tekstowe, wartoci typu Boolean zapisywane s jako wartoci logiczne, a wartoci typu Byte, Integer, Long, Single, Double, Date, Currency jako wartoci liczbowe, z tym, e w przypadku wartoci typu Date i Currency nastpuje odpowiednia zmiana formatu danych. 42
Zapis do komórki za pomoc właciwoci Value2 odbywa si podobnie z t rónic, e w przypadku wartoci liczbowych nie nastpuje zmiana formatu. Właciwo FormulaLocal (i jej odmiany) równie pozwala na odczyt i zapis komórek. Jej działanie jest jednak do specyficzne. Jeli w komórce przechowywana jest warto, właciwo ta zwraca j tak samo jak właciwo Value2, jeli natomiast w komórce znajduje si formuła, zwracany jest odpowiedni cig znaków (rozpoczynajcy si od znaku =), a ewentualne nazwy funkcji Excela wywietlane s w lokalnej lub angielskiej wersji jzykowej zalenie od uytej odmiany właciwoci FormulaLocal. Przy zapisywaniu do komórki przy pomocy tej właciwoci wartoci typu String traktowane s tak, jakby były wpisywane interaktywnie przez uytkownika; mog to by zapisy wartoci jak i formuł. Wartoci innych typów traktowane s tak jak w przypadku właciwoci Value. 6. Kontrola błdów Excel posiada szereg opcji włczajcych kontrol błdów przy wprowadzaniu wartoci i formuł. Mona je włczy lub wyłczy za pomoc Opcji programu Excel, a take z poziomu jzyka VBA za pomoc obiektu Application.ErrorCheckingOption. W szczególnoci instrukcja Application.ErrorCheckingOptions.NumberAsText = False wyłcza sygnalizacj błdów, gdy w komórce o formacie tekstowym znajduje si zapis liczby lub, gdy liczba poprzedzona jest apostrofem. Natomiast instrukcja Application.ErrorCheckingOptions.InconsistentFormula = False wyłcza sprawdzanie poprawnoci formuł. Zastosowanie własnego separatora dziesitnego i separatora tysicy wymaga wyłczenia opcji Uyj separatorów systemowych i okrelenia znaków poszczególnych separatorów. W jzyka VBA mona to zrobi za pomoc właciwoci UseSystemSeparators, DecimalSeparator, ThousendsSeparator obiektu Application. Odpowiedni materiał referencyjny mona znale na stronach serwisu MSDN pod adresem [3] lub w ksice [1]. 43
Podsumowanie Przedstawiona w artykule analiza sposobu formatowania danych pozwala na wycignicie praktycznych wniosków odnoszcych si do codziennej pracy z arkuszem Excel. Chcc na przykład zapobiec zmianie formatu przy wprowadzaniu danych naley albo zastosowa format komórek całkowicie zgodny z typem wprowadzeniem danych (pod wzgldem wartoci lub zapisu) lub uy formatu zdefiniowanego przez uytkownika (czyli takiego, który nie jest wbudowany). Warto równie zwróci uwag na fakt, i w kolejnych poprawkach i wydaniach Excela niektóre opisane tu właciwoci mog si zmieni. Tak na przykład zapis 5/7 interpretowany jest od niedawnej poprawki jako 7 maja, a 7/5 jako 5 lipca, co niewtpliwie jest korzystn zmian. Literatura [1]. Green J., Bullen S., Bovey R., Alexander M. Excel 2007 VBA. Programmers Reference, Wiley Publishing Inc, 2007, Indianopolis. [2]. Tworzenie lub usuwanie niestandardowego formatu liczb (http://office.microsoft.com/pl-pl/excel-help/tworzenie-lub- usuwanie-niestandardowego-formatu-liczb- HP001216503.aspx#BM1, ostatni dostp 21 marca 2012 r.) [3]. Welcome to the Excel 2007 Developer Reference (http://msdn.microsoft.com/en-us/library/bb242656 (v=office.12).aspx, ostatni dostp 21 marca 2012 r.) DATA TYPES AND DATA FORMAT IN SPREADSHEET PROGRAM MS EXCEL Summary Excel users often do enter data and formulas into the cells in their everyday work. Also Excel VBA developers often implement access to the the cells in data processing algorithms using VBA language. In this article we attempt to systemize the knowledge about how Excel interpret entered or computed values from the user and VBA developer point of view. Some of Excel environment features presented in this article are not well documented by Microsoft Key words: excel data types, Number format In Excel, Excel VBA Programming 44