Telefonszámunk: 1-472-0679

Tömbképletek

Adott érték n-dik előfordulásának keresése egy oszlopban

Találkoztam néhányszor azzal az igénnyel, hogy egy tartományban egy adott értéknek ne csak az első, hanem a második, harmadik, n-dik előfordulást is meg lehessen keresni.

Az Excelnek erre nincs külön fügvénye, és a VLOOKUP (FKERES), illetve a MATCH (HOL.VAN) függvények csak az első előfordulást tudják megkeresni.

Vannak az Interneten segédoszlopot használó, megkerülő megoldások, de egyszer csak ráakadtam egy régebbi bejegyzésre, aminek a tanulmányozása után arra jutottam, hogy ez lesz a helyes megoldás.

Az eredeti cikk egy ősrégi Microsoft tudásbázis bejegyzés, Excel 4.0 és Excel 97 verziókra vonatkoztatva.

Nézzük a megoldást

Az alábbi ábrán látjuk a mintaként használt táblázatot. Tehát a feladat az lenne, hogy az „alma” szó második vagy harmadik előfordulását is meg tudjuk találni, és esetleg kivenni mellőle a hozzá tartozó értéket ugyanabból a sorból.

n-dik-elofordulas-alaptabla

Az ötlet azon alapszik, hogy ha tudnánk képezni egy listát az „alma” szót tartalmazó sorokról (1;4;6), akkor ezek közül a SMALL (KICSI) függvénnyel kiválaszthatnánk az n-dik legkisebbet, ami megadná az n-dik előfordulás munkalap-sorszámát. Jelen példában, ha az {1;4;6} tömb 2-dik legkisebb elemét keresem, akkor egy cellába beírhatom a következő képletet:

=SMALL({1;4;6};2)

Eredményként a 4-et fogom kapni.

Hogy lehet az „almás” sorok tömbjét előállítani?

Természetesen tömbképlettel. Végignézzük az „A1:A6” tartományt, és ha bármelyik eleme egyenlő az  „alma” szóval, akkor kivesszük az aktuális sor számát, különben egy üres sztringet.

Jelöljünk ki 6 egymás alatti cellát (mert 6 elemből áll a példa táblázat), írjuk be a következő képletet, és a végén nyomjuk meg a Ctrl+Shift+ENTER kombinációt!

=IF((A1:A6)<>"alma";"";ROW(A1:A6))

A cellákban a képlet kapcsos zárójelek közé került: {=IF((A1:A6)<>”alma”;””;ROW(A1:A6))} , és a kijelölt cellákban ez lett az eredmény:

sorok-tombje

Tehát megkaptuk a 1;4;6 listát, igaz, hogy közben vannak üres cellák is, de az nem baj. Már csak az van hátra, hogy ebből a listából kiválasszuk a SMALL (KICSI) függvénnyel mondjuk a második legkisebbet, azaz az „alma” szó második előfordulásának  munkalap-sorszámát (4)

=SMALL(IF((A1:A6)<>"alma";"";ROW(A1:A6));2)

A végén látható, hogy a második legkisebbet keressük. Ne felejtsük el ezt is a Ctrl+Shift+Enter-el lezárni.

Amennyiben a táblázat a munkalap első sorában kezdődött, akkor a megtalált munkalap sorszám egyenlő lesz az adott tartományban elfoglalt sorszámmal.

És a mellette levő érték?

Ha valójában az n-dik előfordulás melletti értéket keressük, akkor a sorszám ismeretében az INDEX függvénnyel célt érünk, azaz az egészet beágyazhatjuk egy INDEX függvénybe, ami a „B” oszlopból kiveszi a megkapott sorszámú elemet. Ezt a képletet is természetesen a tömbképleteket megillető Ctrl+Shift+Enter-el kell lezárni.

=INDEX(B1:B6;SMALL(IF((A1:A7)<>"alma";"";ROW(A1:A7));2))

n-dik-elofordulas-eredmeny

És mi van akkor, ha a táblázat nem az első sorban kezdődik?

Akkor egy kicsit matekozni kell a Sorokkal, de azért megoldható. Ha kíváncsi vagy rá, nézd meg a Videó anyagot is!

Ertek-n-dik-elofordulasa

  • Érték n-dik előfordulása

Tovább...

Intervallum tömbök

Ebben az anyagban leírtak megértéséhez hasznos lehet előbb ezt megnézni:

excel-tombok-tombkonstansok

Hogyan válaszolnánk meg Excel segítségével a következő kérdéseket:

  • Két egész szám között hány 3-al osztható szám van?
  • Két dátum között hány hétfő van?
  • Két dátum között hány dátum esik hétvégére

