Excel haladóknak

Bártfai Barnabás

BBS-INFO Kiadó, 2012.

© Bártfai Barnabás, 2012.

Minden jog fenntartva! A könyv vagy annak oldalainak másolása, sokszorosítása csak a szerző írásbeli hozzájárulásával történhet.

A betűtípus elnevezések, a Microsoft, a Windows, az Excel bejegyzett védjegyek.
A Microsoft Szoftver Információ telefonszáma: (06-1) 267-46-36

A könyv nagyobb mennyiségben megrendelhető a kiadónál:
BBS-INFO Kiadó, 1630 Bp. Pf. 21. Tel.: 407-17-07

A könyv megírásakor a szerző és a kiadó a lehető legnagyobb gondossággal járt el. Ennek ellenére, mint minden könyvben, ebben is előfordulhatnak hibák. Az ezen hibákból eredő esetleges károkért sem a szerző, sem a kiadó semmiféle felelősséggel nem tartozik, de a kiadó szívesen fogadja, ha ezen hibákra felhívják figyelmét.

Papírkönyv ISBN 978-963-9425-77-4
E-book ISBN 978-963-9425-92-7

Kiadja a BBS-INFO Kft.
1630 Budapest, Pf. 21.
Felelős kiadó: a BBS-INFO Kft. ügyvezetője

Bevezető

Jelen könyv az Excel azon képességeit ismerteti, amelyek használatára kevesebben vállalkoznak. Talán azért, mert nem is tudják, hogy létezik, vagy talán azért, mert nem vették a bátorságot, hogy kipróbálják, pedig egyáltalán nem olyan bonyolult, mint amilyennek tűnik. A könyv segítségével megismerhetjük ezeket a haladóbb ismereteket, megoldhatjuk például az adatok védelmét, a kontrollált adatbevitelt, az adatelemzéseket, az optimalizálást, stb. Megbarátkozhatunk a solverrel, a vezérlőkkel és bepillantást nyerhetünk a kimutatások készítésének lehetőségeibe is. Ettől kezdve tehát nem kell megijedni, ha egy nagy adathalmazból gyorsan kell használható információkat kibányászni, hiszen az eszközök a kezünkben lesznek.

Persze mindehhez szükséges, hogy a tisztelt olvasó már rendelkezzen az Excel program bizonyos ismeretével, azaz tudja azt használni, ismerje a formázási lehetőségeket, az alapvető függvényeket, stb. (Ha netán ezen ismeretek még hiányosak, úgy ajánljuk, hogy ismételje át ezeket, például a szerző Táblázatkezelés c. könyvének segítségével.)

A könyvben leírtak alapját az Excel 2007 és 2010 verziói adják, kezelést tekintve főként a 2010-es verziókban szükséges lépéseket írjuk le. Ez azonban nem jelenti azt, hogy a leírtak nem használhatók más korábbi verziókban, hiszen néhány helyen ejtünk is szót ezekről az eltérésekről is.

A könyv második felében részletesen ismertetjük a makrók használatának lehetőségeit is, így – bár ezen ismeretek már komolyabb tapasztalatot igényelnek – segítségével az Excelből olyan programot varázsolhatunk, amely a saját igényeinkhez a leginkább alkalmazkodik. Az Excel sokkal többet tud annál, mint amit első látásra mutat magából. Ha bekapcsolunk bizonyos rejtett eszköztárakat, szalagokat, használjuk az azon lévő funkciókat, netán belevágunk a táblázatunk Visual Basic kóddal történő kiegészítésébe, szinte csodákat tehetünk. A makrókkal foglalkozó fejezet részben a szerző Makróhasználat Excelben c. könyvével azonos, de itt egy kicsit máshova helyeztük a hangsúlyt, illetve a mintaprogramok egy része is eltérő. A makrókat használhatjuk feladatok automatizálására vagy nyomógombokhoz, eseményekhez való hozzárendelésére rendelésére, illetve egyedi alkalmazások készítésére is.

A lehetőségek kombinálásával, az adatérvényesítések, a védelmek, a táblázatok, a kimutatások, és a makrók együttes használatával pedig szinte nem is fog létezni lehetetlen feladat.

A könyvben lévő példák letölthetők a kiadó www.bbs.hu címen található weblapjáról a Letöltések menüpont alatt, így aki nem akar vesződni a begépeléssel, az ezt így megspórolhatja.

