< návrat zpět

MS Excel


Téma: Automatický formulář rss

Zaslal/a 23.2.2015 21:41

Dobrý den,
potřeboval bych nějakou stručnou osnovu+elegantní tipy a triky, jak postupovat při řešení níže uvedeného úkolu. Rád bych si vše vyřešil sám, ale nerad bych šel dlouhatánskou cestou pokusů/omylů a objevováním objeveného. S VBA moc zkušeností nemám, doposud jsem programoval jen nějaké jednoduché výpočty s podmínkami, následující zadání se ale týká automatického formuláře.
Mám následující databázi: Číslo dílu-datum/čas zkoušky-naměřená hodnota. Úkolem je z následující databáze vyfiltrovat určitý díl, který byl zkoušen v definovaném časovém úseku a vyhodnotit dosažené výsledky. Hodnocení spočívá v histogramu + proložení gaussovou křivkou a určení indexu způsobilosti procesu (Cp). Možná přibude ještě směrodatná odchylka /popřípadě jiné veličiny popisné statistiky/, ale to v tuto chvíli asi podstatné. Ke každému dílu náleží referenční/mezní/ hodnota (není součástí databáze), se kterou se budou naměřené hodnoty porovnávat (jde o trhačku-výsledný histogram bude mít log-normální rozdělení).
Jak jsem již říkal, budu rád za Vaše postřehy a rady, jak vytvořit elegantní a uživatelsky přívětivý /pokud možno blbuvzdorný/ program. Ještě poznámka na okraj, v té databázi nejsou vždy ta čísla dílu zadána korektně, někdo se občas „upsal“ a číslo dílu začíná nějakým znakem (středník, apostrof, pomlčka) – lze i toto nějakým způsobem odfiltrovat?
Díky moc za vše!

Zaslat odpověď >

Strana:  1 2   další »
icon #023827
avatar
Pokiaľ by som to riešil ja, tak by som:
Zo vstupnej tabuľky (predpokladám, že tá "databáza" predstavuje nejakú excelovskú tabuľku) vytvoril pomocou parametrického dotazu prostredníctvom MS Query výstup do QueryTable. Obsahom výstupu by potom boli akurát dáta za konkrétny diel za vybrané časové obdobie. Nad takto vytvorenou QueryTable by som vytvoril dynamickú pomenovanú oblasť (oblasti), ktorá by slúžila ako zdroj dát pre histogram a zároveň by slúžila pre výpočet štatistických veličín potrebných pre výpočet gaussovej krivky, t.j. priemeru, smerodatnej odchýlky, dolnej a hornej medze. Zostrojenie gaussovej krivky na základe uvedených hodnôt by nemal byť problém, na internete sú k tomu návody. Graf takto vytvorený (histogram kombinovaný s gaussovou krivkou, prípadne 2 samostatné grafy) by sa potom automaticky aktualizovali na základe zmeny parametrov (diel, dátumy) v parametrickom dotaze.
Čiže - jeden výstup, do ktorého by sa doťahovali dáta na základe zmeny vybraných parametrov, grafy by sa prekresľovali automaticky. Trocha SQL, pár vzorcov a pravdepodobne hotovo. VBA pmn v tomto prípade nie je nutné, snáď maximálne niekoľko riadkov kódu. Je možné, že ani vytvorenie pomenovaných oblastí by nutné nebolo, ale to by sa muselo najskôr vyskúšať.
K hore uvedenému je potrebná znalosť nasledujúceho:
1. MS Query - tvorba jednoduchých parametrických dotazov
2. Dynamické vymedzenie oblasti
3. Vzorce na vytvorenie datovej sady pre vytvorenie gaussovej krivky - ako som zmienil, postup je celý na internete

Ten index způsobilosti procesu je nejaká štatistická metrika, pokiaľ sú známe zdrojové dáta (QueryTable), tak nie je problém z toho nejakú štatistickú hodnotu spočítať..