Megoldások

Első

Nézzük az első feladatot. Hagyományos módon ezt úgy csinálnánk, hogy képezzük egy oszlopba a növekvő értékeket, és mellette egy segédoszlopban logikai értékként megadnánk az oszthatóságot, majd feltételes összegzéssel megkapjuk az eredményt. Az ábrán látható, hogy a „B” oszlopban a hárommal való oszthatóságot vizsgáljuk.

oszthatosag-logikai-vizsgalatat

Ezután nincs több dolgunk, mint egy eredménycellába megszámolni a „B” oszlopban lévő TRUE értékek számát.

Mondjuk a „D2”-be írjuk be a képletet:

=COUNTIF(B2:B11;TRUE)

Második

A megoldást egyetlen képlettel is megadhatjuk, ami az egész tartományban vizsgálja az oszthatóságot, a visszakapott TRUE/FALSE értékeket 1-re és 0-ra alakítja, és összeadja az eredményt. Értelemszerűen csak ott lesz 1-es, ahol az érték osztható, és az 1-esek összegzése megadja, hogy hány szám van a tartományban, ami osztható 3-al.

=SUMPRODUCT(--(MOD(A2:A11;3)=0))

Tól-Ig tömbök képzése

Próbáljuk ki a következőket:

Egy cellába írjuk be a következő képletet, de mielőtt lezárnánk, nyomjuk meg az F9 billentyűt :

=SOR(INDIREKT("34:55"))

angol verzióban

=ROW(INDIRECT("34:55"))

A tartalom átváltozik erre

={34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55}

Tehát ez az összefüggés létrehozza a memóriában a kezdő és végérték közötti számok növekvő halmazát. (Ctrl+Z-vel vagy ESC-el lehet visszatérni.)

Ha a kezdő és a végérték nem konstans, akkor felvehetjük őket egy-egy cellába, és a képlet így alakul

=SOR(INDIREKT(A1 &":" & A2))

Látható, hogy az Indirekt függvénynek egy szövegre (stringre) van szüksége, ezt összefűzéssel állítjuk elő, belecsempészve a kettőspontot, mint a kezdő és a végérték elválasztójelét.

Ugyanez dátumokkal

A dátumokat ugyebár az Excel sorszámként kezeli. Egy egy szomszédos nap között pont egy egész különbség van. Két dátum közötti tömböt az előzőekhez hasonlóan képezhetjük, azaz a kezdő és végdátumot beírjuk két cellába, és az előző képletet beírva, majd F9-et nyomva ezt láthatjuk:

datumszamok-tombje

Tehát a 2013 január 1 és 5 közötti dátumszámok növekvő értékeit.

Mire jó ez az egész?

Ha visszatérünk a fenti feladatokhoz, akkor abban az esetben, ha nem akarjuk vagy nem lehetséges képezni a tömb elemeit külön a munkalapon, akkor ezt a megoldást alkalmazhatjuk a képletekben.

Hány hárommal osztható szám van két szám között (A1 és A2):

=SUMPRODUCT(--(MOD(ROW(INDIRECT(A1&":"&A2));3)=0))

Két dátum között hány hétfő van?

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT($A$1 & ":" & $A$2));2)=1))

A WEEKDAY függvény magyar verzióban a HÉT.NAPJA. Azt mondja meg, hogy egy dátum a hét hányadik napjára esik. A képlet végén 1-el hasonlítjuk össze, mert a Hétfő a hét első napja.

Két dátum között hány dátum esik hétvégére

=SUMPRODUCT((WEEKDAY(ROW(INDIRECT($A$18&":"&$A$2));2)=6)+(WEEKDAY(ROW(INDIRECT($A$1&":"&$A$2));2)=7))

A hatodik nap a szombat, a hetedik nap pedig a vasárnap. A kettő közötti plusz jel a logikai VAGY műveletet jelenti.

Letölthető munkafüzet, Video

Ertekek-kozotti-szamolas-row-indirect

  • Növekvő számhalmazok

Tovább...

Excel tömbök, tömbkonstansok

Tömbök fogalma

A tömbök az Excel-ben értékek sorozatát jelentik. Általános felhasználás során nem igazán szoktunk foglalkozni a tömbökkel, hiszen azokat legtöbbször egyszerűen kijelöléssel határozzuk meg.

Ha például egy egyszerű összesítést (SUM /SZUM) alkalmazunk, akkor a fügvényvarázsló argumentum mutatja a kijelölt tartományt, mint tömböt.

