Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 22. 10. 2017 10:19:01

bajtik
Člen
Registrace: 22. 10. 2017
Příspěvků: 24

Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

Dobrý den,

rád bych Vás požádal o radu, s Officem teprve začínám.
Mám na hlavním listě 2 selektory, pro zjednodušení jsem udělal příklad, kdy vyberu v jednom selektoru obchod a do druhého potřebuji načíst odpovídající položky jeho provozoven.

Kromě hlavního listu mám list "obchody" se seznamem obchodů a odpovídajících seznamů provozoven, ty jsou umístěny na samostatných listech ("provozovny_penny", "provozovny_lidl", ...). Jak mám definovat rozsah buněk druhého selektoru? Asi nejblíže jsem se dostal se zápisem VLOOKUP(C2;obchody.A1:B3;2;0)&".A1:A9", ale místo aby načetl seznam položek, vypíše mi text "provozovny_penny.A1:A9" jako jedinou položku seznamu. Můžete mě prosím v tomto směru nějak pošťouchnout?

A dokážete doporučit nějakou dobrou knihu "for dummies", která by mi s těmito věcmi do budoucna pomohla?

Předem díky. Odkaz na příklad: http://www.main.cz/priklad.ods

Editoval bajtik (23. 10. 2017 06:56:18)

Offline

#2 22. 10. 2017 11:46:25

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

Já dnes bohu žel nejsem u stroje kde mám Calc a tak mohu pouze podle představy ve své hlavě odpovědět. Navíc mi není k ničemu ani odkaz. Odpovím pro v nejistotě takto :
     Vzorec VLOOKUP(C2;obchody.A1:B3;2;0)&".A1:A9" vypadá jako neúplná část maticového vzorce. Možná je správný vzorec vyjádřen takto {=VLOOKUP(C2;obchody.A1:B3;2;0)&".A1:A9")}. Usuzuji že aktivuje pole pod tím čemu říkáte selektory, čemuž zde říkáme ovládací prvky seznam, v jednoduché nebo složené verzi spolu s možností zadávat - jinak ComboBox, nebo List). Existuje ještě třetí podobné řešení pomocí validace dat v nabídce DATA. Je to prvek typu seznam (List) který je význačný tím, že nemá rámeček a teprve po kliknutí na buňku vyskočí vedle ouško selekce.


     Předpokládám, že máte výběr dán třetím případem. Obě okénka vedle sebe, nebo pod sebou jsou potřeba spojit logickým AND v sérii Obchod > sortiment (cena ap). Na listech potom zřejmě máte jednotlivé obchody typu supermarket ap. Tedy co list to jiný subjekt.
     První "selektor" načítá list sešitu podle jména a druhý sortiment. To lze alternativně spojit pod jeden jediný list, nebo přidat třetí selektor ap. funkce VlookUp je v překladu co do srozumitelnosti na úrovni V(jako vertical) a Look Up už je zřejmé (Existují ještě funkce LookUP, a HlookUp).


     Matice musí načítat oba zadané parametry a vrátit všechny relevantní položky z celého sloupce byť by byly "napřeskáčku". Protože si nejsem jistý (dnes nemohu ověřit) tak se domnívám že i matice vrátí výběr bez setřídění - tedy vlastně celou kopii sloupce ale vypíše jen validně specifikovaná data. Takže například 5 prázdných řádků + 1 položka + 10 prázdných řádků + 2 položky .... To lze řešit například pomocným listem ze kterého se vrátí položky seřazená za sebou ap.


     Šlo by to řešit maticí (asi) i se setříděním, nebo zcela bez maticového vzorce určitými konstrukcemi, ale maticí je to elegantní mnohem méně pracné nažli ostatní případy.
     Jinou verzí je makro, které by se aktivovalo změnou položky ap. Předpokládáme tedy řešení jen vzorci. Řešení programem by přicházelo v úvahu pokud by se dal předpokládat rozsah výstupu v relaci desítek tisíců buněk.
     Obecných řešení se nabízí docela mnoho a je celkem zbytečné je rozebírat - ale já vím nejméně o 5-ti různých řešení bez maker, nebo částečně makry.


     Takže rozsah druhého selektoru záleží na vlastním uspořádání základních dat - což jste postnul ale já nemohu nahlédnout - tedy dnes. Zítra už ano.
     Jenom tedy naznačím na ukázce vzorce který jste použil :
VLOOKUP(C2 jako první selektor - Obchod nebo zboží?;C3 jako druhý selektor(list dat).A1:B3;2;0)&".A1:A9",


     Ovšem je to jen představa která Vás může nasměrovat. Dnes může někdo jiný doplnit, nebo se k tomu vrátím zítra.

Editoval neutr (22. 10. 2017 11:55:03)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 22. 10. 2017 12:55:48

bajtik
Člen
Registrace: 22. 10. 2017
Příspěvků: 24

Re: Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

