» Poradna » Programy

Úprava dat v Excelu

 |   |  Microsoft Windows 10 Firefox 91.0

Dobrý den přátelé,řeším zdánlivě jednoduchý požadavek v Excelu, ale přesto se mi nedaří dosáhnout požadovaného výsledku, tak bych vás zde rád požádal o pomoc. Mám dvě tabulky:- v jedné je pouze sloupec s unikátními kódy produktů v každém řádku a nadpisy sloupců pro kategorie a nic víc,- v druhé jsou dva sloupce: v prvním sloupci jsou také tyto kódy, ale několikrát se opakují a v druhém sloupci jsou kategorie, do kterých budou produkty řazeny.Tzn. že jeden kód produktu bude zařazen např. pod 30 různých kategorií. Můj cíl je do první tabulky vytvořit ke každému kódu tolik sloupců, v kolika je kategoriích a názvy kategorií tam doplnit. A to samozřejmě pomocí funkce, kterou mohu hromadně aplikovat.Pro ukázku zasílám obrázek s manuálně doplněnými daty: https://ibb.co/VqMggM2Případně zasílám i samotný datový soubor: https://www.transfernow.net/dl/202108201pyVXiW7Budu rád za vaše rady a návrhy.Tom :)

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 Chrome 92.0.4515.159

Já jako programátor - jakmile nevykoumám během 20 sekund, jak to udělat standardními funkcemi - bych na to šel napsáním makra (integrovaný Visual Basic for Application - VBA).

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Ahoj, tomu se nebráním, ale sám je naprogramovat nedokážu. Byl bys ochotný mi ukázat, jak by tahle funkce měla ve VBA vypadat?

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Macintosh OS X AppleMAC-Safari 5.0

Nejde o funkciBudeš si to muset naprogramovat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Ta funkce se musí naprogramovat. Tak bych rád ukázku toho kódu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Macintosh OS X AppleMAC-Safari 5.0

VBA

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Dokážu VBA použít, ale nikoliv naprogramovat vlastní funkci. Mohl bych vás o to požádat a jen přiložit ten kód sem?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows XP Mozilla 68.9

Pokud to má být chápáno jako zadání zakázky, musíš doplnit kontaktní a fakturační údaje, kam chceš kód s fakturou poslat.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Dobrý den,jedná se o žádost o pomoc, jak konkrétně vyřešit problém, nikoliv zakázku. Nejsem firma, alespoň zatím ne. Samozřejmě to vždy můžu udělat částečně manuálně, jen jsem zkusil, zda tu někdo bude vědět o elegantnějším řešení.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Chrome 90.0.4430.93

A jak to chceš filtrovat při takto nastavené datové tabulce? Ty tvoje kategorie jsou nejednoznačně definovány.https://office.lasakovi.com

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Ahoj, je to vlastně tak, jak píše Jerry níže. Pro lepší přehled jsem data přenesl do kontingenční tabulky, kde jsou vazby mezi kódy a produkty mnohem zřetelnější zde: https://ibb.co/9rgFfWr

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows XP Mozilla 68.9

Na domácí použití údaje v tabulkách nevypadají. Elegantnější řešení je např. použít na data místo Excelu nějakou databázovou aplikaci.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Snažím se vybudovat e-shop, na kterém si v ČR budou moci zájemci objednávat zahraniční zboží, ke kterému by se jinak nedostali nebo neměli dostatečné certifikace a nebo jim bránili komunikační bariéry při řešení dotazů apod. Takže nyní vlastně upravuji datové soubory velkoobchodníků a případných budoucích dodavatelů. Na 95 % procent problémů jsem si dokázal najít řešení, ale s tímhle posledním tu ještě bojuji. Rád bych právě přišel na způsob, který můžu případně i v budoucnosti použít znovu jednoduše znovu :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows XP Mozilla 68.9

No právě. Jak píšu - databázi zpracováváš v tabulkovém procesoru...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

V XLSX byly i všechny původní datové soubory a v XML, XSLX nebo CSV musí být i výstupní data. Ale samozřejmě chápu, že tabulkový procesor má svoje limity.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Chrome 90.0.4430.93

Nevím, kdo by byl tak odvážný a spojil e-krám s Excelem jako databázovým strojem.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Ta data v Excelu jsou pouze pro jednorázové nahrání těchto dat do Shoptetu nebo případně pro nahrání dalších v budoucnu.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