Tömb a függvény varázslóban

Egy dimenziós tömbök

Az egy dimenziós tömbök egymás melletti vagy egymás alatti adatsorokat tartalmaznak. Próbáljuk meg a következőt!

  • Egy cellatartományba egymás mellé balról jobbra írjunk be értékeket. (Pl.: B1:K1)
    tomb-tartomany
  • Egy üres cellába írjunk egy egyenlőség jelet, majd jelöljük ki a B1:K1 tartományt (=B1:K1)
  • Nyomjuk meg az F9 billentyűt
  • Az Excel kibontja a kijelölést mint egy dimenziós tömböt

={1.2.3.4.5.6.7.8.9.10}

Próbáljuk ki ugyanezt egymás alatti értékekkel!

={1;2;3;4;5;6;7;8;9;10}

A vízszintes tömbnél az értékeket ponttal („.”) elválasztva látjuk, (oszlop szeparátor), a függőleges tömbnél pedig pontosvesszővel vannak elválasztva. (Sor szeparátor)

Sor és oszlop szeparátorok

A sorokat, illetve az oszlopokat elválasztó karakterek a vezérlő pult nemzetközi beállításaitól függenek. Emiatt a fenti példa különböző nyelvi beállítások esetén más elválasztó karaktereket eredményezhet.

Az elválasztó karakterek ellenőrzése

  • Lépjünk át a VBE felületre (ALT+F11)
  • Hozzuk elő a parancs ablakot (Ctrl+G)
  • Írjuk be a következő parancsokat
    ? Application.International(xlColumnSeparator)
    ? Application.International(xlRowSeparator)

Bővebben az Excel nemzetközi beállításainak vizsgálatáról egy korábbi oktatanyagban lehet olvasni:
Az Excel nemzetközi beállításainak lekérdezése

Két dimenziós tömbök

A két dimenziós tömbök valójában táblázatok, azaz több sort is tartalmaznak.

Töltsünk fel egy tartományt értékekkel, majd a fenti módszerrel jelöljük ki, majd nyomjuk meg az F9-et

ket-dimenzios-tomb

={"A".10;"B".20;"C".30}

Az látható, hogy a sorokat a pontosvessző, az oszlopokat pont jelzi.

Saját tömb konstansok

A képletekben használhatunk a fentiek szerinti tömbkonstansokat. Ezt legegyszerűbben úgy tehetjük, hogy a névkezelőben nevet adunk a tömbkonstansoknak.

  • Egy tartományba írjuk be a tömb elemeit (egy vagy két dimenzió)
  • Egy üres cellába a fentiek szerint bontsuk ki a tömböt, majd másoljuk ki (Ctrl+C)
  • Nyissuk meg a névkezelőt (Ctrl+F3), Hozzunk létre egy új nevet, és hivatkozásként illesszük be a tömböt
    Tombkonstans-nev
  • A forrástartományt kitörölhetjük

Használati példák

A tömbkonstansokat használhatjuk kisebb keresési tartományként azokban az esetekben, ha nem szeretnénk a forrás tartományokat a munkafüzet celláiban tárolni.

Az elnevezett tömbökben lehet bármelyik kereső függvénnyel keresni, és az összes, tartományokon értelmezhető függvényt használhatjuk.

Konkrét példákat a kapcsolódó videóban lehet majd látni.

Tömbök a képletekben

Képletek belsejében gyakran találkozhatunk olyan részekkel, amelyek tömböt eredményeznek, és ezt a tömböt dolgozza fel a képlet külső része.

Példa: mennyi 4 betűs vagy annál rövidebb szöveg van egy oszlopban? (A szavak az M1:M7 tartományban vannak)

=SZORZATÖSSZEG(--(HOSSZ(M1:M7)<=4))

A képlet működését a Videóban mutatjuk be.

Video

  • Tömbkonstansok az Excelben

Tovább...

Feltétel szerinti szélső érték – MAXIF vagy MINIF

Az Excel újabb verzióiban megjelentek a feltétel szerinti átlagszámítást végző függvények, de feltétel szerinti maximum vagy minimum számításhoz már ügyeskedni kell, mert direkt függvény még nem áll rendelkezésre.

A neten több megoldást is lehet találni a problémára. Ezek közül a tesztelések során, az itt ismertetésre kerülő az, amelyik minden esetben helyesen működik, még akkor is, ha a kiválasztandó számok pl. negatív értékek.

Feladatok

  • Képlettel határozzuk meg az alábbi táblázatból a legnagyobb értéket az „A” kategóriában!
  • Az érték oszlopban melyik a legnagyobb vagy legkisebb páros szám?
  • stb…