edit: na generovanie náhodných čísel pre vykreslenie gaussovej krivky na základe známeho priemeru a štandartnej odchýlky by som nakoniec teda asi makro zvolil, ale ako som uviedol hore, bol by to skutočne len 1-2 riadky kódu, slúžiacich k predaniu parametrov pre spustenie rutiny Random z doplnku ATPVBAEN.XLAM (generovanie náhodných čísel pri normálnom rozdelení - doplnok Analytické nástroje). Bod 3 tým pádom v podstate odpadá, ten porieši makro. Bod 2 veľmi pravdepodobne nutný nebude, bod 1 je trivialita. Celá úloha sa mi nezdá nijako zložitá. Akurát som teda, priznám sa, nepochopil, k čomu formulár, keď pmn stačia dve-tri bunky s overením dát - jedna pre výber dielu a druhá (prípadne druhá a tretia) pre výber obdobia...
Vzhľadom k tomu, že by som vo finále postupoval trochu odlišne, než som predpokladal úvodom, ten popis je "trochu" chaotický. Ale nechcelo sa mi to už celé prepisovať, tak som popreškrtal časti, ktoré by som nakoniec asi nepoužil. Snáď sa v tom popise dá aspoň trochu orientovať, keby boli nejaké dotazy, tak sem s nimi.citovat
#023846
avatar

AL napsal/a:

Pokiaľ by som to riešil ja, tak by som:
Zo vstupnej tabuľky (predpokladám, že tá "databáza" predstavuje nejakú excelovskú tabuľku) vytvoril pomocou parametrického dotazu prostredníctvom MS Query výstup do QueryTable. Obsahom výstupu by potom boli akurát dáta za konkrétny diel za vybrané časové obdobie. Nad takto vytvorenou QueryTable by som vytvoril dynamickú pomenovanú oblasť (oblasti), ktorá by slúžila ako zdroj dát pre histogram a zároveň by slúžila pre výpočet štatistických veličín potrebných pre výpočet gaussovej krivky, t.j. priemeru, smerodatnej odchýlky, dolnej a hornej medze. Zostrojenie gaussovej krivky na základe uvedených hodnôt by nemal byť problém, na internete sú k tomu návody. Graf takto vytvorený (histogram kombinovaný s gaussovou krivkou, prípadne 2 samostatné grafy) by sa potom automaticky aktualizovali na základe zmeny parametrov (diel, dátumy) v parametrickom dotaze.
Čiže - jeden výstup, do ktorého by sa doťahovali dáta na základe zmeny vybraných parametrov, grafy by sa prekresľovali automaticky. Trocha SQL, pár vzorcov a pravdepodobne hotovo. VBA pmn v tomto prípade nie je nutné, snáď maximálne niekoľko riadkov kódu. Je možné, že ani vytvorenie pomenovaných oblastí by nutné nebolo, ale to by sa muselo najskôr vyskúšať.
K hore uvedenému je potrebná znalosť nasledujúceho:
1. MS Query - tvorba jednoduchých parametrických dotazov
2. Dynamické vymedzenie oblasti
3. Vzorce na vytvorenie datovej sady pre vytvorenie gaussovej krivky - ako som zmienil, postup je celý na internete

Ten index způsobilosti procesu je nejaká štatistická metrika, pokiaľ sú známe zdrojové dáta (QueryTable), tak nie je problém z toho nejakú štatistickú hodnotu spočítať..

edit: na generovanie náhodných čísel pre vykreslenie gaussovej krivky na základe známeho priemeru a štandartnej odchýlky by som nakoniec teda asi makro zvolil, ale ako som uviedol hore, bol by to skutočne len 1-2 riadky kódu, slúžiacich k predaniu parametrov pre spustenie rutiny Random z doplnku ATPVBAEN.XLAM (generovanie náhodných čísel pri normálnom rozdelení - doplnok Analytické nástroje). Bod 3 tým pádom v podstate odpadá, ten porieši makro. Bod 2 veľmi pravdepodobne nutný nebude, bod 1 je trivialita. Celá úloha sa mi nezdá nijako zložitá. Akurát som teda, priznám sa, nepochopil, k čomu formulár, keď pmn stačia dve-tri bunky s overením dát - jedna pre výber dielu a druhá (prípadne druhá a tretia) pre výber obdobia...
Vzhľadom k tomu, že by som vo finále postupoval trochu odlišne, než som predpokladal úvodom, ten popis je "trochu" chaotický. Ale nechcelo sa mi to už celé prepisovať, tak som popreškrtal časti, ktoré by som nakoniec asi nepoužil. Snáď sa v tom popise dá aspoň trochu orientovať, keby boli nejaké dotazy, tak sem s nimi.