na to co chceš žádná hotová funkce neexistuje. budeš to muset naprogramovat ručně. buď uvnitř excelu s využitím Visual Basicu nebo dáš export dat do formátu souboru CSV a pak to naprogramuješ třeba v C# což by asi bylo nejrychlejší ... ale klidně mužeš použít C/C++ nebo Julia nebo Rust nebo SQL ... atd. jestli jsem to správně pochopil tak v TABULKA 1 sloupec A je seznam jedinečných kodů (žádný se v tabulce neopakuje dvakrát) takže budeš jedním cyklem FOR číst postupně položky za sebou a pak je budeš dalším cyklem FOR hledat v TABULKA 2 sloupec E (jinak řečeno pro každou položku v TABULKA 1 sloupec A musíš projít všechny položky v TABULKA 2 sloupec E ) a pokud najdeš shodu tak daný záznam přepíšeš do dané kategorie v TABULKA 1 na řádku , který odpovídá zpracovávanému kodu a záznam správně zařadíš do příslušného sloupce .. 1 až 130 takže si v programu uchováváš čítaš na sloupec a ten čítač pro každou novou hodnotu v TABULKA 1 sloupec A nuluješ. Zas tak těžký to neni .. vlastně bych asi řek že to sou dva vnořený cykly FOR a jeden čítač těch sloupců KATEGORIE ... čítač sloupců KATEGORIE se zvýší o 1 pokaždé když do nějakého sloupce zapíšeš protože dvě hodnoty ve sloupci jak říkáš mít nemužeš v.. ta úloha je docela jednoduchá ... tohle zvládneš napsat sám ... vidim to na 2-3 dny práce a hledání na internetu jak se čte a zapisuje hodnota buňky v excelu pomocí visual basicu ... https://www.automateexcel.com/vba/cell-value-get-set/jinak hodinová mzda programátora sice není tak vysoká jako hodinová mzda právníka (2-3tis. Kč) ale pořád můžeš počítat tak 500Kč hrubýho na hodinu když to někomu dáš naprogramovat ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Moc děkuji za odpověď. Pro mě je to buďto jeden den manuální práce, pár stovek programátorovy nebo jak píšeš 2-3 dny vlastního snažení se naučit něco nového. S postupem od tebe zkusím tu třetí možnost. Děkuji, mám se od čeho odrazit dál :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

příklad na cyklus forhttps://office.lasakovi.com/excel/vba-teorie-zaklady/... a budou to 2 cykly v sobě uzavřený do procedury https://www.guru99.com/vba-functions-subroutine.... a proceduru budeš volat po stisku asi nějakýho tlačítka co si umístíš někam na sheet ... takže si zapneš vývojáře v menu Soubor / Možnosti / přizpůsobit pás karet a zaškrtneš Vývojář a objeví se ti menu vývojářeteď se vrátíš na pás karet Excelu a na kartě vývojář povolíš makra klikneš na ikonu "Zabezpečení maker" co je vlevo na páse a zaškrtneš RadioButton "Povolit všechna Makra" v okně co se otevře a dáš OK. pak klikneš opět na kartu vývojář a klikneš na ikonu Vložit a hned první vlevo nahoře je Button a ten si nakreslíš na Sheet a pak dáš OKjméno makra je třeba MojeProcedura a klikneš na Vytvořit a otevře se ti editor a procedurou: Sub MojeProcedura() MsgBox ("Moje první okno.")End Subdo ní napíšeš MsgBox ("Moje první okno.") a pak se vrátíš na List Excelu kde je button a klikneš nejdřív vedle něj - tim se přepne do režimu "RUN" a pak klikneš na něj a spustí se ti tvoje makro a uvidíš hlášku "Moje první okno." no a do týhle procedury už jenom vložíš ty tvoje 2 cykly .... takže teď už to zvládneš ..

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Supr, moc děkuju! To už bych měl zvládnout :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Sub MojeProcedure() Dim strKod_1 As String Dim strKod_2 As String Dim strPopis As String Dim intSloupec As Integer 'Worksheets("Tabulka1").Cells(2, 2).Value = "AHOJ" ' Application.SendKeys "^g ^a {DEL}" For i = 2 To 3464 intSloupec = 2 strKod_1 = Worksheets("Tabulka1").Cells(i, 1).Value Debug.Print strKod_1 For j = 2 To 74439 strKod_2 = Worksheets("Tabulka2").Cells(j, 5).Value If (StrComp(strKod_1, strKod_2, vbTextCompare) = 0) Then strPopis = Worksheets("Tabulka2").Cells(j, 7).Value Worksheets("Tabulka1").Cells(i, intSloupec).Value = strPopis intSloupec = intSloupec + 1 End If Next j Next iEnd Sub

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Funkce, jak jste ji napsal, s drobnou individualizací, funguje naprosto perfektně :) Velice děkuji za tu práci a ochotu, hlavně za vaše rady, postupy a odkazy.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

jenom ještě taková drobnost sem si všimnul že ten tvuj Workbook je z anglický verze Excelu a pokud to zpracováváš pod českou verzí excelu tak se ve vzorcích objevuje prefix "_xlfn."https://support.microsoft.com/en-us/office/issue-an-xlf... takže ten algoritmus ti vubec nepude zpracovat budeš to asi muset nějak přetransformovat a AJ verze do CZ verze ale to nevim jak se dělá :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 78.0

prefix "_xlfn." není věcí jazykové mutace excelu, ale jeho verze. Tazatel má zřejmě vyšší verzi než Ty. Je to označení chybějící funkce, kterou tvá verze excelu neobsahuje.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Myslím, že není nutné to programovat. Základem je použít funkci, která vyhledá v první tabulce n-tý výskyt a výsledek uloží do n-tého sloupce ve druhé tabulce. Pro vývěr to bude chtít trochu upravit prbní tabulku, aby byl v každém řádku v první sloupci vždy kód výrobku (RF...) a v dalším sloupci pak to, co je v první tabulce odsazené .

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Taková byla moje původní myšlenka, ale tím, že každý kód má k sobě od jedné do dvouset kategorií, tak se mi nedařilo vyřešit situaci pomocí funkcí. Postup od Jerryho fungoval perfektně. Ale pokud budete mít i jiné řešení pomocí základních funkcí, tak ho taky rád vyzkouším.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Zkus dát do do buňky B2 TABULKY 1 vzorec (který pak myší roztáhneš po sloupcích a dolů). Po jeho vložení do buňky B2 stiskni současně Shift + Ctrl + Enter, kolem vzorce se za chvíli uloží složené závorky, které znamenají maticový vzorec :=KDYŽ(JE.ČISLO(KDYŽ(JE.ČISLO(SMALL(KDYŽ('TABULKA 2 - data'!$E$2:$E$74439=$A2;ŘÁDEK('TABULKA 2 - data'!$E$2:$E$74439)-ŘÁDEK('TABULKA 2 - data'!$E$2)+1);SLOUPEC()-1));SMALL(KDYŽ('TABULKA 2 - data'!$E$2:$E$74439=$A2;ŘÁDEK('TABULKA 2 - data'!$E$2:$E$74439)-ŘÁDEK('TABULKA 2 - data'!$E$2)+1);SLOUPEC()-1);""));NEPŘÍMÝ.ODKAZ("'TABULKA 2 - data'!G"&SMALL(KDYŽ('TABULKA 2 - data'!$E$2:$E$74439=$A2;ŘÁDEK('TABULKA 2 - data'!$E$2:$E$74439)-ŘÁDEK('TABULKA 2 - data'!$E$2)+1);SLOUPEC()-1)+1);"")

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Tak musím říct, že tohle obdivuji. Vzorec zdá se funguje, ale můj počítač v tomhle případě selhává :D

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Zkusil jsem buňku roztáhnout po sloupec HH a dolů (3646 řádků), výpočet trval asi 5 minut. Kategorie se dostaly po sloupec F .

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 92.0.4515.159

Skus Microsoft Power Bi :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 91.0

Zkusil jsem si to upravit. Stačí jen seřadit podle RF, sloučit k sobě podle RF. Nechat jedinečné hodnoty a pak text do sloupců. Trvalo mi to asi 3 minuty. Vše co potřebuješ je funkce KDYŽ. Výhodou je, že tak upravíš klidně stovky tisíc řádků aniž bys zavařil komp.Jo a když chceš zpracovávat taková data, tak je nejprve pročisti. Máš tam 3237 duplicit.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 92.0.4515.159

Popravdě řečeno to co chceš dělat mi nedává smysl ta zdrojová tabulka je celkem jednoznačná a lze použít pro vytvoření DB i dalších věcí.Význam by to mělo kdybys měl např. v řádkách díl a ve sloupečcích značka-typ-model-rok a přes políčka označené vazby zda daný model auta obsahuje daný díl bo co to je.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Kategorie, Datový soubor