Megoldás segédoszloppal, két lépésben

Elsőként nézzük meg azt a képletet, amellyel megállapíthatjuk a legnagyobb értéket az „A” típusok közül.

Ezt papíron, vagy szemmel úgy csinálnánk, hogy kikeressük az összes „A” típusú sort, és a hozzájuk tartozó értékek közül kiválogatjuk a legnagyobbat. A fenti táblázattal könnyű a helyzetünk, mert sorba van rendezve típus szerint, és ráadásul csak 8 sora van.

A „C” oszlopt használva segéd oszlopként, a következő képletet írjuk a C2 cellába, majd lehúzhatjuk a teljes oszlopra:

=IF(A2="A";B2)

Eszerint, ha az „A” oszlopban „A” érték van, akkor a „C” oszlopba írja be a „B” oszlopból az értéket. Különben ágat nem adunk meg a HA (IF) függvénynek, ekkor automatikusan  a hamis ág FALSE érték lesz.

Ezek után nincs más dolgunk, mint egy külön cellába lekérni a „C” oszlop maximumát vagy minimumát.

Megoldás tömbképlettel

Ez a megoldás azt használja ki, hogy az Excel képes tömbökkel is dolgozni. Próbáljuk meg, hogy a fenti táblázat alapján egy üres cellába beírjuk ezt:

=A2:A9="A"

majd ENTER helyett nyomjuk meg az F9 billentyűt!

Ezt fogjuk látni:

Azaz a tartomány minden elemére kiértékelte az egyenlőséget, és egy logikai tömböt adott vissza az eredménnyel.

Ctrl-Z-vel visszatérhetünk a képlethez, és egészítsük ki a következőre:

=IF(A2:A9="A";B2:B9)

A HA (IF) függvény megvizsgálja az egyenlőséget az „A” oszlop elemein, és ha egyezőséget talál, akkor visszaadja a „B” oszlop megfelelő elemét, különben pedig FALSE értéket. Próbáljuk megint az F9-es trükköt:

Nincs más hátra, mint ennek a tömbnek venni a MAX vagy a MIN elemét.

=MAX(IF(A2:A9="A";B2:B9))

A képletet tömbképletként kell bevinni, azaz ENTER helyett a Ctrl+Shift+ENTER-rel kell lezárni!

{=MAX(IF(A2:A9=”A”;B2:B9))}

Letölthető minta munkafüzet

MAX-IF.xlsx

Demo VIDEO

Ami működés közben mutatja a két megoldást, és bónuszként tartalmazza azt is, hogy hogyan tudjuk kiválasztani egy tartományból a legnagyobb vagy legkisebb páros számot.

  • Feltételes Maximum vagy Minimum kiválasztás képlet

Tovább...

Excel – VAGY feltétel szerinti megszámlálás

A kezdetekben a feltétel szerinti megszámlálásra adták nekünk a COUNTIF (Darabteli) függvényt, ami csak egy feltétel szerinti megszámlálást tud.

Majd a több feltétel szerinti megszámlálásra adták nekünk az Excel 2007-től a COUNTIFS (Darabhatöbb) függvényt, de ez csak a több feltétel egyidejű teljesülése esetén jó (ÉS kapcsolat)

Mi van akkor, ha VAGY feltételek szerint szeretnénk megszámlálni?

Kapcsolódó anyagok

  • Több feltétel szerinti megszámlálás VAGY kapcsolattal

Tovább...

Számított feltétel szerinti megszámlálás egy tartományban

A feltétel szerinti megszámlálásra az Excel kínál két függvényt:

  • Darabteli (Countif)
  • Darabhatöbb (Countifs)

Ezekkel a függvényekkel az a probléma, hogy a megszámlálás feltételeként nem lehet képletet alkalmazni. De mit tegyünk, ha például meg kellene számolnunk  a páros számokat egy tartományban? A páros értékek megszámolásához képlet kell, amivel el tudjuk dönteni egy értékről, hogy páros-e. Erre több megoldás is van, de a legjobb a MARADÉK (MOD) függvény.

De hogy a feltételhez használt képletet hogyan építhetjük bele a megszámlálásba, az már nem olyan egyszerű. A példa alapján egyéb, hasonló probléma is megoldható, pl. az, hogy hány olyan sor van, ahol az egyik oszlopban kisebb vagy nagyobb érték van, mint egy másikban.

Számított feltétel szerinti megszámlálás – VIDEO

http://youtu.be/jZYb3KKV0Zc

Tovább...