Díky za odpověď! V nejbližších dnech se na to asi nedostanu, a tak posílám jen tento krátký feedback. Možnost přes MS Query mě ani nenapadla, kdysi jsem s tím lehce koketoval, ale moc do hloubky nepronikl. Ale je to pro mě výzva. Předpokládám, že dotazů budu mít ještě mnoho, ale to až postupně, jak se budu prokousávat tímto úkolem.
Ještě jednou díky a hezký večer!citovat
icon #023847
eLCHa
@Don_Rododendron
Rád bych si vše vyřešil sám
+1

Četl jsem to dvakrát, pro jistotu. Ono bez dat se těžko radí, ale než se začnete hrabat v MSQuery, zkuste nejdříve kontingenční tabulku + graf...citovat
icon #023851
avatar
Aby som iba neplácal, tak som skúsil vytvoriť vzorový súbor. Snáď to bude fungovať. Určite bude potrebné zmeniť cestu k súboru, pokiaľ to hodí nejakú chybovú hlášku, tak sa nedeste, i napriek tomu by sa to malo dať rozchodiť.
Takže: bude potrebné, aby ste si zmenili cestu v nastavení Data->Connections->Properties->Definition v textboxe Connection String a Command Text (Na Sheet2 som umiestnil printscreen, je treba prepísať hodnoty DBQ, DefaultDir a v Command Texte cestu v klauzuli FROM, printscreen môžete odstrániť, je tam iba pre názornosť).

Na Sheete2 sa potom odohráva celá vec:
Zvolíte v zelených bunkách Diel a Obdobie.
Graf sa prekreslí vždy, keď dojde ku zmene v niektorej zo zelených buniek.
Nasimuloval som i chybu pri názve dielu.
Uvažujem s 3 dielmi: aaa,bbb a ccc. Schválne som nasimuloval "preklepy", takže pokiaľ zvolíte aaa, obdobie 1-Jan až 31-Jan tak vidíte, že v tabuľke sú všetky hodnoty obsahujúce v reťazci aaa, čiže i xaaa atd.
Snáď to bude ako inšpirácia dostatočné.
Testovacie dáta (databáza) sú na liste Sheet1. Tam som vytvoril nejaké náhodné hodnoty, hovoríte, že tie namerané budú mať log-normálne rozdelenie, v tom prípade by sa mal tvar histogramu približovať tomu tvaru log-norm rozdelenia z grafu.

Ešte by to chcelo pohrať si s x-ovými osami (primárnou a sekundárnou) tak, aby mali rovnaké rozsahy, ale to už sa mi riešiť nechcelo, skúste sám, alebo to vyskúšam zas niekedy, keď budem mať čas a chuť.

Dajte vedieť svoje postrehy..

