Ha az ember elég sok prezentációt, dashboardot készít a mindennapokban vagy készített elég sokat a múltban, akkor igyekezni kell mindig megújulni és újabb kreatívabb megjelenítési formákat bevetni, különben egy idő után már csak magunkat ismételjük. A következő posztban egy ilyen megjelenítési forma kerül bemutatásra, amely bár elég népszerű volt már a múltban is mindenféle minőségben és formában, eme poszt szerzője nem is túlságosan régen készítette el az első ilyet saját maga - remélhetőleg lesz olyan, akinek ez most szintén segítség lesz.
A célunk, hogy Excelben készítsünk egy hőmérős diagramot, amelynél értelemszerűen a legfontosabb első lépésünk az, hogy meghatározzuk, tényleg erre van-e szükségünk, hiszen egy ilyen hőmérő alapesetben elég korlátozott témakörben használható - főként jelenlegi állapot és célérték összehasonlítására.
Ha eldöntöttük, hogy tényleg ilyesmit akarunk, akkor kezdjünk is neki! Adott tehát az adathalmazunk.
Értelemszerűen figyeljünk oda arra, hogy aktuális érték és célérték is álljon rendelkezésre, különben nem lesz könnyű megvalósítani a hőmérőt és nincs is nagyon értelme. Jelöljük ki a két értéket (aktuális és cél), majd az Insert ribbonfül Charts szekciójából szúrjunk be egy kétdimenziós, Clustered Chartot:
Az ezután megjelenő Design ribbonfül Data szekciójában nyomjunk rá a Switch Row/Column funkcióra:
Az így megjelent diagramban, a célértéket megjelenítő oszlopra kattintsunk jobb gombbal, majd Format Data Series:
Itt a Plot Series On menüpont alatt kattintsuk át a rádiógombot Secondary Axisra:
A bal- illetve jobb oldalon lévő tengelyfeliratokat a jobb gombbal történő kattintás után előhívható Axis Options menüből módosítanunk kell úgy, hogy a léptékek illetve a maximumérték ugyanannyi legyen:
Ezután a most már egymást teljesen fedő oszlopokra kattintsunk, majd formázzuk meg a nagyobbikat (a célértéket), méghozzá úgy, hogy a Format ribbonfül alatt töröljük a kitöltést (Shape Fill - No Fill) illetve adjunk neki egy erősebb körvonalat:
Ezzel még nem ér véget a formázgatás, most kell például törölnünk a jobb oldali tengelyfeliratokat, a címet, a gridline-okat illetve most kell átméreteznünk a diagramot is úgy, hogy nagyjából hőmérőre emlékeztető vastagságot és formát kapjunk:
A bal oldali axisra jobb gombbal kattintva előhívjuk megint az Axis Options-t, majd a Tick Marks alatt a hőmérőre hasonlítás érdekében még tegyünk be beosztást jelölő "vonalkákat" is:
Ha felmerülne valakiben olvasás közben a kérdés, hogy mégis hogyan lehet átállítani a "folyadék" színét, akkor ez a kép remélhetőleg segítség lesz:
A Format ribbonfül Current Selection szekciójából kell kiválasztanunk a Series 2 objektumot, ha a "folyadékot" akarjuk babrálni. Visszatérve a diagramunkhoz, még egy lépés van hátra, méghozzá az, hogy a hőmérőnk alját is elkészítsük. Lehet elkeskenyedő hegyes vége, mint egy lázmérőnek, de lehet gömbölyű is, döntsük el, de például egy gömbölyű részhez az Insert ribbonfül Illustrations szekciójából kell beszúrnunk egy ovális formát:
Formázzuk meg majd illesszük hozzá az eddigiekhez és kész is vagyunk:

A térképen majd Nuku'alofát, Tonga fővárosát fogjuk élesen hagyni, míg a térkép többi része elhalványul, aztán majd a fővárosról dobálunk fel hasznos információkat az elhalványult térképrészleteken.
Ahogy látható is, defaultban piros a kitöltés, tehát nem is látjuk most a térképet. Ezután ezt a pirossal kitöltött formát mozgassuk kissé le a térképről, pont annyira, hogy azért lássuk már a fővárost a térképen. Ezután ismét a Shapes menüből szúrjunk be ezúttal egy ovális formát:
Majd a formát a következő képen látottaknak megfelelően helyezzük a fővárosra, értelemszerűen ezúttal kitöltés nélkül (No Fill).
Ha visszahúzzuk az eredeti téglalap-formát a térképünkre, akkor valami ilyesmit fogunk látni:
Tehát már látjuk a kört, nagyjából Nuku'alofa magasságában. Ezután két dolgot kell megtennünk: egyrészt CTRL lenyomásával kattintsunk a körünkre és a téglalapunkra is egyszerre, majd a Format Ribbonfül alatt található Insert Shapes szekcióból a Merge Shapes gombra kattintva egyesítsük ezt a két formát (Combine opció).
Majd erre az egyesített formára jobb gombbal kattintva válasszuk az Outline menüt, majd távolítsuk el a keretet:
Ugyanitt a Fill menüből színezzük fehérre a formát. Ezt kapjuk:
Ezután ha jobb gombbal ismételten az egyesített formánkra kattintunk, akkor a legördülő menüből válasszuk a Format Shape menüpontot, majd az oldalt felbukkanó opcióablakban a Transparency értékét állítsuk mondjuk 20% körülire:
Ezután már csak arra van szükségünk, hogy ugyanezen egyesített formát kijelölve, az Animations ribbonfül alatt szúrjunk be erre a formára egy Fade stílusú animációt:
Majd az esetlegesen az elhomályosítás, kiélesítés után megjelenő extra szövegdobozunkra is tegyünk rá egy Fade típusú animációt:
És ha most elindítjuk az animációt, már láthatjuk is, hogy az alapból megjelenő sima térkép előbb elhomályosul, élesen hagyva a Nuku'alofa körüli kört, majd ezután megjelenik a szövegdobozunk is a hasznosnak vélt információkkal:

Hogy érjük el azt, hogy a H4-es cellában lévő összegzés mindig magától frissüljön, ha a C-D oszlopokban található táblázatunkhoz új sorokat adunk hozzá?
Értelemszerűen ez okozhat problémákat, ha rengeteg oszlopunk van vagy ha minden sorunk mellett van egy beképletezett másik cella is, de például ha az összegzésünk egy másik sheeten található és a táblánk is egyszerű, akkor ennél nincs jobb megoldás (mondjuk ez nem is megoldás, hanem maga a program nyújtotta automatizmus). Viszont ha mindig az utolsó sor után adunk hozzá egy újat (mondjuk napokat), akkor ez nem működő opció.
De hivatkozhatunk egy elég nagy tartományt is, mondjuk D10:D100000, ha az lefedi jó előre a hozzáadandó celláinkat.
Innentől kezdve pedig akár a sorok közé, akár a sorok után szúrunk be új adatot, a tábla automatikusan frissülni fog:
Viszont legnagyobb valószínűség szerint a fentiekhez képest jóval kényelmesebb és stabilabb megoldást kínálnak a dinamikus tartományok, amely megoldásokban az a közös, hogy egytől-egyig mindet a Formulas ribbonfül Defined names szekciójában fogjuk megalkotni a Define Name menüpont segítségével:
A következőkben néhány ilyen nevesített tartományhoz rendelt formulát fogunk megnézni, amelyek mindegyike segíteni fog a fent felvetett kérdés megoldásában.
És akkor ennek az OFFSET-es nevesített tartományos hivatkozásnak használhatjuk jópár másik verzióját is, például ezt:
És ez pedig a másik oldal lenne, két VBA-hibaüzenettel:
Persze itt most azért eléggé általánosítottam, hiszen akár fordított felállásban is tudtam volna hibaüzeneteket hozni, VBA esetében például mindenképpen a nehezen megfejthető hibaüzenetek listáján előkelő helyen szerepelne a hírhedt 400-as hiba:
Nem megfejthetetlen, az nem kérdés, de a megszokottól kicsit eltérően itt nem kapunk segítséget első körben, magunknak kell utánajárni a problémát okozó sornak. Leggyakrabban egyébként ilyet akkor láthatunk, ha a kódunkban valami olyasmire hivatkozunk, ami (már) nem létezik - például egy nem létező munkafüzetre vagy olyan változót akarunk mondjuk használni, amit nem deklaráltunk stb. (tehát nagyjából egy Application-defined or object-defined errornak feleltethető meg). Viszont a megoldás mindenképpen csak a manuális soronkénti ellenőrzés lehet, hiszen nem tudhatuk hol bújik meg a téves hivatkozás - bár azt azért ki tudjuk deríteni, hogy pontosan milyen hibánk van.
Majd építsünk fel köré egy kis designt, amilyet éppen akarunk:
Az én kis táblám csak a példa kedvéért négy magyar város és ezek lélekszáma lesz, tehát a nyilak segítségével a városok között tudunk majd váltogatni és ezen kiválasztott értékhez függvénnyel keressük majd be a lélekszámot. Értelemszerűen a segédtábla bárhol lehet az Excelben, most csak az egyszerűség kedvéért van a Spin Button közelében.
Következő lépésként lépjünk bele abba a cellába, ahol majd a nyíl nyomogatása után szeretnénk megjeleníteni a lista értékeit és a következő formulát írjuk be:
Ugyebár azt már kívülről fújjuk, hogy az INDEX függvény az első paramétereként megadott tömbből a második paramétereként megadott számú sorban lévő értéket adja vissza, így látható, hogy a négy település neve lesz a tömb, a Spin Buttonhoz linkelt O3 cella pedig a sorszámot fogja adni.
Az O3 linkelt cella pedig a Spin Button nyilai alapján kapja az értéket, attól függően, hogy éppen hol állunk a tartományban. Fontos tennivaló még a maximum és minimum értékek beállítása, ugyanis ellenkező esetben lenne rengeteg #REF hibaüzenetünk is. Szóval kattintsunk még egyszer jobb gombbal a Spin Buttonra, majd a Format Control menü Control fülén állítsuk be a minimum és maximum értéket:
És ezzel kész is vagyunk, a lélekszám bekeresését már nem fogom printscreenelni, azt a messze legismertebb Excel-függvénnyel, a VLOOKUP formulával könnyedén meg tudjuk oldani.
Szúrjunk be a Data ribbonfül Data Tools szekciójából egy Data Validationt:
Data Validation Listre lesz szükségünk, amelynek forrása legyen egy üres, később elrejtésre kerülő sheet egy jelenleg még üres tartománya:
Ezután pedig már csak össze kell dobnunk a minimális designt, tehát lesz egy kis magyarázat, a data validation lista plusz egy gomb, amelyhez a PowerPointba másoló kis makrónkat tudjuk majd hozzárendelni.
Na de itt álljunk is meg, mert mostani posztunk legfontosabb tennivalója következik, azaz megírni azt a kis VBA-kódot, ami majd automatikusan frissíti a Data Validation listánk forrástartományát, így lehetővé téve, hogy a felhasználó az adott Excel-fájlunk aktuális chartjai közül választhasson.
És ha ezt látjuk a második sheeten, akkor az is egyértelmű, hogy mit látunk az első sheeten:
Innentől kezdve pedig már csak arra van szükségünk, hogy beolvassuk a kiválasztott chartunk nevét, majd erre a chartra lefuttassuk a másoló makrót és máris a felhasználóra bíztuk az input meghatározását. Fontos megemlíteni a poszt végén, hogy ez egy nagyon alap kód, tehát bőven lehet finomítani még azzal, hogy mondjuk az összes sheeten vizsgálja a chartokat (még egy For ciklus), plusz minden indításnál fusson le a makró, hogy a legördülő menü friss legyen mindig és így tovább.
Nos, alapesetben ezt csak úgy tudjuk megnyitni, ha leállítjuk a prezentációt, visszalépünk szerkesztő üzemmódba, majd a megtekintés után újraindítjuk a vetítést. Ez általában eléggé megakasztja a prezentáció varázsát, úgyhogy következzen egy lehetséges megoldási mód a fentiek elkerülésére.
Felugrik egy eléggé magától értetődő kis ablak:
Itt tudjuk meghatározni azt, hogy mit tegyen a program akkor, ha rákattintunk (Mouse Click fül) vagy ráhúzzuk (Mouse Over) az egeret az adott objektumra. A lehetőségek elég jók, átléphetünk másik diára, elindíthatunk egy makrót vagy egy programot, illetve ami most minket leginkább érdekel, eseményt rendelhetünk az objektumra való kattintáshoz.
A másik kérdéskör, amit röviden feszegetni fogok, valószínűleg annyira ritka felhasználói igényt testesít meg, hogy tömegek valószínűleg nem is fogják felhasználni ezt a megoldást, de talán mégis segítség lehet valakinek. Ha van egy Excel-fájlunk, amiben különféle sheeteken szétszórva, elrejtve stb. vannak beágyazott objektumaink és egy summary sheetről kattintások alapján szeretnénk ezeket megnyitni (tehát nem linkeket akarunk, hanem egy cellára kattintva az ugyanabban az Excel-fájlban valahol beágyazott objektumunk nyíljon meg), akkor a következő út járható lesz.
A cél tehát az, hogy ha a D4-re (tehát a bekeretezett cellára) duplán kattint a felhasználó, akkor megnyíljon a példaként beszúrt kép-objektum. Menjünk át a VBA-editorba ALT+F11 lenyomásával, majd válasszuk ki, hogy az adott munkalap BeforeDoubleClick eseményéhez szeretnénk egy kódot hozzárendelni:
A standard válasz pedig szintén valószínűsíthető módon ott volt a kedves Olvasó tarsolyában, azaz az Excel Options Formulas almenüjét kell választani:
Itt pedig a Working with formulas szekcióban ki kell venni a pipát az R1C1 reference style checkboxból.
A probléma megoldva és lehet is továbblépni, viszont azért a kérdés ott maradhat sokakban: vajon erre az R1C1 hivatkozásos dologra mi szükség van, egyáltalán használja-e ezt valaki a mindennapokban?
És adott az R1C1 típusú formátum:
Az R és C betűk angolul tudók számára valószínűleg azonnal érthető rövidítések, az R a sort (Row), a C pedig az oszlopot (Column) jelöli. Attól függően változik a mozgás iránya az aktuális cellához képest, hogy
A konkluzió persze nem az, hogy most rohanjunk és azonnal így kezdjük el használni az Excelünket a bevált B1 típusú hivatkozás helyett, de remélhetőleg a fenti poszt segített megérteni egyrészt az R1C1 hivatkozástípus létének okát, másrészt azt, hogy miért van a mai napig olyan felhasználó, aki szívesen használja ezt a módszert.
Innentől kezdve már csak a képzeletünk és az elvégzendő feladat szab határt a lehetőségeknek, hiszen akár létrehozhatunk egy gombokkal vezérelhető userformot is vagy akár automatikusan beépíthetjük a felmásolást egy hosszabb kódunkba:
És innentől kezdve az első képen bemutatott üres könyvtár pillanatok alatt megtölthető automatikusan:
A Developer ribbonfül Controls szekciójában kattintsunk a More Controls ikonra:
A felugró listában keressük meg és válasszuk ki a Shockwave Flash Object nevű controlt:
Az objektum beszúrása után ezt fogjuk látni:
Kattintsunk rajta jobb gombbal, majd a felugró content menüből a Property Sheet opciót válasszuk ki:
Itt a tulajdonságok listájában menjünk el egészen a Movie tulajdonságig, majd ide illesszük be a YouTube videónk elérhetőségét:
Figyeljünk arra, hogy a helyes működés érdekében a linket kicsit át kell alakítanunk, azaz ebből
Ha még azt is szeretnénk beletenni, hogy a videó az adott diára való érkezéskor automatikusan induljon el, akkor nem kell mást tennünk, mint az előbb beollózott link után tegyük be a &autoplay=1 taget.
Ezzel pedig meg is vagyunk! Hasonló módon egyébként más videómegosztókkal is tudunk ügyködni, vimeoval például szintén könnyedén meg tudjuk ezt csinálni.