reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Excel: Vyhledání posledního výskytu

matio (4)|17.9.2009 11:32
Dobrý den,
potřeboval bych poradit s vytvořením funkce v excelu. Mám tabulku o třech sloupcích.

- V prvním sloupci (A) je datum dne. Data jdou chronologicky za sebou, ale mohou se vyskytnout i několikrát po sobě. Například 3x bude datum 12.3.2009, potom 5x 15.3.2009, 2x 16.3.2009 atd.

- Ve druhém sloupci (B) je čas - hodina toho daného dne, ale tento sloupec mě v této chvíli nezajímá.

- Ve třetím sloupci (C) je údaj "Dveře1" nebo "Dveře2". Tyto údaje se mohou vyskytnout jakkoliv - může být, že jeden den se vyskytnou oba, druhý den jen třeba jeden údaj atp.

Je to tabulka zaznamenávající průchod dveřmi, čas průchodu a které dveře to byly. Tato tabulka se pořád aktualizuje a může mít až 5024 řádků s údaji. Já bych potřeboval, aby se mi v jiné buňce (např. D1) objevilo, že v poslední den záznamu se otevřely dveře1, dveře2 nebo oboje dveře. Nic víc nepotřebuju. Jde mi jen o poslední den a jaké dveře to byly. Jakou funkci bych měl použít? Díky za řešení.
Logout (4018)|17.9.2009 11:40
Jo, tak
pozvyhledat, dnes - vyhledá pozici prvního řádku s dnešním datem
svyhledat, nepřímý.odkaz - vyhledat v oblasti hodnot s dnešním datem (viz fce výše)
pomocí nepřímý.odkaz, jestli byly otevřené dveře1 respektive dveře2

tak a teď už je to dobře

PS: Pokud Ti to takhle nestačí, tak se ještě ozvy :-)
matio (4)|17.9.2009 20:39
[quote=Logout;293437]Jo, tak
pozvyhledat, dnes - vyhledá pozici prvního řádku s dnešním datem
svyhledat, nepřímý.odkaz - vyhledat v oblasti hodnot s dnešním datem (viz fce výše)
pomocí nepřímý.odkaz, jestli byly otevřené dveře1 respektive dveře2

tak a teď už je to dobře

PS: Pokud Ti to takhle nestačí, tak se ještě ozvy :-)[/quote]

Díky moc za rychlou odpověď, ale já jsem úplný excel-začátečník a hlavně samouk a moc mi to nepomohlo. Jedna věc je ta, že se nemusí vždy jednat o dnešní datum - je možné, že poslední průchod dveřmi se uskutečnil např. před třemi dny.
A další věc je ta, že nevím, jak použít uvedené funkce. Tápu nad tím už několik dní a tak nějak jsem si metodou pokus/omyl a pomocí offline nápovědy v excelu zjistil, že bych měl použít fce pozvyhledat a svyhledat, ale na funkci nepřímý.odkaz jsem vůbec nedošel. Každopádně jsem to podle Tvých rad všelijak zkoušel, ale nepochopil jsem ani přesně k čemu Nepřímý.odkaz vlastně slouží a jak tu výslednou celou funkci poskládat. Omlouvám se a pokud bys byl tak hodný a věnoval mi ještě několik chvil, byl bych vděčný...
Logout (4018)|17.9.2009 21:51
Tak jo:
myšlenka: najdu, jestli v poslednim dni se vyskytuje řetězec dveře1, respektive dveře2.
Abych to moh udělat, potřebuju najít oblastm, kde je poslední den, třeba takhle:
- poslední den je MAX(A1:A98).

Já potřebuju najít, odkud mám začít hledat, tzn. první výskyt tohoto dne. Jelikož fce vždycky hledaj poslední výskyt, tak radši budu hledat "předposlední den" MAX(A:A)-1, tzn:

POZVYHLEDAT(MAX(A:A)-1;A:A;1)
- to mi vrátí poslední ignorovaný řádek.

Pak potřebuju nějak vybudovat prohledávanou oblast. Nepřímý odkaz by to uměl asi taky, ještě jednoduší je užít fci posun

POSUN( sloupec C; posuň o počet ignorovaných řádků ; se sloupci nehejbej = 0 ; výška oblasti - viz dále; šířka oblasti = 1)

