Deprecated: Joomla\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 41

Deprecated: Return type of Joomla\Input\Input::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 170

Deprecated: Joomla\CMS\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Input.php on line 31

Deprecated: Joomla\CMS\Input\Cookie implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Cookie.php on line 0

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /home/adatpcom/public_html/libraries/src/Uri/Uri.php on line 141
Excel - Műveletek munkalapok azonos celláival

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21
Excel - Műveletek munkalapok azonos celláival

Excel - Műveletek munkalapok azonos celláival

Nemrég egy olyan Excel feladattal találtam szembe magam, amilyennel korábban nem találkoztam: több, azonos szerkezetű munkalap adataiból kellett egy összegző munkalapot készítenem. Az összegző munkalap struktúrája megegyezett a többi munkalap szerkezetével, így lényegében sok munkalap azonos celláit kellett összeadnom, ám lehetőleg olyan módon, hogy ha egy újabb munkalapot beillesztünk a munkafüzetbe, akkor is működjön. Megoldható-e ez a feladat? Milyen lehetőségek állnak rendelkezésünkre? Mit érdemes megfontolni, ha ilyen problémával találkozunk?

Bevezető gondolatok és példaadatok

A feladat azóta is gyakran eszembe jut. Legtöbbször az a kérdés merül fel bennem, hogy nekem miért nem volt szükségem még korábban ilyen megoldásra? Kicsit előreszaladva valószínűleg azért, mert én ilyen esetekben többnyire átstrukturálom az adataimat, de erre térjünk még vissza az írás végén. Rögtön ezután az szokott felmerülni bennem, hogy vajon hogyan alakulhat ki ilyen adatszerkezet, adattárolási logika? Erre a kérdésre többnyire azt a választ tudtam adni saját magamnak, hogy kezdetben az egész sokkal kisebb méretben (pl. egy munkalappal), részben vagy egészben eltérő céllal jött létre. Aztán ahogy telt az idő, bővült, fejlődött a feladat (ezzel megjelentek munkalapok), s ezzel együtt felmerültek új igények  is (pl. az össszegző munkalap, de lehetne más statisztikai mutató is). Eközben pedig az adatok átstrukturálása vagy fel sem merült, vagy más szempontok ("ezt legalább mindenki tudja használni", "nincs most erre időnk", stb.) miatt megőrződött a kezdeti adatszerkezet, ami nem biztos, hogy a legalkalmasabb a megváltozott igények kiszolgálására.

A feladat könnyebb megértése érdekében készítettem egy kis mintaadatot, véletlenszerűen generált számokkal. Ezúttal azonban fontos az a(z elképzelt) történet is, amit a példaadatok mögé és köré képzeltem. Tegyük fel, hogy...

1. Az AdatTérKép ötletének felmerülése után készítettem saját magam számára egy listát a feladattípusokról és minden feladattípus mellé felírtam, hogy az adott hónapban hány órát foglalkoztam vele. Kiemelve a lényeget: egy felhasználó, nyilvántartási cél.

Excel - Műveletek munkalapok azonos celláival - Egy felhasználó, nyilvántartási cél

2. Később megmutattam Daninak, akivel közösen indítottuk az AdatTérKép oldalát, az ötlet megtetszett neki is. Együtt továbbgondoltuk, és arra jutottunk, hogy minden hónapban kitöltjük mind a ketten és a két munkalapot egy fájlba másolva eltároljuk ezeket az adatokat, hátha később szükség lesz rájuk. Kiemelve a lényeget: két felhasználó, nyilvántartási cél.

Excel - Műveletek munkalapok azonos celláival - Két felhasználó, nyilvántartási cél

3. Pár hónap elteltével csapatunkhoz csatlakozott Anikó is, innentől ő szintén kitöltötte a számokat, a havi fájlok így már 3 munkalappal kerültek tárolásra. Mivel ismétlődő feladatról van szó (minden hónapban 3 munkafüzetből az egy-egy munkalap összemásolása egy új munkafüzetbe és ennek mentése a dátum alapján) és az automatizálást úgyis nagyon szeretjük, készítünk egy makrót, amely elvégzi az összemásolást. Ezzel egyben felkészítjük az adattárolási rendszerünket akárhány felhasználóra/munkalapra.  Kiemelve a lényege: három tényleges, tetszőleges számú elméleti felhasználó, nyilvántartási cél.

Excel - Műveletek munkalapok azonos celláival - Tetszőleges számú felhasználó, nyilvántartási cél

4. Egy ponton felmerült a kérdés, hogy mivel is foglalkoztunk, foglalkozunk a legtöbbet, illetve megéri-e az egyes feladattípusokra a ráfordított idő. Szerencsénkre ott voltak a korábban eltárolt adatok, amelyeket elemezni lehetett (feladattípusonként összeg, átlag, maximum). Ebben a pillanatban dönthetnénk úgy, hogy az eddigi adatokat átstrukturáljuk, a jövőben eltérő módon és szerkezetben gyűjtjük azokat, hogy a megváltozott célt hatékonyabban ki tudják szolgálni, de a példa kedvéért tegyük fel, hogy időhiány (vagy bármi más) miatt ezt nem tettük meg, az összegző munkalap mellett döntöttünk. Mivel az adattárolás tetszőleges számú munkalapra már felkészült, olyan megoldást kell találnunk, ami az elemzés során is figyelembe veszi ezt. Kiemelve a lényeget: három tényleges, tetszőleges számú elméleti felhasználó, nyilvántartási és elemzési cél.

Excel - Műveletek munkalapok azonos celláival - Tetszőleges számú felhasználó, nyilvántartási és elemzési cél

Megoldási lehetőségek és a megoldás

Miután adott a több, azonos szerkezetű munkalap és az ezekkel megegyező szerkezetű összegző munkalap, a legkézenfekvőbb megoldás, hogy a megfelelő függvény kiválasztása után végigkattintjuk az összes azonos cellát a munkalapokon. Például az Excel feladattípus összegzése (B4 cella) esetében így nézne ki ez a függvény:

=SZUM(Anikó!B4;Dani!B4;Zsolt!B4)

Excel - Műveletek munkalapok azonos celláival - Cellák egyesével kijelölve

A végeredményt tekintve ez egy jó megoldás, a relatív cellahivatkozásoknak köszönhetően más feladattípusokra is könnyen érvényesíthető. Két esetben azonban problémát okozhat a használata:

  1. Ha nagyon sok munkalapot kell összegeznünk. Így a függvény is nagyon hosszú lesz, sokáig is tart kialakítani, nagyobb a hibázás lehetősége.
  2. Ha egy új munkalapot kell hozzáadni. A függvényt minden egyes helyen bővítenünk kell, viszonylag nagy a hibázás lehetősége.

Szerencsére az Excelben van arra mód, hogy ne csak a cellákból alkossunk tartományokat, hanem a munkalapokból is. Ehhez a tartományba bevonni kívánt első munkalap neve és az utolsó munkalap neve közé kettőspontot (:) kell tennünk, majd jöhet a felkiáltójel (!) és a cella- vagy tartományhivatkozás. Például a

=SZUM(Anikó:Zsolt!B4)

függvényt használva az Excel végig halad az "Anikó" nevű munkalaptól a "Zsolt" nevű munkalapig és ezeknek, valamint a kettő között minden további munkalapnak a B4-es celláját fogja összegezni.

Excel - Műveletek munkalapok azonos celláival - Tartomány kijelölése munkalaptól munkalapig

Ez a megoldás már majdnem jó! Gyorsan előállítható, nem kell végighaladnunk minden munkalapon. Ha azonban bejön egy újabb munkalap (pl. "Zsuzska"), akkor nem mindegy, hogy az hova kerül! Ha az "Anikó" és "Zsolt" munkalap közé, akkor semmi gond, ha azonban az első vagy utolsó lesz a munkalapok sorában, akkor s képletet ismét módosítanunk kell minden helyen. Ha a munkalapokat szeretnénk ABC rendben tartani, akkor a "Zsuzska" munkalapot a megfelelő helyre illesztve már nem a "Zsolt" lesz az utolsó, így a képletet is javítani kellene.

Ezt egy apró trükkel lehet kiküszöbölni, ami nem feltétlenül szép, de mindenképpen hatékony megoldás! Beszúrunk egy munkalapot az első összegzendő munkalap elé, legyen a neve mondjuk "Start" és maradjon teljesen üres! Hasonlóképpen beszúrunk egy munkalapot az utolsó összegzendő után, ennek a neve legyen "End" és ez is maradjon teljesen üres! A képletet pedig módosítsuk így:

=SZUM(Start:End!B4)

Így a tartomány bevonja ugyan a "Start" és "End" munkalapokat is, ám mivel azok teljesen üresek, a végeredményt nem befolyásolják. Ha pedig újabb munkalapot kell beszúrnunk, mindegy, hogy hova kerül, amíg a "Start" után és az "End" előtt helyezkedik el, így egy "Alíz" nevű munkalapot is bátran beszúrhatunk az "Anikó" elé, a képletet mégsem kell módosítanunk!

Excel - Műveletek munkalapok azonos celláival - Tartomány kijelölése Start munkalaptól End munkalapig

Adatszervezési megfontolások

Bár a feladatot megoldottuk, alkalmazkodva a körülményekhez, a fenti példához sokkal jobban illeszkedne egy transzponált adatszerkezet, ahol a felhasználók találhatók a sorokban, a feladattípusok az oszlopokban és egyetlen táblázatban van minden adat, amit összegző, átlagoló, stb. sorokkal és oszlopokkal tudunk ellátni vagy kimutatást készíteni rá egy új munkalapon.

Excel - Műveletek munkalapok azonos celláival - Adatok átstrukturálása

Ez az adattárolási logika sokféle módon elérhető:

  1. Másolhatjuk kézzel, transzponált beillesztéssel az adatokat az egyes fájlokból.
  2. Módosíthatjuk a munkalapokat egymás mellé másoló makrót úgy, hogy az adatokat eleve a kívánt módon illessze be.
  3. Elgondolkozhatunk azon, hogy az adatközlés pl. Google Űrlap segítségével történjen, a kitöltött adatok pedig egy Google Táblázatban elérhetők lehetnek.
  4. Stb.

Az adatszerkezet megváltoztatása, az adattárolási logika módosítása mindig egy nehéz döntés, ami sok plusz munkával jár, ezért alaposan mérlegelni kell, hogy mennyit nyerhetünk általa. Ha azonban úgy látjuk, hogy az igények jelentősen megváltoznak, érdemes belevágni és áttérni az új igényeket jobban kiszolgálni képes adatszerkezetre. Az egyszeri idő- és energiabefektetés sokszorosan megtérül majd, amikor az ismétlődő feladatokat sokkal könnyebben el tudjuk végezni!

Ha adatbázis-építés, adatelemzés, vizualizáció, térinformatika témában segítségre van szükséged, írj nekünk az Ez az e-mail-cím a szpemrobotok elleni védelem alatt áll. Megtekintéséhez engedélyeznie kell a JavaScript használatát. címre és megpróbálunk egy tippel, ötlettel segíteni!

Címkék:

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21