charles91
08.02.17,18:07
Dobrý deň,
chcem poprosiť o radu.
Mám v exceli klasickú maticu z ktorej potrebujem spraviť databazovu formu. Ako keby vzor kontigenčnej tabulky, chcem rozdeliť na "nekontigenčné data".
Presne ako vo videu https://www.youtube.com/watch?v=N3wWQjRWkJc

Riešenie by mohol byť "Pivot Table and PivotChart Wizard". Avšak problém je, že nikde v exceli túto funkcionalitu nemám.
(Skúšal som už hladať v možnostiach pridať na panel úloh aj tie, ktoré nie su zobrazené... Skratka ALT+D+P nefunguje tiež.)
Používam Excel 2016 Profesional.

Neviete mi prosím poradiť ako to najdem?
Viete iné riešenie, ktoré by mohlo byť nápomocné?

Vopred dakujem.
excel.sk
08.02.17,17:36
.
Súbor, Možnosti, Panel s nástrojmi rýchly prístup, Oblasť výberu príkazov: Všetky príkazy, Vľavo vyberiete Sprievodca kontingenčnou tabuľkou a grafom, tlačidlo Pridať
.
mepex
09.02.17,18:35
Tento postup sa volá unpivot-ovanie (rozloženie kontingenčnej tabuľky=pivot table). Z už existujúcej kontingenčnej tabuľky sa dá (ako je aj vo videu) dostať k zdrojovej tabuľke poklikaním (2xľavé tlačidol myši) na agregovanú hodnotu=>zobrazí všetky vstupné hodnoty a všetky ich dimenzie. Vo videu kt nevykonáva žiadnu agregáciu a tabuľka neobsahuje iné dimenzie, tak to zafunguje skvelo. Ale asi previesť tabuľku na kt a rozkliknúť sumár nechcete. Nepoznám však inú cestu okrem tejto a nástroja Power Query.
PQ je od verzie 2010 možné stiahnuť ako doplnok a v 2016 je automaticky. Všimol som si, že používate verziu 2016 a preto pripájam odkaz na video na dosiahnutie tohto cieľa. MePExG (.sk) PowerQuery UnPivot (https://ulozto.sk/!B5KWVuux0hVw/pqunpivot-avi)

Prikladám makro aj súbor s ním, ktoré na vybranú pozíciu rozloží (zadanú dvojrozmernú) tabuľku.
Sub UnPivot()
Static ciel As Range, vstup As Range, c As Integer, s As Integer, r As Integer, stlpcov As Integer, riadkov As Integer
Set ciel = Selection
Set vstup = Application.InputBox(prompt:="Vyberte prosím," & Chr(10) & "z ktorej oblasti UnPivotovať?", Type:=8)
riadkov = vstup.Rows.Count()
stlpcov = vstup.Columns.Count()
If stlpcov < 2 Or riadkov < 2 Then
Exit Sub
End If
ciel = vstup(1, 1)
ciel.Offset(0, 1) = "Atribut"
ciel.Offset(0, 2) = "Hodnota"
c = 1
For r = 2 To riadkov
For s = 2 To stlpcov
If vstup(r, s) <> 0 Then
ciel.Offset(c, 0) = vstup(r, 1)
ciel.Offset(c, 1) = vstup(1, s)
ciel.Offset(c, 2) = vstup(r, s)
c = c + 1
End If
Next s
Next r
End Sub
charles91
12.02.17,10:50
Ďakujem pekne za odpoveď. Nevedel, som, že sa to takto vola v slovenčine.
charles91
12.02.17,11:37
Ďakujem. Presne nad tou aktualizáciou dát som sa zamýlal, kedže s "rozloženou" ale aj "kontigenčnou" tabuľkou chcem pracovať.

Neviete, ako by sa to chovalo, ak by som súbor posúval medzi osoby, ktoré majú starší Excel, a nemajú P.Query ?
Inštalovať im ho nebude možné...
mepex
12.02.17,18:12
U užívateľov bez PQ, proces nebude funkčný. V ich prípade by som skôr navrhol uložiť ako napr. txt, alebo csv a spracovať pomocou PQ na inom PC.
Na takom PC, sa dá PQ použiť na zhranie vstupných súborov z adresára.
Ak (PQ) však chcete dať do rúk užívateľov, je to problém, lebo PQ priamo obsahuje iba 2016 a dá sa doinštalovať ako doplnok, od verzie 2010.
Ešte by tu bola jedna možnosť a to je hľadať programátora, ktorý Vám UnPivotovanie urobí jednoúčelovo, iba pre Vaše údaje, Ovšem aspoň bez štruktúry, neviem či to niekto bude robiť.
xxn
14.06.17,15:48
Mal som podobný problém s kurzovým lístkom. Vyriešila ho upravená VBA procedúra. Prikladám vzorový neupravený súbor (excel) aj procedúru (txt). Procedúra funguje vtedy ak máme fixné údaje v prvom stĺpci a údaje ktoré chceme transponovať v prvom riadku (to bude druhý stĺpec) a poliach pod ním (to bude tretí stĺpec). Excel súbor treba otvoriť. Procedúru potom treba nakopírovať do modulu (napr. cez Alt+F11- Insert - Module) vba editora a spustiť (klávesa F5). Výsledkom je novovytvorený zošit s "normalizovanými" údajmi. Súčasťou txt súboru je aj adresa webstránky z ktorej som čerpal ...tú samozrejme do VBA kopírovať netreba :).
mepex
07.08.17,17:56
PQ dokáže načítať údaje aj zo stránok, teda aj kurzový lístok a urobiť príslušný rozpad.