Výška prohledávaný oblasti má dvě možnosti, buď tam prsotě střelim nějaký číslo (např. denně může bejt max 500 otevření, tak tam hodim pětset, nebo tam můžu dát maximum, co jde, tzn max řádků (65535) - začátek. Tzn todle:

POSUN(C1;POZVYHLEDAT(MAX(A:A)-1;A:A;1);0;65535-POZVYHLEDAT(MAX(A:A)-1;A:A;1);1)

No a v týdletý oblasti dam vyhledat dveře1 nebo 2, a to přesný výskyt:

=SVYHLEDAT("Dveře1";POSUN(C1;POZVYHLEDAT(MAX(A:A)-1;A:A;1);0;65535-POZVYHLEDAT(MAX(A:A)-1;A:A;1);1);1;NEPRAVDA)
=SVYHLEDAT("Dveře1";POSUN(C1;POZVYHLEDAT(MAX(A:A)-1;A:A;1);0;65535-POZVYHLEDAT(MAX(A:A)-1;A:A;1);1);1;NEPRAVDA)

pokud to najde (vrátí ndveře 1 resp. 2), tak byly otevřený, pokud nenajde (#N/A), nebyly.
matio (4)|18.9.2009 17:50
[quote=Logout;293620]Tak jo:
myšlenka: najdu, jestli v poslednim dni se vyskytuje řetězec dveře1, respektive dveře2.
Abych to moh udělat, potřebuju najít oblastm, kde je poslední den, třeba takhle:
- poslední den je MAX(A1:A98).

Já potřebuju najít, odkud mám začít hledat, tzn. první výskyt tohoto dne. Jelikož fce vždycky hledaj poslední výskyt, tak radši budu hledat "předposlední den" MAX(A:A)-1, tzn:

POZVYHLEDAT(MAX(A:A)-1;A:A;1)
- to mi vrátí poslední ignorovaný řádek.

Pak potřebuju nějak vybudovat prohledávanou oblast. Nepřímý odkaz by to uměl asi taky, ještě jednoduší je užít fci posun

POSUN( sloupec C; posuň o počet ignorovaných řádků ; se sloupci nehejbej = 0 ; výška oblasti - viz dále; šířka oblasti = 1)

Výška prohledávaný oblasti má dvě možnosti, buď tam prsotě střelim nějaký číslo (např. denně může bejt max 500 otevření, tak tam hodim pětset, nebo tam můžu dát maximum, co jde, tzn max řádků (65535) - začátek. Tzn todle:

POSUN(C1;POZVYHLEDAT(MAX(A:A)-1;A:A;1);0;65535-POZVYHLEDAT(MAX(A:A)-1;A:A;1);1)

No a v týdletý oblasti dam vyhledat dveře1 nebo 2, a to přesný výskyt:

=SVYHLEDAT("Dveře1";POSUN(C1;POZVYHLEDAT(MAX(A:A)-1;A:A;1);0;65535-POZVYHLEDAT(MAX(A:A)-1;A:A;1);1);1;NEPRAVDA)
=SVYHLEDAT("Dveře1";POSUN(C1;POZVYHLEDAT(MAX(A:A)-1;A:A;1);0;65535-POZVYHLEDAT(MAX(A:A)-1;A:A;1);1);1;NEPRAVDA)

pokud to najde (vrátí ndveře 1 resp. 2), tak byly otevřený, pokud nenajde (#N/A), nebyly.[/quote]

Mockrát děkuju, velice jsi mi pomohl. Dávám děkovné body, protože lépší vysvětlení si neumím představit a je pro mě důležité to zároveň i pochopit. Díky. A ještě bych tě využil, když vidím, že jsi odborník. Myslíš, že by šlo taky udělat aby mi to vypsalo, který poslední den byly otevřeny dveře1 a dveře2? Jakože že třeba naposledy byly dveře1 otevřeny třeba 13.6. a dveře2 17.6.?
matio (4)|22.9.2009 09:44
Ta druhá věc by teda už nešla?
Logout (4018)|22.9.2009 11:27
=MAX(KDYŽ(C1:C65535="Dveře1";A1:A65535;0))
ale musíš to zadat jako array formula (maticovej vzorec) stiskem ctrl+shift+enter


vyber takový řádky z A1:A65535, kde v odpovídajícím poli C1:C65535 je dveře1 a
z nich vyber maximum...