Telefonszámunk: 1-472-0679

Excel 2010

Két dimenziós keresés – VLOOKUP-INDEX-MATCH

Előfordulhat olyan feladat, amikor egy táblázat első oszlopában és a fejlécében kell megkeresni egy-egy konkrét értéket, és a kettő által adott metszéspontban lévő adatot szeretnénk kivenni, úgy, ahogy ez az alábbi ábrán látható.

2D-kereses-alaptabla

A feladat során lényeges, hogy mind az első oszlop, mind a fejléc egyedi adatsort tartalmaz, ahol nincs ismétlődő elem. Ez azért fontos, mert a kereséshez a közismert függvényeket fogjuk használni, amelyek alapesetben az első előfordulást keresik.

Két megoldást ismertetnék. Itt azonnal a megoldás látható, a videóban pedig ott  a magyarázat is.

1. VLOOKUP-MATCH páros (Fkeres-Hol.Van)

A lényeg az, hogy az egész táblára nézve a  ‘B’ oszlopban keressük VLOOKUP-al a kívánt autómárkát (Renault), és azt, hogy melyik oszlopból adja vissza az eredményt, nem egy konstans számmal adjuk meg, hanem a MATCH függvénnyel megkérdezzük, hogy a fejlécben a kívánt hónap (Március) hányadik.

1. lépés:  a VLOOKUP

=VLOOKUP("Renault";$B$2:$H$12;4;0)

A VLOOKUP megkeresi az első oszlopban a „Renault” szót, és a negyedik oszlopból visszaadja a 266-os értéket.

2. lépés: a MATCH

=MATCH("Március";$B$2:$H$2;0)

A MATCH megadja, hogy a fejlécben a „Március” hányadik

3. lépés: Egybe rakva

=VLOOKUP("Renault";$B$2:$H$12;MATCH("Március";$B$2:$H$2;0);0)

Az 1. lépésben lévő VLOOKUP  képletben a 4-es helyére beletettük a komlett MATCH részt.

INDEX-MATCH páros (Index-Hol.Van)

Ugyanezt a feladatot az INDEX függvénybe ágyazott két MATCH függvénnyel is meg lehet oldani. Ugyanis az INDEX pont azt tudja, amire itt szükségünk van, azaz egy táblázat adott számú sorában és adott számú oszlopának metszéspontjában lévő értéket ad vissza.

=INDEX(táblázat, sor_szám, [oszlop_szám])

INDEX-peldatabla

Ezt a lehetőséget ritkábban használjuk, sokkal gyakoribb, hogy az INDEX csak egy dimenziós sorozatban (oszlopban) keres, és a második (oszlop) argumentumot meg sem adjuk.

Tehát ha az INDEX függvény sor és oszlop argumentumaiba MATCH függvényekkel kiszámoltatjuk azt, hogy a „Renault” hányadik az első oszlopban, és a „Március” hányadik az első sorban, akkor meg is kapjuk a kettő metszéspontjában lévő értéket.

=INDEX($B$2:$H$12;MATCH("Renault";$B$2:$B$12;0);MATCH("Március";$B$2:$H$2;0))

Letölthető minta dokumentum: Ketdimenzios-kereses

A videóban a megoldást interaktívvá tesszük, azaz választható az autómárka és a hónap, és a megoldást bemutatom Táblázattá alakított tartományon is.

  • Két dimenziós keresés akció közben

Tovább...

Hiányzó kategóriák pótlása – Szuper gyors trükk

Talán már többen találkoztatok olyan táblázattal, amiben az egyik oszlopban olyan módon jelölték a csoportokat, ahogy az alábbi ábrán látható:

Hianyzo kategoriak

Az elképzelés, a szándék látszik, de az ilyen fajta csoportképzés legfeljebb nyomtatásban hasznos. Táblázatkezelés esetén lehetetlenné teszi a legegyszerűbb adatkezelő műveleteket is, mint pl. az Auto szűrő használata, vagy akár a PIVOT.

Mit kell tennünk ebben az esetben?

Mindenképpen ki kell egészíteni a hiányzó városneveket, azaz előállítani a javított táblázatot:

Javított kategóriák

A feladat hagyományos módszerekkel (másolgatás) meglehetősen reménytelennek tűnhet egy olyan táblázatban, ahol mondjuk több tíz vagy száz város van.

A trükk

Ha ki tudnánk jelölni az összes üres cellát, majd egyszerre feltölteni mindegyiket a felette lévő adattal, az megoldaná a problémát.

A Videóból kiderül, hogyan is kell ezt csinálni.

  • Kategóriák gyors pótlása

Tovább...

Struktúrált hivatkozás adattáblák használata esetén

A cikk megértéséhez tisztában kell lenni a TÁBLÁZAT fogalmával az Excel-ben. Erről részletesen egy korábbi cikkben lehet olvasni: Táblázatok az Excelben

A táblázatok használatának rengeteg előnye van. Ezek közül az egyik, hogy ha új sorokat vagy oszlopokat fűzünk hozzá, automatikusan kiterjeszti a táblázatot. Emiatt Dinamikus névtartományként is kiválóan használható.

Tartományi hivatkozás vs. Struktúrált hivatkozás

A legegyszerűbben ezt egy példán lehet bemutatni. Az alábbi tartomány táblázattá lett alakítva. A táblázat neve: ‘Forgalom

minta-adatok

Hogyan lehetne meghivatkozni az ID oszlop összes adatát?

Tartományi hivatkozással: =$A$2:$A$10

Struktúrált hivatkozással: =Forgalom[ID]

Ugye mennyivel olvashatóbb? Ráadásul nem kell foglalkozni azzal, hogy hány sora van a táblázatnak, mert a fenti hivatkozás mindig a teljes oszlopra fog vonatkozni.

Tehát a struktúrált hivatkozás azt jelenti, hogy a táblázat részeire nevekkel és nem címekkel hivatkozunk.

Minősített vs. nem minősített hivatkozás

Ez csupán annyit jelent, hogy ha a hivatkozás minősített, akkor tartalmazza a táblázat nevét is. Ekkor a képlet nem feltétlenül abban a táblázatban van, amire hivatkozunk, vagy egy táblázatból hivatkozunk egy másik táblázat valamely részére. nyilván ilyenkor meg kell mondani azt, hogy melyik táblázatról van szó.

Pl.: A fenti minta szerinti munkalap H1-es cellájába (ami ugye kívül esik a táblázaton) ki szeretném számolni, hogy hány terméknév van a D oszlopban:

=COUNTA(Forgalom[Termék])

Ha a hivatkozás az aktuális táblázatban van, pl. egy számított oszlop, ami másik, ugyanabban a táblázatban lévő oszlopok adatait használja, akkor a hivatkozáshoz elég az oszlop neve. Ez lesz a nem minősített hivatkozás.

Pl.: A ‘mennyiség’ és az ‘egységár’ oszlopokból szeretnénk számítani az ‘Érték’ oszlopot, közvetlenül a ‘G’ oszlopba:

=[mennyiseg]*[egysegar]

Ezt a G oszlop bármely cellájába beírva, az egész oszlopot kitölti a megfelelő eredménnyel.

Struktúrált hivatkozások bevitele (Bővebben a videóban)

  • Egérrel kattintgatva a megfelelő helyeken, vagy
  • Billentyűzetről gépelve, amihez azért jelentős támogatást kapunk. Vannak olyan hivatkozások, amelyeket csak billentyűzettel lehet megfelelően bevinni.

Speciális hivatkozások

A következő példákban a táblázat neve: ‘Forgalom

Hivatkozott rész Angol Excel Magyar Excel
A teljes táblázat az oszlopfejlécekkel, adatokkal és
összesítésekkel (ha van) együtt.
Forgalom[#All] Forgalom[#Mind]
Csak az adatok fejléc nélkül Forgalom[#Data] Forgalom[#Adatok]
Csak a táblázat fejlécsora Forgalom[Header] Forgalom[#Fejlécek]
Csak az ‘Összeg’ oszlop fejléccel együtt Forgalom[[#All],[Összeg]] Forgalom[[#Mind],[Összeg]]
Több, összefüggő oszlop =Forgalom[[Termék]:[mennyiseg]] =Forgalom[[Termék]:[mennyiseg]]

Ha a hivatkozásban csak a táblázat nevét használjuk, az megfelel a [#Data] használatának.

tehát az =Forgalom ugyanaz, mint az =Forgalom[#Data]

Hivatkozás az aktuális sorban

Ez Excel 2007 esetén a [#This Row] magyar verzióban [#Ez a sor] jelölővel, Excel 2010-től pedig a @ jellel történik.

Ezt a jelölőt az Én tapasztalataim szerint nem kell használni, attól még egy számított mezőnél felfogja, hogy az aktuális sorban kell dolgoznia, de vannak esetek, amikor ez lényeges lesz, például gördülő összeg számításakor, ha ilyen hivatkozást szeretnénk használni.

Aktuális sorban egy adott
oszlop cellája
Angol Excel Magyar Excel
Excel 2007 =Forgalom[[#This Row];[mennyiseg]] =Forgalom[[#Ez a sor];[mennyiseg]]
Excel 2010-től =[@mennyiseg] =[@mennyiseg]

Figyelem! Visszafelé nem kompatibilis! Az Excel 2007 nem fogja érteni a @ jelet!

Táblázat visszaalakítása tartománnyá. Mi lesz a hivatkozásokkal?

A struktúrált hivatkozások átalakulnak tartományi hivatkozássá. Ha a tartományt újra táblázattá alakítjuk, akkor ezt már nem követi vissza.

A kapcsolódó videóban mindez bővebben, néhány további érdekességgel, beállítási lehetőséggel megtekinthető.

Letölthető munkafüzet a gyakorláshoz: strukturalt_hivatkozas_nyers

  • Struktúrált hivatkozások alapjai

Tovább...

Az Excel alap sablonjának megváltoztatása

Milyen jó lenne, ha minden új dokumentum nyitásakor (fehér lapocska) egy olyan üres munkafüzet nyílna meg, ami már tartalmaz néhány alap beállítást, formátumot, cellastílust, stb…

Sőt az sem lenne rossz, ha új munkalapot nyitunk, az szintén tartalmazhatna néhány beállítást, pl. élőfej-élőláb beállítást, oszlopszélességeket, stb…

Többször kérdezték már tőlem pl. azt, hogy lehetne-e alap beállításként a celláknak 2 tizedesjegy formátumot beállítani az általános (general) helyett?

Hangsúlyozom, hogy nem egy szokásos sablonról beszélünk, amit *.xlt vagy *.xltx típusként mentünk a sablonjaink közé, hanem itt most az alapértelmezett sablonról beszélünk.

Készíthetünk alap munkafüzet sablont és alap munkalap sablont is. Utóbbit fogja használni az Excel új munkalap beszúrásakor.

Minden a megfelelő helyen és a sablonfájl nevén múlik

A hely, ahová menteni kell a sablonfájlokat

XP oprendszer esetén

Minden felhasználónak:

C:\Program Files\Microsoft Office\<OfficeXX>\XLSTART

<OfficeXX> lehetséges értékei

Office12: Office 2003
Office14: Office 2007
Office15: Office 2013

Csak egy adott felhasználónak, pl. saját magunknak:

C:\Documents and Settings\<felhasználónév>\Application Data\Microsoft\Excel\XLStart

Vista oprendszertől

Minden felhasználónak ugyanaz, mint az előbb

Csak egy adott felhasználónak, pl. saját magunknak:

c:\Users\<felhasználónév>\AppData\Roaming\Microsoft\Excel\Xlstart\

Fájlnevek

Angol verzió esetén

Munkafüzet sablon: Excel 2003-ig Book.xlt, Excel 2007-től Book.xltx

Munkalap sablon: Excel 2003-ig Sheet.xlt, Excel 2007-től Sheet.xltx

Magyar verzó esetén

Munkafüzet sablon: Excel 2003-ig Munkafüzet.xlt, Excel 2007-től Munkafüzet.xltx

Munkalap sablon: Excel 2003-ig Munkalap.xlt, Excel 2007-től Munkalap.xltx

A munkafüzet sablonban beállíthatjuk, hogy hány munkalappal induljon (Célszerű eggyel), megadhatjuk a szükséges cellastílusokat,

A munkalap sablon nem tartalmazhat egynél több munkalapot. Ezen az egy munkalapon beállíthatjuk a szükséges formátumokat,oldalbeállításokat, és minden új munkalapot ezen sablon alapján fog beilleszteni a munkafüzetekbe.

Nézzük mindezt működés közben

  • Az alap sablon módosítása

Tovább...

Táblázat rendezése oszlopok alapján

A táblázatok ugyebár sorokból és oszlopokból állnak. Gyakori művelet, amikor a táblázat sorait egy vagy akár több oszlop alapján sorba rendezzük. Például név szerint vagy érték szerint növekvő vagy csökkenő sorba.

Az erre szolgáló gombokat is mindenki ismeri.

rendezes

Igen ám, de mi van akkor, ha a táblázat oszlopait szeretnénk rendezni valamelyik sorban lévő értékek alapján? A következő példában a nevekhez tartozó oszlopokat szeretnénk névsor szerint rendezni úgy, hogy a napok a helyükön maradjanak.

rendezes_elott

Rendezés előtt

rendezes utan

rendezés után

Megoldás

A rendezés előtt be kell állítani, hogy nem oszlop szerint (fentről lefelé) hanem sorok szerint (balról jobbra) szeretnénk rendezni. Ezt a rendezés párbeszédablakban lévő „Options…” (Beállítások) gomb mögött tudjuk megtenni.

  • Data -> Sort -> Options -> Left to Right
  • Adatok ->Rendezés ->Beállítások ->Balról jobbra

Oszlopok rendezése

Ezután jelöljük ki a táblázatot az első oszlop nélkül, hiszen a hét napjait ott szeretnénk hagyni.

Most jön a rendezés végrehajtása. (Sort / Rendezés gomb)

rendezes_parbeszed

A rendezés beállítása sor alapján

Ezt az Excel korábbi verzióiban is meg lehetett csinálni. A rendezés párbeszéd bal alsó sarkában ott van az ‘Options…’ gomb

Mindez működés közben

  • Oszlopok rendezése sorok szerint

Tovább...

Dátumból negyedév számítás – hagyományos és érdekes megoldás is!

Feltételezve, hogy a vizsgált év január 1 és decmber 31 között tart, az adott dátumhoz kapcsolódó negyedévet a következő képletekkel lehet számítani:

Hagyományos módszer

A Hónap (MONTH)  függvénnyel kivesszük a dátumból a hónapot,ehhez kettőt hozzáadunk, majd az így kapott eredményt hárommal osztjuk, és képezzük az eredmény egész részét.

Feltételezve, hogy az átalakítandó dátum az ‘A2’ cellában van, abból így számolhatunk negyedévet:

=INT((MONTH(A2)+2)/3)

Érdekes módszer

A Választ (CHOOSE) függvényről már egy másik anyagban említést tettem. Ebben az esetben is tökéletesen használható. Ha az adott dátum (A2) hónap értéke 1 vagy 2 vagy 3, akkor 1. negyedév, ha 4, 5, vagy 6, akkor második negyedév, stb. Tulajdonképpen pontosan úgy működik, mint ahogyan mi fejben számítjuk a negyedévet.

CHOOSE(MONTH(A2),1,1,1,2,2,2,3,3,3,4,4,4)

A választ fv. első paraméterében kiszámolja az ‘A2’-ben lévő dátum hónap értékét, majd az ezt követő argumentum listájából az annyiadikat választja.

Lássuk működés közben:

  • Negyedév számítása a VÁLASZT függvénnyel

Tovább...

Oszlopok sorrendjének változtatása villámgyorsan – szűréssel!?

Íme egy újabb gyöngyszem.  Július legvégén volt egy Excel VBA kurzusom, ahol arra szoktam buzdítani a résztvevőket, hogy bátran hozzanak saját problémákat, és ha belefér, megoldjuk őket, vagy legalább hozok rá elvi vagy gyakorlati megoldást a tanfolyamon. Milu azzal állt elő, hogy rendszeresen kap egy bizonyos riportot, ami mindig ugyanazokat az oszlopokat tartalmazza, de gyakran eltérő oszlop sorrendben. Mivel az lenne a feladat, hogy a kapott riportokat egy eredményfájlba gyűjtse, aminek az oszlopsorrendje adott,a másolás előtt  az aktuálisan kapott riportot a gyűjtőfájl oszlopsorrendjéhez kell igazítani. Mivel ismétlődő a feladat, jó lenne lemakrózni, hogy automatikusan futhasson. Kell tehát találni egy olyan megoldást, ami függetlenül az aktuális oszlopsorrendtől, mindig egy előre rögzített sorrend alapján elkészít egy másolatot, majd azt a gyűjtőfájl végére fűzi.

Minta oszlopsorrend

Minta táblázat

Hibas-sorrend

Hibás-sorrend

Ebben az anyagban kiemeltem az oszlopsorrend változtatására a lehetséges módszereket.

Sorrend változtatás vontatással vagy vágólappal

  • Kivágás -> Kivágott cellák beszúrása (Cut ->Paste Cut cells) vagy
  • Shift+vontatás

Probléma ha makrózni akarjuk: Nem tudjuk előre azt, hogy mely oszlopokat és hová kell tenni a javítás során.

Módosítás az oszlopok rendezésével

Mivel az Excel a 2007-es verziótól képes valamely sor alapján rendezni az oszlopokat, megoldás lehet, ha a helyes sorrendet az aktuális oszlopnevek fölé képezzük (kézzel vagy képlettel), majd a kapott számok alapján átrendezzük az oszlopokat.

oszlop-sorszamok

Helyes oszlop-sorszámok a táblázat tetején

  • Data -> Sort -> Options -> Left to Right
  • Adatok ->Rendezés ->Beállítások ->Balról jobbra
Oszlopok rendezése

Oszlopok rendezése

Sor-szerinti-rendezes

Sor-szerinti-rendezes

A helyes oszlop sorszámokat kézzel vagy a Hol.Van (Match) függvénnyel állíthatjuk elő. A Videóban megmutatom ezt a megoldást is.

Probléma ha makrózni akarjuk: Ha az oszlopnevek nem egyeznek meg az aktuális riportban a rögzített oszlopnevekkel. Ebben az esetben a Match függvény nem fogja megtalálni a nevet, és a helyes sorszám helyett hibát ad vissza.

Módosítás az irányított szűrő (Advanced Filter) segítségével

Ezt a megoldást Márti gyűjtőmunkájának köszönhetjük. Ebben az esetben az aktuális riport táblázat mellé vagy alá, akár másik munkalapra feltesszük a helyes sorrendű fejlécet, majd alkalmazzuk a speciális vagy irányított szűrőt.

  1. Kijelöljük vagy aktiváljuk a Riport táblázatot
  2. Elindítjuk az irányított szűrőt
    Iranyitott-szuro
  1. Beállítjuk az alábbiak szerint, és az eredmény a jó fejléc szerinti oszlopsorrend lesz
    Iranyitott szuro beallítas
Irányitott szűrő beállítás

Ha nem adunk meg minden oszlopot, akkor csak a megadottakat fogja átmásolni!

Probléma ha makrózni akarjuk: Ha az aktuális riportban lévő oszlopnevek bármelyike nem egyezik meg a rögzített oszlopnévvel. Ebben az esetben nem fog működni.

Letölthető minta dokumentum: oszlop_sorrend_modositas.xlsx

Mindez működés közben

  • Oszlopsorrend változtatása

Tovább...

Dátumhoz kapcsolódó nap megjelenítése

Ha egy dátumhoz szeretnénk megmutatni az adott nap nevét is, akkor a következőket lehet tenni:

Triviális, de összetettebb megoldás

A dátumból képezzük a megfelelő függvénnyel a nap sorszámát, majd a kapott sorszám segítségével kikeressük egy segéd táblából a megfelelő napot.

Hét.Napja (WeekDay) függvény

Megadja, hogy az adott dátum a hét hányadik napjára esik

=Hét.Napja(dátum;2)

A második argumentum azt szabályozza, hogy a függvény melyik napot tekintse a hét első napjának. Ha a  hétfőt szeretnénk (mint általában), akkor ez legyen mindig 2.

A következő képlet megadja, hogy az aktuális nap a hét hányadik napjára esik.

=weekday(today();2)
=Hét.Napja(Ma();2)

Hogyan lesz ebből meg a nap neve?

Erre segédtáblákat használhatunk, amik lehetnek egy cellatartományban vagy akár elnevezett tömbkonstansokban, és ezekből az INDEX vagy az FKERES (Vlookup)  függvényekel kereshetjük meg a nap nevét.

=INDEX(napok_neve_tartomany;het.napja(datum;2))

A nap beállítása cellaformázással

Ha ‘A1’-ben van a dátum, akkor ‘A2’-be írjuk a következő képletet:

=SZÖVEG(A1;"nnnn")
=TEXT(A1;"nnnn")

 Az „nnnn” kóddal azt kérjük, hogy írja ki a nap hosszú nevét. Angol rendszerben természetesen ennek „dddd”-nek kell lennie.

Egyéb érdekességek

Ha nem tudjuk, hogy mi az aktuális nyelvi verzió napot jelentő formázó karaktere, akkor a Visual Basic felületen a parancs ablakban futtassuk az alábbi kódot:

Application.International(xlDayCode)

Ha az ország kódot változtatgatjuk, akkor a kódnak megfelelően írja ki a nap nevét a következő módosítással:

=SZÖVEG(A1;"[$-040e]nnnn")
=TEXT(A1;"[$-040e]nnnn")

A szögletes zárójelben a dollár után az adott ország kódja van hexa formátumban.
A 040e ( decimálisan 1038 ) magyarország kódja.

Országkódok

http://msdn.microsoft.com/en-US/goglobal/bb964664.aspx

Mind ez működés közben látható a videóban.

Letölthető munkafüzet: Nap_nevenek_megjelenitese

  • Dátumhoz tartozó nap neve

Tovább...

Az aktív cella táblázatban van-e, és melyikben? – VBA

A makrófejlesztés egyik fontos része a „Bolond állóság” (FoolProof) biztosítása. Emiatt egy igényesebb VBA kód hibaellenőrzéseket is tartalmaz.

Az egyik ilyen eset lehet, hogy ellenőrizzük, az aktív cella egy korábban már táblázattá (Lista) alakított tartományban van-e?

Íme egy erre szolgáló függvény

[vb]
Function in_table() As String
Dim tname As String
tname = ""
On Error Resume Next
tname = ActiveCell.ListObject.Name
in_table = tname
End Function
[/vb]

Úgy működik, hogy ha az aktív cella benne áll egy táblázatban (listában), akkor létezik a .name tulajdonsága. Különben hibát ad, amit kezelünk.

A függvény a táblázat nevét, vagy üres stringet ad vissza.

Tovább...

Top n érték listázása vagy összegzése tömbképlettel

Ha szükségünk lenne egy olyan képletre, ami egy tartományból listázza a valahány (három, négy, öt, stb…)  legnagyobb értéket, akkor íme a megoldás. Mivel a képletnek nem csak egy eredménye van, hanem több, a feladatot tömbképlettel tudjuk megoldani.

A megoldáshoz, illetve a leírás megértéséhez ismerni kell a LARGE (NAGY) függvényt, ami egy tartományból visszaadja a valahányadik legnagyobbat. A következő függvény pl. az A1:A20 tartományból visszaadja a második legnagyobbat.

=LARGE(A1:A20;2)

A három legnagyobb érték listázása

Tehát szükségünk van az első, a második és a harmadik legnagyobb értékre az A2:A10 tartományból. A Large függvénynek két tömböt kell megadni. Az egyik az adatokat tartalmazó tartomány, a másik pedig azoknak a számoknak a felsorolása tömbkonstansként vagy tartományi hivatkozásként, amennyiedik értékeket keressük. Utóbbiakat ezután hívjuk index számoknak.

Adatok tartománya: A2-A10

Index számok: E2:E4

  1. Jelöljünk ki három üres cellát
  2. Képlet
=LARGE(A2:A10;E2:E4)

Top-n-keplet

Mivel tömbképletről van szó, a bevitelt a Ctrl+Shift+Enter kombinációval kell zárni.

A három legnagyobb érték bekerült a három kijelölt cellába.

Ha az adatok módosulnak, és ez érinti a három legnagyobbat, akkor azok is módosulni fognak.

Az index számokat tömbkonstanssal is meg lehet adni.

Az anyaghoz tartozó videóban bemutatom a képlet létrehozását mindkét módszerrel.

  • Top n legnagyobb érték kiválogatása képlettel

Tovább...