Dobrý den, děkuji moc za rychlou odpověď. Bohužel z toho nejsem úplně moudrý, rád počkám do zítřka. Příklad v odkazu jsem ještě předělal, aby lépe odpovídal mojí situaci.

Takže mám na hlavním listě dva prvky s vyskakovacím seznamem řešené pomocí Data > Platnost > Rozsah buněk

Prvním vybírám zboží z listu "zbozi" tímto zápisem: "$zbozi.$A$1:$A$3"

List vypadá takto:
Tričko 1  |  barvy_tricek
Tričko 2  |  barvy_tricek
Kalhoty  | barvy_kalhot

Další dva listy se jmenují "barvy_tricek" a "barvy_kalhot"

Potřebuji, aby se druhému vyskakovacímu seznamu na hlavním listu (opět v Data > Platnost > rozsah buněk) nastavilo "$barvy_tricek.$A$1:$A$3" nebo "$barvy_kalhot.$A$1:$A$2", podle toho, co bylo vybráno v tom prvním, ten VLOOKUP tam ale pořád nedovedu nějak vmáčknout sad ... za každou pomoc budu moc rád.

Offline

#4 22. 10. 2017 19:10:53

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

Dobrý den. Já to též dělám pomocí matice {=IF($A$2:$A$1000=$C$1;B2:B1000;0)}
Funguje to takto: první selektor v políčku C1 vybírá ze sloupce A2 až A1000
V pomocném slupci (třeba X) mám uvedenou matici
Druhý slektor vybírá se sloupce X kde jsou pouze data ze sloupce B, které odpovídají výběru prvního selektoru a nuly.
(Matice se ukládá trojhmatem ctrl+shift+enter), ale vlastně to nemusí být ani matice, můžete použít asi i normální vorec =if(A2=$C$1;B2;0) roztažený v pomocném sloupci X
Lze to ovšem použít pouze na jedné tabulce, nedokáži si představit použití napříč listy, v dané tabulce musíte mít na jednom řádku odpovídající data.
Tzn. vaše tabulka musí vypadat takto:
Trička / modrá
Trička / červená
Kalhoty / modrá
Kalhoty / fialová
atd.
pak to bude fungovat

Editoval ludviktrnka (22. 10. 2017 19:15:34)


LibreOffice 5.4.

Offline

#5 22. 10. 2017 19:38:39

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 697

Re: Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

ještě jinak to jde: přímo do Data > Platnost > rozsah buněk vepsat vzorec indirect(X1&"!A1:A3";1) přičemž v X1 budete mít podmínku která vám vrátí název listu dle výběru tzn: if(C1="Tričko";"barvy_tricek";if(C1="Kalhoty";"barvy_kalhot"))
Toto by mělo více odpovídat vašemu zadání.
Resp. v X1 může být celá adresa výběru a pak bude v Platnosti zapsáno jen indirect(X1;1)

Editoval ludviktrnka (22. 10. 2017 19:42:12)


LibreOffice 5.4.

Offline

#6 23. 10. 2017 05:47:46

bajtik
Člen
Registrace: 22. 10. 2017
Příspěvků: 24

Re: Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

Dobrý den Ludvíku, moc Vám děkuji za reakci. Možná by šla celá ta podmínka vepsat i přímo do Platnosti a obejít se bez X1 (? zkusím až v práci), ale vhledem k tomu, že těch "zboží" je několik desítek a každému odpovídá některá ze sad "barev" (kterých bude také více než 2), není to vůbec tak elegantní řešení, jaké bych si představoval. Přitom ten můj příklad vrací de-facto to, co bych očekával, akorát to podle mě vrací ve formě textového řetězce, místo jako matici. Možná to dělají ty uvozovky, nevím, vařím teď trochu z vody. Jak jsem psal, s Officem se teprve seznamuji a předpokládám, že mi tam uniká jen nějaká triviální chybka. Každopádně, pokud by někdo věděl, jak rozchodit ten VLOOKUP, byl bych blahem bez sebe.

EDIT: JSEM BLAHEM BEZ SEBE, ten Indirect bylo zřejmě to, co mi unikalo, kód INDIRECT(VLOOKUP(C2;zbozi.A1:B3;2;0)&".A1:A9") v "platnosti" funguje, zdá se, jak bych očekával (i bez X1 a podmínek). Až se přesunu do práce, ještě to proklepnu, ale vypadá to velmi nadějně, DĚKUJI za pošťouchnutí správným směrem.

Editoval bajtik (23. 10. 2017 07:20:40)

Offline

#7 23. 10. 2017 06:55:31

bajtik
Člen
Registrace: 22. 10. 2017
Příspěvků: 24

Re: Naplnění jednoho selektoru na základě nastavení jiného selektoru (OK)

Tak už se hlásím z práce a je to perfektní, ještě jednou moc děkuji za ten konstruktivní šťouchanec a vlákno značím jako vyřešené.

Offline

Zápatí