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 - Két adattábla tartalmának összevetése

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 - Két adattábla tartalmának összevetése

Excel - Két adattábla tartalmának összevetése

Időről időre (sajnos) előfordul, hogy egy adatkör tábláját, táblázatát többször is megkapom. Bár ez a tény munkaszervezési, kommunikációs és még sok más szempontból nem szerencsés, adatkezelési nézőpontból még nem feltétlenül tragédia, ha biztosan tudhatom, hogy a két adatcsomag tartalma egyezik-e vagy sem. Az igazán bosszantó esetek azok, amikor ezt nem tudhatom biztosan, s össze kell vetnem a két adatcsomagot. Az ilyen típusú ellenőrzésekhez mutatok néhány egyszerű eszközt, először az Excel hagyományos eszközeire támaszkodva.

Előkészítés

A bemutató kedvéért előállítottam egy teljesen véletlenszerű adatokból álló táblázatot, amely egy webáruház termékkínálatát próbálja imitálni. 100 adatsorból + 1 fejléc sorból, valamint 8 oszlopból áll, a bemutatott módszerek azonban ennél sokkal nagyobb (sok százezer soros, több száz oszlopos) táblázatokra is használhatók.

Mivel a két táblázat feltehetően két külön fájlban érkezett, első lépésként az új adatokat a régiek mellé másolom egy új munkalapra. Az átláthatóság érdekében a régebbi adatcsomagot (amit először kaptam) tartalmazó munkalapot OLD névre keresztelem, a frissebb adatokét pedig NEW névvel látom el.

Excel - Két adattábla egymás mellé másolva

Az egymás mellé másolás nem kötelező lépése az ellenőrzésnek, de tapasztalatom szerint egyszerűbbé teszi a függvények és egyéb Excel eszközök használatát.

Strukturális különbségek

Elsőként megnézem, hogy a két táblázat azonos számú oszlopból és sorból áll-e, hiszen ha ez a kettő eltér, akkor biztosan van tartalmi különbség is. Az Excel oszlop- és sorazonosítói ennek az ellenőrzését nagyban megkönnyítik, így csak navigációs gyorsbillentyűk (Ctrl + a megfelelő kurzorbillentyű) segítségével megnézem, mi az utolsó sor száma és utolsó sor azonosítója. A példámban mindkét táblázatban a H oszlop és a 101. sor az utolsó.

Excel - Oszlopok és sorok számának ellenőrzése

Következő lépésben azt ellenőrzöm, hogy habár mindkét táblázatban azonos számú oszlop található, ezek fejléce megegyezik-e. Hiszen ha az új táblázatból kivettek egy oszlopot, ami a régiben benne volt, de beletettek egy újat, akkor darabra stimmel, tartalmilag mégsem azonos. Ehhez a két táblázat fejlécét egy új (COLUMN) munkalapra másolom (transzponálva) egymás mellé, a harmadik oszlopban pedig összevetem, hogy ugyanaz szerepel-e benne. A C2 cellába ezt a képletet írtam, majd lehúztam a többi sorra is.

=A2=B2

Ha a táblázat sok oszlopot tartalmaz, így a fejléc is nagyon hosszú, az Adatok szalag Rendezés és szűrés panelján bekapcsolva a Szűrő eszközt, megkereshetjük, hol található HAMIS érték, ami az oszlopfejléc eltérését jelzi.

Excel - Két adattábla fejlécének összehasonlítása

Számomra áttekinthetőbb, ha a transzponálva helyezem őket egymás mellé, de ez ismét nem kötelező, a függvény egymás alatt és felett elhelyezkedő sorokra is megírható. A transzponálással kialakított oszlopszerű elrendezés egyrészt könnyebben kezelhetővé teszi a fejléceket, ha nagyon sok oszlopunk van, valamint (és ez a fontosabb) lehetővé teszi a különbségek szűrését.

Ha az oszlopok tartalmilag megegyeznek, az ellenőrzés következő lépése, hogy ugyanazokra a rekordokra tartalmaz-e adatot a két tábla. Ezt az ellenőrzést csak akkor tudjuk elvégezni, ha olyan táblával dolgozunk, amely valamelyik oszlopában a vizsgálati egységek egyedi azonosítóját tartalmazza, mint a mintatáblázatban a PID. A NEW munkalap adataiból készítek egy new_data nevű elnevezett tartományt (ha még nem használod rutinosan ezt az eszközt, ajánlom ezt az írást: Excel - Névvel ellátott tartományok), és az OLD munkalapon az utolsó oszlopba az azonosító alapján egy FKERES függvény segítségével megkeresem az azonos értékű azonosítót. A mintaállományban az I2 cellába ezt a képletet írtam:

=FKERES(A2;new_data;1;HAMIS)

Ha az FKERES eredményeképpen sehol sem kapunk #HIÁNYZIK értéket, akkor ugyanazok a rekordok szerepelnek mind a két táblában.

Excel - Két adattábla rekordjainak összehasonlítása

Ha nagyon-nagyon alaposak akarunk lenni, az egyedi azonosítók párosítását elvégezhetjük mind a két irányba, nem csak a régihez az újakat társítva. Ha azonban sehol sem szerepel #HIÁNYZIK, nincs erre szükség, hiszen azt már ellenőriztük, hogy ugyanannyi sorból áll a két táblázat és ha az régi táblázat minden azonosítóját megtalálta az új táblázatban, az logikusan azt jelenti, hogy azok és csak azok szerepelnek benne. Ha valahol #HIÁNYZIK eredményt kapunk, akkor érdemes a másik irányba is elvégezni az FKERES-t, így meg tudjuk, melyek azok a sorok, amelyek csak a régiben, illetve csak az újban szerepelnek.

Tartalmi különbségek

Mivel már tudjuk, hogy ugyanazok a sorok és oszlopok szerepelnek a táblázatban, ideje megvizsgálni, hogy a többi érték is egyezik-e. Ennek az ellenőrzésnek a logikai alapja, hogy minden cella esetében megvizsgáljuk, hogy a másik munkalap azonos cellájában ugyanaz az érték szerepel-e vagy sem. Megtehetjük azt olyan módon, hogy egy új munkalapon (DIFF) használjuk ezt a képletet:

=OLD!A1=NEW!A1

vagy ennek egy kicsit szofisztikáltabb változatát:

=HA(OLD!A1=NEW!A1;"";"DIFF!")

egy akkora tartományon, amekkora a táblázatunk.

Excel - Cellaértékek azonosságának vizsgálata

Ennek a megoldásnak az előnye, hogy könnyen tudunk darabszámot mondani (pl. DARABTELI függvény segítségével), hogy összesen hány eltérés van a két táblázat között. Hátránya azonban, hogy nehézkes pontosan akkora területet kijelölni, mint a táblázat, és ha látjuk is, hogy van különbség a két táblázat között, nem egyszerű megkeresni az eltérő értékeket.

Azonos logikán alapszik, ám vizuálisan emészthetőbb eredményt ad a feltételes formázás. Az A1 cella kijelölőse után Kezdőlap szalag Stílusok paneljén található a Feltételes formázás ikon, amely mellett a kis háromszögre kattintva a Szabályok kezelése... menüpontot választom. Hozzáadok egy új formázási szabályt az Új szabály... ikonra kattintva. A szabálytípus kiválasztásánál a "Csak az adott tartalmú cellák formázása" opciót választom, a szabály leírásánál pedig azt adom meg, hogy a cellaérték nem egyenlő a másik munkalap A1 cellájával (=NEW!A1).

Excel - Feltételes formázási szabály feltétele

Megadok egy olyan formátumot, amely elég szembeszökő, ilyenkor főleg a piros és sárga színeket használom, azok elég feltűnők. A szabály beállításai után OK gombot nyomva a Feltételes formázás szabálykezelője felületen az iménti szabály Érvényességét kiterjesztem a táblázat összes oszlopára, ami a mintaállományban A:H. (Az Excel ellátja a tartományt dollárjelekkel, de ez ne zavarjon meg.)

Excel - Feltételes formázási szabály beállítása

Ezek után azok a cellák, amelyeknél más érték szerepel az új táblázatban, piros színnel jelennek meg, így könnyen meg lehet találni az eltéréseket. A módszer előnye pont abban rejlik, hogy vizuális eszközökkel segít megtalálni az eltéréseket, és a két érték közül az egyiket látjuk is azonnal. Hátránya azonban, hogy nem tudjuk, hány darab eltérés van a két táblázat között.

Excel - A cellaértékek különbségei feltételes formázással kiemelve

A feltételes formázást érdemes lehet mindkét táblázatra beállítani, a különbség mindössze annyi, hogy a nem egyenlőség meghatározásánál másik munkalap A1 cellájára kell mutatni. Ha mindkét táblázat mutatja a különbségeket, könnyebb összenézni a két értéket.

További lehetőségek

Bár az eddigi megoldások is nagyon hasznosak, egy valóban nagy táblánál fárasztó és időigényes dolog lenne megkeresni és végignézni minden egyes eltérést. Sokkal egyszerűbb lenne, ha kaphatnánk egy listát az eltérésekről, amelyben megjelenik, hogy melyik rekord, melyik oszlopáról van szó és mi a régi, valamint új érték. Hamarosan megmutatom, hogyan lehet egy ilyen makrót készíteni, azután pedig megvizsgáljuk, hogy elhagyva az Excel világát, adatbázisban hogyan tudunk összehasonlítani két adattáblát és az eltérésekről listát készí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