< návrat zpět
MS Excel
Téma: Makro vzorec - Finanční odměna za vytvoření
Zaslal/a checkboy 31.8.2016 13:36
Dobrý den,
píši Vám ohledně pomoci s excelem, protože si již nevím rady a zase v těch makrech nejsem tak zběhlý. Dopředu říkám, že to nechci zadarmo, stačí mi napsat (checkboy@gmail.com), jestli byste to byli schopni a ochotni udělat a za kolik, já bych se případně ještě poradil a když bych Vám to odsouhlasil, tak není problém.
Potřeboval bych udělat něco jako rozšířený filtr, kde se jedná především o to, že potřebuji vyfiltrovat dle všech zadaných klasifikací a kritérií všechny firmy, které tyto klasifikace a kritéria obsahují -
(klasifikací můžou být i stovky.. tisíce, rozdělují se na dvoumístné např. 65, pětimístné např. 65236 a sedmimístné například 6523601) + jestli se jedná např. o výrobce, distributora, servis, importéra a exportéra (ale může být i jen samostatně klasifikace, což by byly všechny firmy, které mají uvedenou klasifikaci popř. její „podklasifikaci“ a nebo naopak např. můžu chtít jen a pouze výrobce bez zadání další klasifikace). Tyto údaje mohou být i případně propojené, že budu chtít dle zadané klasifikace vyfiltrovat výrobce + distributory, kteří jsou zároveň exportéry.
Klasifikace jsou pojaty tak, že dvoumístná klasifikace má pod sebou všechny pětimístné klasifikace a zároveň sedmimístné klasifikace, které začínají stejně – viz např. 65, 65236, 6523601. Pětimístná
klasifikace má pod sebou všechny sedmimístné klasifikace. Takže pokud zadám dvoumístnou klasifikaci, tak zároveň mi musí vypadnout všechny firmy, kterým začíná jakákoliv klasifikace tímto dvoumístným číslem. Stejné to je i v případě pětimístné klasifikace, kde když se zadá pětimístná, tak vypadnou všechny firmy, které mají zadanou buď již tu pětimístnou klasifikaci a nebo všechny sedmimístné klasifikace, které začínají na prvních pěti místech stejnými čísly.
Dvoumístné (všeobecné) klasifikace, tak těch je nejméně (cca do 100). Pětimístné klasifikace, tak těch je cca 10.000 a sedmimístných klasifikací jsou statisíce až miliony. Každá firma má několik klasifikací (firma, resp. Její ID je ve sloupečkách „CompanyId“). Dohromady to je tolik klasifikací, že by to jeden list excelu prostě nepojmul (je jich necelé dva miliony) a list pobere něco přes jeden milion, takže abych nemusel používat access, tak jsem klasifikace rozdělil na dva listy. V tom může být malý zádrhel, protože já bych potřeboval, aby to makro zvládalo vybrat všechny firmy (ID firem) dle zadané klasifikace + bych potřeboval, aby se tam firmy (ID firem) neduplikovali, ale aby tam dle klasifikace bylo to ID firem jen jednou, takže pokud už bylo při vybrané klasifikace dříve vybráno, tak aby se tam znovu nepřidávalo do výsledku vyhledávání.
V příloze zasílám ukázkový soubor s několika vybranými klasifikacemi na listech (Klasifikace1 a Klasifikace2). Pokud se Vám to bude hodit, rozdělil jsem je ještě na dvoumístné, pětimístné a sedmimístné. Potřeboval bych, aby se s těmi listy moc již nehýbalo, protože se v budoucnu budou také obnovovat. Na listu „Zadání“ najdete dané sloupečky, dle kterých jsme byli zvyklí takto vyhledávat –
klasifikační kód (dvou, pěti nebo sedmimístný), výrobce (označení „P“ jako Producer), Distributor (D), Servis (S), Exportér (E), Importér (I)… tady mi nezáleží vyloženě na tom, jestli tam budu dávat tyto
písmenka a nebo jen např. „A“ ..jako Ano, že je tato klasifikace brána v úvahu. Ve sloupečku G by měl být k nalezení výsledek – ID firem, který se tam promítne ze sloupečků „D“ (CompanyId) na listech
s klasifikacemi.
Pokud budete mít jakékoli otázky tak mne prosím kontaktujte buď tady a nebo na e-mailu: checkboy@gmail.com .
Nezapomeňte, že se tu pak bude pracovat s hrozně moc daty a na každém listě bude až milion klasifikací. Děkuji moc za případnou budoucí pomoc.
PS: obyčejné filtry v hlavní liště nepojmou tolik sedmimístných klasifikací k profiltrování.
Příloha: 32512_excel.zip (239kB, staženo 38x)
AL(1.9.2016 14:31)#032560 Petře, že by som toho vedel viac, než Ty, si skutočne úprimne a skromne nemyslím. Nejaká oprava terminológie na tomto stave naozaj nič nezmení. No a pokiaľ sem prispeje medzitým Aleš, tak to si myslím, že v oblasti databází je už úplne iná liga :)
citovat
adaal(1.9.2016 14:57)#032561 Myslím, že toho víme dost, abychom poradili checkboy-ovi, že opustit myšlenku uchovávat takové množství dat v Excelu je rozumná věc. Argumentů existuje celá řada. Excel je v tomto ohledu hrozně nadužívaný.
Nejlepší je asi opravdu nechat si dát nějakou free plnohodnotnou databázi na server, data uložit tam a nalézt schůdnou variantu jak data spravovat (s ohledem na dovednosti). Nebo úkol delegovat/odmítnout s pádnými argumenty, kterých tu zaznělo dostatek.
Ohledně ADO: prošel jsem si tím dost intenzivně a narovinu říkám, že nikdy více :)
citovat
checkboy(1.9.2016 15:43)#032564 Já vím, že to všichni s těmi databázemi myslíte dobře. Když nevidíte celou strukturu toho o čem to je... tohle, co nyní potřebuji udělat, je jen malý zlomek toho, co již udělaného je... a představte si excel, který má dvacet listů a v každém tom listu jsou několika tisícové (deseti až statisícové) data. Já bych vše tohle nikde jinde nedokázal propojit, než právě v excelu, protože než jsem to dal dohromady, tak jsem musel použít desítky vzorců, algoritmů a maker, abych to dal nějak dohromady (dělal jsem na tom 14 dnů)... a tohle dávat v nějaké databázi dohromady.. to by prostě nešlo... to by musel dělat nějaký vyloženě super profík..a co je hlavní, tak to jsou citlivá a cenná data, které nemůžeme nikomu jinému ani dát do ruky. Proto jsem to musel i dělat já... (i když jsem zase až tolik nechtěl). A abych se já naučil v nějakém databázovém programu, tak výborně... abych byl schopný to pomalu vyučovat, tak to by mi minimálně rok života sežralo. Tahle jediná část se dala dát trochu veřejně, protože se teprve jedná o takovou vstupní bránu do toho megaexcelu. A jinak věřte, že pokud máte dobrý počítač, tak se ten excel zase až tak dlouho nenačítá. ;)
Jinak ano, původní myšlenka byla, že by jsme použili nějaký databázový program, ale... naučit se v něm tak perfektně, abych tam dokázal udělat takové machinace jako v excelu.. by mi trvalo hrozně dlouho, proto jsem od toho odešel... a hlavně, abych to mohl používat pouze já. Ve chvíli, kdy bych např. onemocněl nebo něco, tak by bez mne byly totálně v háji.
citovat
aDAAL(1.9.2016 16:05)#032566 No, rozumím jak se člověk do takové sitauce dostane, ale to nemění nic na sitauci, že na to excel prostě není stavěný. Z žigulíku taky vytáhnete 120km za hod, ale ta jízda nebude nic moc :)
Řítíte se k řešení, které bude špatně udržovatelné, pomalé atd...
Myslím, že kdyby to bylo tak tak použitelné, nekdo by Vám to tady za odměnu splácal, ale osobně bych do toho nešel.
Držím palce
citovat
AL(1.9.2016 16:34)#032569 @eLCHa
ad:"Ono ani vytvoření dotazů v Accessu s Excelem moc nespolupracuje. Jednoduché dotazy si excel najde, ale jakmile použiju vnořený dotaz, už ho v seznamu nemám a musím z něj vytvořit tabulku."
Karle, vŕtalo mi v hlave, čo tým konkrétne myslíš. Mne sa vnorené dotazy, vytvorené v Accesse, ponúkajú k importu do Excelu (keď ten import realizujem z Excelu cez datové pripojenie). Ale doteraz som nechápal, prečo mi dávajú špatný výsledok. Je to tak ako píšeš, naimportovať výsledok vnoreného dotazu nie je pravdepodobne možné - dáva špatný výsledok. Takže, riešenie, ktoré navrhuješ, môžem potvrdiť. V Accesse je potrebné spustiť vytvárací dotaz a do Excelu importovať takto vytvorenú tabuľku.
Opäť som sa z Tvojho postu niečo užitočné dozvedel.
citovat
eLCHa(2.9.2016 7:46)#032582 @AL
hehe - s Accessem dělám teprve od března, takže si nedovolím tvrdit, že bych mohl někomu radit. Navíc mi absolutně nevyhovuje ten tvůrce dotazů - to je naprostá katastrofa, takže všechny dotazy vytvářím v Notepad++.
Vnořeným dotazem myslím (sorry za terminologii - oba jsou SQL, ale nevím jak jinak to rozlišit) vnoření SQL dotazu
SELECT t2.něco FROM (SELECT t1.něco FROM (SELECT tabulka.něco FROM tabulka) AS t1) AS t2 JOIN (SELECT...)a toto mi excel vůbec nezobrazí
Nevím jak je to s vnořením Access dotazu
SELECT něco FROM accQuerrytam to možná excel chápe (ale stejně říkáš, že špatně). Já se tomu zatím vyhýbám, protože mám děravou paměť a nepamatoval bych si, kde všude jsem to použil (ano - jsou tam
Závislosti objektů), ale když člověk spěchá...
Navíc, pokud vím, že se na danou věc budu odkazovat, tak mi ta tabulka přijde praktičtější a věřím, že u složitějších dotazů i rychlejší.
citovat
eLCHa(2.9.2016 8:00)#032583 @checkboy
DAAL to napsal úplně přesně.
Řítíte se k řešení, které bude špatně udržovatelné, pomalé atd...
v excelu to neuřídíte.
Všichni, co jsme vám tu odpovídali, jsme schopni vytvořit přesně to, co chcete. Ale ani jeden z nás to neudělá, protože je to špatná cesta, navíc to nemáme jak otestovat. Na tom vzorku 400 záznamů, co jste dodal to bude běhat úžasně, ale co 1500000...
Včera jsem jen krátce otestoval to, co už tu v podstatě zaznělo:
Databáze v Access (pochopil jsem, že máte) - těch vašich 400 záznamů + parametrický dotaz z excelu pomocí MSQuerry. Pěkné řešení, naprosto bez VBA, pouze jeden řádek se vzorci, který mi zřetězil položky. Jak jsem říkal, běhalo to krásně, navíc 2 miliony záznamů by měl Access zvládnout v pohodě. Nicméně jsem MSQuerry na 2 miliony řádků ještě nikdy nepoužil, takže co to udělá, netuším.
V excelu by se počet načtených řádků dal omezit na např. 10000 + hláška, že nebyly načteny všechny (také bez VBA)
citovat
checkboy(2.9.2016 14:51)#032596 Právěže... to bude jednoduše udržovatelné.. zmáčknu ctrl+c ...ctrl+v...a vše je aktualizované. Jak říkám.. chápu, že na tak velké databáze se používají jiné programy, ale mne to zatím vyhovuje. Ten soubor se spousty daty má v excelu sice přes 100 MB, ale pracuje svižně. Jediné u čeho se chvíli čeká je ukládání a otevírání. Ale ráno přijdu, jednou ho otevřu..a mám ho otevřený celý den a ukládat ho potřebuji jen při aktualizacích, což jsou jednou za čas. Vám se to možná zdá nepředstavitelné, ale funguje to zatím skvěle. Jen potřebuji udělat tu vstupní bránu do toho velkého souboru. Jako i já sám jsem udělal prozatím jednoduché řešení, jak to můžu využívat, ale je to pro mne zbytečně zdlouhavé.
citovat
AL(2.9.2016 20:02)#032608 Právěže... to bude jednoduše udržovatelné
Hm, tak tu je asi ďalšia diskusia zbytočná..
To je ako niekoho nútiť k používaniu pásov v aute, či prilby na bicykli. To si myslím, že by si mal každý sám rozhodnúť, či sa chce dobrovoľne zraniť viac, než je nutné. Nikdy som nepochopil, prečo za to má byť niekto pokutovaný. Je to jeho vec (a jeho blbosť). Za mňa dobré, vytvor to v exceli, nebudeš sa stačiť diviť..
citovat
aDAAL(2.9.2016 20:58)#032610 možná by to v Excelu šlo udělat - co do rychlosti - poměrně použitelně. Dost možná za cenu špatné udržovatelnosti.
Něco na způsob postupného vyhodnocování, půlení intervalů, využití struktur jako pole a třeba slovníků.
Helmu Vám nutí, protože zdravotnictví stojí dardu - a tak to nakonec asi dopadne s tím Vaším řešením - rozroste se a podpora bude časově a tím i finančně nákladná.
Nebo se pokuste prozkoumat sám nástroje na práci s daty jako je MS Query a uvidíte jestli je pro vás výkon dostačující. Zkuste si nějaké jednoduché dotazy na skutečných datech. Koukněte pořádně na data, jestli by nešli poskládat jinak, agregovat je, vylepšit proces a tím ušetřit objem dat atd...
Pokuste se zapojit Access, uložte ho na souborový server a vložte do něj data. Zkuste si excel přopij do accessu a kouknout se jak chápe datové typy. Podívat se jestli v číselnách sloupích nemáte textové řetězce, s nimi pak nemůžete provádět matematické operace. Napište jednoduché dotazy a opět posuďte zda Vám výkon postačuje, pak zkuste složitější. Pro aktualizaci byste pak hold zvolil formuláře v accessu nebo to nějak řídil z excelu. Pro VBA asi DAO z excelu, protože pomocí ADO asi neodemknete zaheslovaný soubor accessu, jestli se nepletu.
Další level je ta plnohodnotná databáze - nutit Vám to už nebudu.
Jestli máte někoho, kdo by Vám udělal nějaký doplněk ve Visual studiu, kde využije ADO.NET, pak by to s databází na serveru bylo dobré řešení, teda pokud byste trval na tom používat excel jako view. Bez databáze třeba pomocí XML, kde by se ukládali data na jednotlivé stanice a později slučovali, nečetl jsem dlouhé zadání, tak nevím jestli to potřebujete v real-time.
Nemáte kolem sebe někoho kdo by Vám udělal malou webovou aplikaci s free databází? To by bylo nejlepší. Ta by mohl abýt uživatelsky přívětivá a optimalizovaná.
Víc už asi neporadím. Mějte se
citovat