1. Adattípusok, függvények és másolások

1.1. Adattípusok kicsit másképp

Bár az Excel adattípusainak megfelelő használata már az alapszintű ismeretekhez is hozzátartozik, rejlenek még haladóbb lehetőségek az adattípusok alkalmazásában. Ez egyrészt az egyéni adattípusok használatával kialakított, számot és tetszőleges szöveget is tartalmazó cellák készítésében, másrészt pedig az idő és dátum típusú adatok kezelésében nyilvánul meg.

Azt tudjuk, hogy az Excel lényegében kétféle fő-típust különböztet meg, így a cellában vagy szöveg, vagy pedig szám áll. Ez utóbbi azonban rengeteg módon megjelenhet, melynek formái a tört, pénznem, százalék, dátum, stb. cellatípusok. A cella megjelenése és tartalma tehát néha nem azonos, az azokkal végezhető műveletek során pedig rapszodikus különbségeket lehet felfedezni.

Példának okáért, ha néhány cellába szövegként írunk számot (tehát aposztróf jellel kezdjük), úgy a megjelenésében a cellák az igazításukat leszámítva úgy néznek ki, mintha ott valóban szám volna, sőt még a matematikai alapműveleteket (összeadás, kivonás, szorzás, stb.) is elvégezhetjük rajtuk, ami helyes eredménye is vezet, ám ha valamilyen függvényt (pl. =szum(…) ) kívánunk alkalmazni, úgy az eredmény már nulla lesz.

További érdekesség a dátum típusú cellák használata. Azt tudjuk, hogy a két dátumot egymásból kivonva megkapjuk a köztük eltelt napok számát, illetve dátum cellához számot hozzáadva, illetve kivonva, adott nappal későbbi vagy korábbi dátumot kapunk. Az is ismert, hogy dátumokat 1900. 01. 01.-től több ezer évre előre tudunk használni, így az 1 jelenti az 1900. 01. 01.-t, a 2 a 1900. 01. 02.-t stb.

De akkor mit jelent a nulla? Meglepő módon 1900. 01. 00.-t, ami egy nem is létező dátum. Jogosan merülhet fel a kérdés, hogy ennek mi értelme van. Látszatra semmi, sőt inkább csak egy bug, de valójában arról van szó, hogy az Excel így tárolja az időt.

A 0 megfelel az éjfélnek, a 0,5 a délnek, a 0,25 a 6 órának, a 0,999 pedig a 23:59-nek. Természetesen a dátum és idő kombinálható, így az egész rész adja a dátumot, a tizedes rész pedig az adott napon belüli időpontot. (Arra azonban vigyázzunk, hogy az órákkal és pecekkel számolva csak viszonylag ritkán kapunk kerek tizedes számot.)

Ha tehát például munkaidő-nyilvántartást, vagy más olyan számolást kell végeznünk, ahol az idővel is dolgoznunk kell, úgy a dátum típussal, illetve annak tizedeseivel kell dolgoznunk.

Az Excel számos számformátumot kínál, érdemes ezeket végigbogarászni, de ha nem találunk megfelelőt, úgy magunk is kialakíthatunk tetszőleges Számformátumokat. Ehhez a számformátum kiválasztására szolgáló elem legördítésekor a listáról a További számformátumok… elemet, majd a megjelenő panelen a Kategóriáknál az Egyéni elemet válasszuk ki.

A legegyszerűbb módszer, ha kattintunk egy a tervezetthez hasonló formátumkódon, majd a Formátumkód felirat alatti négyzetbe kattintva átjavítjuk azt. Természetesen üres formátumkóddal, előröl kezdve magunk is beírhatjuk a kódokat.

A megjelenést meghatározó formátumkód maximum négy szakaszból állhat, a szakaszokat pontosvesszővel választhatjuk el egymástól. Az első szakasz a pozitív számok, a második a negatív számok, a harmadik a nulla értékek, a negyedik pedig a szövegek formátumát adja meg. Természetesen megadhatunk kevesebb szakaszt is. Például ha csak egy szakaszt adunk meg, valamennyi szám ezt a formátumot veszi fel, két szakasz megadásánál pedig az első a pozitív számok és a nulla, a második pedig a negatív számok formátumát írja le. Ha ki akarunk hagyni egy szakaszt, úgy helyére csak a pontosvesszőt kell írnunk.

A formátumkódba különböző kódkaraktereket kell írnunk. A # csak az értékes jegyeket jeleníti meg, a fölösleges nullákat nem. A 0 (nulla) nullákkal egészíti ki a számot, ha az kevesebb számjegyet tartalmaz, mint ahány 0 szerepel a formátumban. A ? a tizedesvessző mindkét oldalán az értéktelen nullák helyén szóközt jelenít meg. Ha a cellában számok mellett szöveget is meg szeretnénk jeleníteni, úgy a szöveget foglaljuk idézőjelek közé, vagy helyezzünk a karakter elé fordított ferde vonalat (\). Ez esetben ne felejtsük el a szóközt sem az idézőjel és a szöveg közé, különben az Excel azt egybeírja a számmal.

Ezres elválasztáshoz használjunk szóközt a #-ek közt (Pl. # ###)

Beállíthatjuk egy szakasz színét is, ekkor a szakasz elejére szögletes zárójelek között beírjuk a kívánt szín megnevezését.

Az értelmezéshez nézzünk néhány példát:

#;-#;"-";     Pozitív és negatív szám esetén megjeleníti az értéket, nulla esetén kihúzza a cellát.

#,00\ "Ft.";;;     Nulla és negatív szám esetén nem jelenít meg semmit, pozitív szám esetén Ft. végződéssel és két tizedessel megjeleníti az értéket.

#" db.";-#" db.";"-";    Pozitív és negatív szám esetén db. végződéssel megjeleníti az értéket, nulla esetén kihúzza a cellát.

[Kék]#;[Piros]-#;[Zöld]0     Pozitív szám esetén kék, negatív szám esetén piros, nulla esetén zöld színnel jeleníti meg a cella értékét.

#;#" Hiány"    Pozitív szám esetén megjeleníti az értéket, negatív szám esetén a Hiány szót írja a szám után.

#" hónap";"hiba";    Pozitív szám esetén hónap végződéssel megjeleníti az értéket, negatív szám esetén a cellába a hiba szó kerül, nulla esetén üresen hagyja a cellát.

Vigyázzunk a szóközökkel, a 0 és # után, az idézőjel elé ne tegyünk szóközt, mert hibás megjelenítést kapunk, az idézőjel után viszont célszerű, hogy ne írja egybe a mértékegységet a számmal az Excel.

Ha tehát a fenti ábrának megfelelő formázást szeretnénk, úgy álljunk az F7 cellára, a Kezdőlap szalag Szám mezőjénél gördítsük le a számformátum kiválasztására szolgáló elemet és válasszuk ki a listáról a További számformátumok… elemet. A megjelenő panelen a Kategóriáknál az Egyéni elemet válasszuk ki. A formátumkód alatti mezőbe gépeljük be a #" hónap" szöveget úgy, hogy szóközt csak a #" karakterek után teszünk, majd zárjuk a panelt az OK gombbal.

1.2. Listás adatfeltöltés

Gyors adatfeltöltésre számos lehetőség kínálkozik, melyek közül a legismertebb az, amikor a sorozat első, vagy első két elemét begépeljük, majd a cella jobb alsó sarkában lévő kis négyzetet húzzuk.

Gyors adatfeltöltéshez lehetőség van a Kezdőlap szalag Kitöltés gombját is használni. Ha azonos adatokkal történő feltöltést szeretnénk, úgy a kijelölt terület első adatával a Lefelé, Jobbra, Fel, Balra gombokat kell használnunk, sorozattal való kitöltésre pedig a Sorozatok pont szolgál.

Egyszerűbb megoldás, ha csak az első adatot gépeljük be, majd a Kezdőlap szalag Kitöltés gombjának Sorozatok pontjának választását követően a panelen a kitöltés irányának, típusának és lépésközének megadásán túl a végértéket is megadjuk. Ez esetben ugyanis nincs szükség arra, hogy kijelöljük a feltöltés helyét, hiszen az a végértéktől fog függeni.

1.3. Függvények

Jelen fejezetben az egyszerűbb függvényekkel már nem kívánunk foglalkozni, azt feltételezzük, hogy ismeri már a tisztelt olvasó. Néhány gyakrabban használt keresőfüggvényre, az adatbázis-függvényekre viszont nézünk pár példát.

Ismétlésképpen fussuk át a leggyakrabban használt függvényeket:

ABS(n)     az n szám abszolút értéke.

ÁTLAG(t)     a t területen elhelyezkedő adatok átlaga.

DARAB(t)    a t területen lévő számok darabszáma.

DARAB2(t)    a t területen elhelyezkedő nem üres cellák darabszáma.

DARABTELI(t;"felt")    a t területen lévő felt feltételnek eleget tevő cellák száma.

DARABÜRES(t)     a t területen lévő üres cellák darabszáma.

DEC2BI(n)    az n szám (0-255) kettes számrendszerbeli alakja.

FKERES(x;t;y)     megkeresi az x adatot tartalmazó cellát a t terület első oszlopában, s eredményül a t terület y-odik oszlopának azonos sorában lévő elemét adja.

GYÖK(n)     az n szám négyzetgyöke.

HA("felt";n1;n2)     amennyiben a felt feltétel igaz, úgy n1-et, ha hamis, úgy n2-t adja eredményül.

HAHIBA(n1;n2)     amennyiben az n1 kifejezés helyes, úgy azt adja vissza, ha hibás, úgy n2-t adja eredményül.

INDEX(t;y;x)     a t tömb y-odik sorának x-edik oszlopában lévő adatot adja.

INT(n)     az n szám   egészrészét veszi.

KEREKÍTÉS(n1;n2)     az n1 számot n2 darab tizedesre kerekíti.

KOMBINÁCIÓK(n1;n2)     az n1 számú elemből kiválasztott n2 számú lehetséges elem kombinációinak számát adja.

KICSI(t;n)     a t területen lévő n-edik legkisebb elem.

MA()     a mai dátumot adja eredményül.

MAX(t)     a t terület adatai közül a legnagyobbat adja.

MIN(t)     a t terület adatai közül a legkisebbet adja.

MÓDUSZ(t)     a t területen leggyakrabban előforduló szám.

NAGY(t;n)     a t területen lévő n-edik legnagyobb elem.

PI()     a pi értékét adja 15 jegy pontossággal.

SOKSZOR(szöveg;n)     n-szer adja a szöveget

SZÓRÁS(t)     a t területen elhelyezkedő számok szórása.

SZUM(t)     a t területen lévő adatok összegét adja.

SZUMHA(t;"felt")     a t terület felt feltételnek eleget tevő celláit összegzi.

SZUMHA(t1;"felt";t2)     megkeresi a felt feltételnek eleget tevő cellákat a t1 területen, s eredményül a t2 terület azonos sorban lévő celláit összegzi.

VAGY("felt1";"felt2")     eredménye igaz, ha bármelyik feltétel igaz, hamis, ha mindkét feltétel hamis.

VÉL()     egy 0 és 1 közé eső véletlenszámot ad eredményül.

A haladóbb felhasználók számára az előzőek közül talán az fkeres függvény az, amit a legtöbben használnak. Ennek oka az, hogy gyakran van szükség arra, hogy egy nagyobb, adatbázisszerű táblázatban keressünk meg egy sort, hogy aztán majd annak egy másik oszlopában lévő adattal térjünk vissza.

Bár szinte mindenre kínál függvényt az Excel, néhány lehetőség látszólag hiányozhat. Például köbgyökre nincs függvény, de ha az A1-es cellában lévő szám köbgyökét ki akarjuk számolni, úgy használhatjuk az =A1^(1/3) képletet. (A ^ jel begépelése kicsit körülményes, mert bár az az AltGr 3-mal bevihető, csak akkor jelenik meg, ha már a következő karaktert is leütöttük.)

Az alábbi példában egy olyan kereséses számolást végzünk, ahol egy listából kell kiválasztani egy adott értékhez tartozó adatot. (Az E1 cellánál célszerűen használhatunk adatérvényesítést.) A kedvezmény oszlopban lévő adatok: 0,2 0,25 0,25 0,1 0,15 és 0,1 százalékos típusban kerülnek megjelenítésre. A cégnév oszlopban lévő adatok ábécé sorrendben rendezve vannak.

A táblázat kitöltése során a felhasználó az E1 cellába beírja a vevő nevét, az E2 cellába pedig a teljes összeget. hatására az Excel megkeresi a vevőnévvel azonos nevet az A oszlopban, majd a hozzá tartozó százalékértékkel visszatérve kiszámítja a fizetendő összeget. A függvény kereső része az E1 cellában lévő értéket megkeresi az A2:A99 területen (ahol a cégnevek vannak), majd a hozzá tartozó B2:B99 területen lévő értéket adja. Ez az érték egy százalékérték, ami valószínűleg 0% és 100% között, azaz 0 és 1 között lesz. Ezt levonva 1-ből (azaz a termék árának 100%-ából) megkapjuk azt a számot, amivel az E2 cellában található termék árát meg kell szorozni.

1.4. Adatbázis függvények

Komolyabb felhasználások során nagy szerepet játszhatnak az adatbázis függvények is. Ezek használata azonban kissé eltér a megszokottól, hiszen a területazonosításokat, feltételrendszereket nem a függvénybe írjuk, hanem a táblázatba. A statisztikai függvényektől abban különböznek, hogy három paramétert tartalmaznak, ahol az első az adatbázis, amivel számolni kell, a második a mező nevét tartalmazó cella, vagy a mező sorszáma, a harmadik pedig az a terület, ahol a kritériumok, feltételek megtalálhatók. (Ezek megegyeznek a speciális szűrésnél használtakkal.) A függvénybe tehát nem magát a mezőnevet, és a kritériumokat írjuk, hanem azoknak a celláknak az azonosítóit, ahol ezek megtalálhatók.

Nézzünk egy példát adatbázis-függvény használatára. Készítsünk egy kimutatást, ahol egy adatbázisból kell kiszűrni az adott időszakban eladott és beszerzett termékek összértékét. Az adatbázisban számos egyéb adat mellett szerepeltetjük a dátumot, az összeget és egy olyan cellát, amelynek értéke 1, ha eladás és 2, ha beszerzés történt. Az összesítést egy külön munkalapon végezzük, ahol meg tudjuk adni a kezdő és záró dátumot, ami meghatározza, hogy mely napok közti időszak értékesítési adatainak összesítését kell elvégezni.

Az ábrán látható, hogy a feltételek is a táblázatban szerepelnek. Ezeket célszerű valamilyen módon eltűntetni (pl. fehér betűszínnel, stb.), ha zavaró lenne.

A feltételmegadás során az azonos cellára vonatkozó feltételek írhatók több sorban, egymás alá is, de ez a mi esetünkben nem hozna helyes eredményt, mert ha egymás alá írunk több feltételt egy mezőre vonatkoztatva, úgy az összes azon cella feldolgozásra kerül a függvény által, ahol a feltétel teljesül. A mi esetünkben pedig nem vagylagos, hanem „és” a kapcsolat, hiszen csak azon cellák érdekelnek minket, amely esetben a kezdő dátumnál nagyobb és a záró dátumnál kisebb az érték.

A lényeg, hogy a G3 és G6 cellákban az =">="&B2 képlet, a H3 és H6 cellákban az ="<="&B3 képlet szerepel, mivel ezekkel tudjuk előállítani azokat a feltételeket, amik majd a kiértékelésünk feltételei lesznek. Nagyon fontos, hogy a G2, H2, I2, K2, G5, H5, I5 és K5 cellákban pontosan szerepeljenek az árumozgás lap első sorában lévő fejlécek feliratai.

A D6 cellában az =AB.SZUM(Árumozgás!A1:E9999;K2;G2:I3) a D8 cellában pedig az =AB.SZUM(Árumozgás!A1:E9999;K2;G5:I6) függvényt használjuk a számításokhoz. Látható, hogy a függvény paraméterei az adatbázis-tartomány, az összegzendő mezőnevet tartalmazó cella megnevezését tartalmazó cella, illetve az a feltételeket tartalmazó terület, ahova felsoroltuk a kritériumainkat oly módon, hogy az első sorba a mezőnevet, alá pedig a kritériumot írtuk. (Ha tehát a kritériumok közt és kapcsolatot akarunk, úgy egymás mellé, ha vagy kapcsolatot, úgy egymás alá kell azokat írni.)

1.5. Képletkiértékelő

Néha előfordul, hogy a képletünk hibás, vagy nem azt az eredményt szolgáltatja, amit kellene. A cellában viszont csak a végeredményt látjuk, egy összetett, vagy egymásba ágyazott függvények esetén a belső részeredményeket azonban nem. Az ilyen jellegű problémák megoldásához használhatjuk a Képletkiértékelőt.

A képletkiértékelő gombját a Képletek szalag Képletvizsgálat mezőjében találjuk. Rákattintva megjelenik az aktuális cellában lévő függvény egy ablakban, amely ha több részre tagolódik, úgy az első rész aláhúzásra kerül. A Kiértékelés gombra kattintva e helyett kerül be ennek a résznek az értéke, majd a következő rész kerül aláhúzásra. Ennek megfelelően lépésről lépésre végigmehetünk a képletünk összetevő elemein és kideríthetjük, hogy annak mely része okozza a problémát.

1.6. Másolási lehetőségek

Jelen könyvben a szokásos húzással történő, illetve vágólap használatával végzett másolásokat most nem ismertetjük, feltételezzük, hogy a tisztelt olvasó azokat már ismeri.

Az Office 2010 újdonsága azonban, hogy egyrészt még a valódi beillesztés előtt megtekinthetjük, hogy miként fog kinézni a beillesztés, másrészt pedig hogy nem csupán egyszerű beillesztést végezhetünk, hanem a korábban vágólapra tett adatot a beillesztés során át is alakíthatjuk, így például lehetőség van képként, sorokat oszlopokká alakítva, a képleteket értékké alakítva, formázás nélkül, stb. beilleszteni.

Az előnézettel történő beillesztéshez ugyanúgy kell eljárnunk, mint minden más vágólapművelet esetén, csupán ez esetben le kell gördíteni a beillesztés gombot, és a megjelenő ikonok közül ki kell választani a kívánt beillesztési módot.

Ugyanígy megvalósítható a beillesztés a helyi menüből is, ha a célhelyen a jobb egérgombbal kattintunk, majd a Beillesztés beállításai felirat alatti ikonok közül a kívánt beillesztési módot szimbolizálón kattintunk.

Igen hasznos ez a lehetőség például akkor is, ha egy másik területről úgy kívánunk adatokat másolni, hogy az új helyre ne a képletek, hanem a cellákban lévő értékek kerüljenek át.

Amennyiben nem cellát, hanem a cellára vagy annak szövegére jellemző formázást (betűtípus, méret, stb.) szeretnénk másutt is alkalmazni, úgy a formátummásolás funkciót használhatjuk. Ehhez a következőket kell tennünk:

- kattintással vagy egyéb módon vigyük a kurzort arra a cellára, amely formátumát máshol is alkalmazni szeretnénk,

- kattintsunk a gombon (a kurzor mellett most egy kis ecset is megjelenik),

- végül kattintsunk azon a cellán, amelyet az előbb kiválasztottal azonossá kívánunk alakítani.

1.6.1. Értékké alakítás másolással

Gyakran szükség lehet arra, hogy egy nagyobb területen lévő táblázatrész esetén az összes cellában értékekre szeretnénk cserélni a képletekkel kiszámolt cellatartalmat. E célra ugyan a szerkesztőlécben leütött F9 billentyű tökéletesen alkalmas, ám ez csupán egy cellában végez átalakítást, így, nagyobb terület értékké alakítása ezen módszerrel iszonyatosan körülményes. Van azonban egy igen egyszerű módszer erre a problémára is.

Jelöljük ki az értékké alakítandó cellákat tartalmazó területet, tegyük vágólapra (Ctrl-C), majd kattintsunk rá a jobb egérgombbal és a helyi menüből válasszuk az Értékek gombot a Beillesztés beállításai sor alatt.

2. Adatjelölések, értékgörbék, feltételes formázás

2.1. Adatjelölések

Az újabb Excel verziók egyik újdonsága a feltételes jelölők alkalmazása, amelyek a cellán belül helyezkednek el, és amelyek az abban lévő adatra utalnak különféle vizuális szimbólumokkal. A lehetőségek verziótól függően eltérőek, a leírásban a 2010-es változatot ismertetjük, így a lehetőségek egy része 2007-ben nem érhető el.

Az adatvonalak a cella elejétől kezdődnek és annak hátterét színezik el a cella értékétől függő hosszúságban. Ez értelemszerűen függ a meghatározott terület legnagyobb értékétől.