Ku kontingenčnému grafu, ktorý zmieňoval kolega: Tam by som istý problém videl v tom, že požadovaný histogram musí pracovať s buckets, takže kontingenčkou sa síce dajú zobraziť dáta, odpovedajúce kritériám, ale kontingenčný graf by už asi neodpovedal tomu, čo sa požaduje v zadaní - musel by dáta odpovedajúcim spôsobom agregovať a to už by bola istá komplikácia (hodnoty jednotlivých buckets nie sú statické, takže opäť by na rad museli prísť nejaké pomocné výpočty). Krom toho, kontingenčka by sama osebe ťažko spracovala uvedený prípad, kedy xaaa má byť považované za aaa - to by sa asi muselo ošetriť nejakými pomocnými stĺpcami v zdrojových datách (hodne zbytočnej práce, i keď ani Query v tomto prípade 100%-ne negarantuje správnosť výberu dielu, ideálne by bolo preklepy v názvoch dielov odstrániť). No a pokiaľ by sa tvoril graf nad dátami z kontingenčky, kde by už boli dáta nejako agregované (hodne zbytočnej práce) a nejednalo by sa o kontingenčný graf, tak by sa museli datové rady definovať dynamicky (hodne zbytočnej práce). Môj názor: KT a graf je fajn, pre riešenie uvedeného zadania ale preferujem spôsob, ktorý som popísal a vytvoril k nemu i vzor.
Příloha: zip23851_pom.zip (108kB, staženo 45x)
citovat
icon #023854
avatar
V novej verzii som dorobil to zlícovanie osí X, to už je urobené makrom, čiže súbor je .xlsm, znovu je potrebné opraviť definíciu pripojenia k datovému zdroju..
Popisky osí som nechal viditeľné pre názornosť, ale je možné, samozrejme, zobrazenie popiskov sekundárnych osí potlačiť.
Příloha: zip23854_pom.zip (97kB, staženo 44x)
citovat
#023859
avatar
Ježíš, děkuju moc! Jakmile budu mít na to jen chvilku času, podívám se na to. Můžu pak popřípadě poskytnout zdrojovou databázi+náhled, jak by měl výsledný formulář vypadat. Je mi skoro až trapně, že jsem se na to ještě nedostal, ale su nyní od rána do večera v práci a večer mi už hlava prostě nebere. Ještě jednou děkuju!citovat
icon #023861
eLCHa
@AL
Pokud se ubíráte správným směrem, tak zatím se lze obejít bez MSQuery i kontingenční tabulky - stačí zdrojová data. Vykradl ;) jsem ten Váš soubor a zkusil to (nedal jsem tam to omezení data, ale to je jen jednoduchá úprava). Pokud je to tak, stačí obyčejná tabulka s jedním vloženým sloupcem (já osobně bych dal přednost opravě chybných hodnot (= bez pomocného sloupce), protože i Vaše LIKE i moje NAJÍT může přibrat nesprávné hodnoty).
Jinak dobrá práce - ve statistice se s Váma přít nebudu, protože jsem ji měl naposledy někdy kolem roku 1995).
Příloha: zip23861_statistika.zip (128kB, staženo 54x)
citovat
icon #023862
avatar
@eLCHa
prečítal som si Váš post na mobilnom telefóne a povedal som si: on tam beztak Karel použil zrejme rozšírený filter. Nepoužil, takže ďalšou možnosťou, ktorá by to celé zjednodušila a odpadlo by Query, by mohol byť rozšírený filter a krátky kód buď v udalostnom makre, alebo tlačítko s makrom na generovanie záznamov odpovedajúcich zadaným kritériám. Makro na zlícovanie osí by som asi zachoval.
Možností riešenia je ako vždy viac.

Inak, skúšku zo štatistiky som ja mal ešte pred plyšákom, odvtedy som to tiež viacmenej nemal možnosť použiť, sme na tom asi skoro všetci podobne - zabúdame na veci, ktoré sme sa na škole krvopotne naučili, holt, čas je milosrdný1

Len pre zaujímavosť, dokázal ste ten môj súbor rozchodiť? Mám na mysli: prekresľujú sa dáta v tabuľke a graf pri zmene zelených buniek?citovat
#023863
avatar
@AL @eLCHa
No až to vyriešite, tak vám Rododendron priloží súbor "jak to má vypadat" No nie je zlatý? 2citovat
icon #023865
avatar
@marjankaj
ja občas poruším zásadu vyžadovať od OP vzor. Problém riešim, pokiaľ ma jeho riešenie baví - negarantujem samozrejme, že moje riešenie potom bude OP k úžitku a je možné, že o riešenie upresneného zadania už záujem mať nebudem. Riešim pre svoje potešenie a zadarmo, mám potom právo riešiť si vec, ktorá sa možno odchyľuje od pôvodného zadania. Pokiaľ sa niekedy nejaký OP rozhodne, že mi za riešenie zaplatí, tak sa budem zadania striktne držať a požadovať informácie potrebné k riešeniu.
Na tomto fóre mi zaplatil za celú dobu akurát jedenkrát jeden jediný človek, jeden sa aspoň spýtal, čo je dlžný, a jeden akurát sľuboval, otravoval a vo finále, keď som mu vec dodal, sa už neozval.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje