Ale čoby bolo. Predstavte si množinu M{5,1,6}. Vytvorím novú prázdnu množinu N, do ktorej budeme zoraďovať. Z M si budeme postupne vyťahovať čísla. Prvé je 5. Teraz skontrolujeme po jednom čísla v N, a hľadáme prvé z N, ktoré je väčšie ako 5. Žiadne ešte nieje, tak 5 pridáme a máme N{5}. Berieme ďalšie číslo z M, teda 1. A zase hľadáme v N prvé väčšie ako 1. A ejhľa, číslo 5 z N je väčšie ako 1 z M, tak pridáme do zoradenej množiny N číslo 1 pred pozíciu tej 5 čo tam už je. Takže máme N{1,5}. A berieme ďalšie z M, teda 6. A znovu porovnávame už zoradenú novú N, a hľadáme prvé väčšie. Bác, žiadne nieje, tak pridáme na koniec. A máme N{1,5,6}. Toľko základný princíp, lebo kolekcia umožňuje vložiť položku Before alebo After alebo na koniec.
Blbé je, ak máme vyhľadávacie kľúče. Tie nezistíme, ak ich nemáme ešte niekde uložené. Zvolil som teda spôsob, že kolekcia nebude obsahovať len samotnú hodnotu, ale aj vyhľadávací kľúč, ktorý je na začiatku pri plnení priradíme. A ako pridáme do kolekcie položku z 2-mi hodnotami (hodnota aj kľúč)? No strelíme do nej pole. Array(položka, kľúč). to je prvá malá komplikácia v kóde.
Druhá malá komplikácia, ktorá Vás bude miasť, je prehadzovanie porovnávaných položiek pri prehodení vzostupného/zostupného radenia. Aby to nebolo komplikované, môžete si urobiť jednoducho 2 samostatné cykly, vykonávané podmienene podľa voľby zoradenia. Či už cez If alebo Select Case.
No a to, že je tam pridaný aj index zoraďovacieho poľa, to je len taký bonus. Ono totiž môže byť niekedy treba do kolekcie natrepať aj širšie pole, a potom môže byť takýto index užitočný. Ale ak to má byť variabilné treba myslieť na to jedným krátkym cyklom ešte, ale to som tam nedával, lebo ak viete, že máte pole 4-och údajov a radiť podľa 3. z nich, tak rovno pri napĺňaní budete plniť poľom o veľkosti 5 položiek (5. je ten kľúč). A áno ak to má byť UNI, treba doplniť o ten cyklus. Tu sa už ale dostávame do bodu, kedy je zrejmé, že makrá sú vo väčšine špecializované, a snaha urobiť niečo absolútne UNI, to len zneprehľadňuje.
Na žiadosť do tejto starej témy pridávam príklad novo požadovaného riešenia, aj s logovaním.
Aké A42? Tam nezadávate oblasť dátumov, ale rozsah, teda prvý a posledný. Priložte príklad v súbore. A musíte zadať ešte 3. parameter 1, ktorý určí že víkend je Pia-Ned. A 4. parameter je oblasť so zoznamom sviatkov.
EDIT2: tak zadajte MAX() z rozsahu dátumov, napr.
=NETWORKDAYS.INTL(A13;MAX(A13:A43);1)
To je maticový vzorec. Zadáva sa Ctrl+Shift+Enter. Nie len Enter.
=IFERROR(TRIM(LEFT(SUBSTITUTE(MID(F2;MIN(IFERROR(SEARCH(" "&{0;1;2;3;4;5;6;7;8;9};" "&F2);FALSE));LEN(F2));" ";REPT(" ";LEN(F2)));LEN(F2)));"")
=IFERROR(PROČISTIT(ZLEVA(DOSADIT(ČÁST(F2;MIN(IFERROR(HLEDAT(" "&{0;1;2;3;4;5;6;7;8;9};" "&F2);NEPRAVDA));DÉLKA(F2));" ";OPAKOVAT(" ";DÉLKA(F2)));DÉLKA(F2)));"")
Ale problém je, keď je hneď za číslom čiarka (24F,) alebo aj s ďalším textom (130,St.Xavier's)
EDIT: Dalo by sa toho zbaviť pridaním ďalších dvoch SUBSTITUTE
=IFERROR(TRIM(LEFT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(F2;MIN(IFERROR(SEARCH(" "&{0;1;2;3;4;5;6;7;8;9};" "&F2);FALSE));LEN(F2));" ";REPT(" ";LEN(F2)));",";REPT(" ";LEN(F2)));".";REPT(" ";LEN(F2)));LEN(F2)));"")
=IFERROR(PROČISTIT(ZLEVA(DOSADIT(DOSADIT(DOSADIT(ČÁST(F2;MIN(IFERROR(HLEDAT(" "&{0;1;2;3;4;5;6;7;8;9};" "&F2);NEPRAVDA));DÉLKA(F2));" ";OPAKOVAT(" ";DÉLKA(F2)));",";OPAKOVAT(" ";DÉLKA(F2)));".";OPAKOVAT(" ";DÉLKA(F2)));DÉLKA(F2)));"")
Pridávam príklad radenia kolekcie, a to tak, že ostáva stále možnosť hľadania cez kľúč. Aj keď to očividne nepotrebujete, lebo chcete asi iba zoradiť data. Stratu kľúča som obišiel tak, že kolekcia neobsahuje len potrebné dáta, ale obsahuje pole, skladajúce sa z dát a z kópie kľúča). Tým pádom potom pri zoraďovaní môžeme daným položkám naspäť priradiť ich kľúč. Zakomponoval som voľbu indexu v poli dát, smerodatného pre to ktorá položka poľa je dátová a navyše zoraďujúca. A tiež som zakomponoval možnosť otočiť zoradenie.
Takže tento príklad iba demonštruje, lepšie by bolo to urobiť asi na mieru daného problému, teda vycucnúť iba potrebné.
Ja by som to zoradil hneď pri napĺňaní.
Sub Naplnit_a_zoradit_naraz()
Dim Col As New Collection, D(), i As Long, y As Long, bKoniec As Boolean
With Worksheets("razeni")
D = .Range("C4:C11").Value2
For i = 1 To UBound(D, 1)
bKoniec = True
For y = 1 To Col.Count
If Col(y) > D(i, 1) Then bKoniec = False: Col.Add D(i, 1), CStr(D(i, 1)), y: Exit For
Next y
If bKoniec Then Col.Add D(i, 1), CStr(D(i, 1))
Next i
ReDim D(1 To Col.Count, 1 To 1)
For i = 1 To Col.Count
D(i, 1) = Col(i)
Next i
.Range("D4").Resize(Col.Count).Value = D
End With
End Sub
Jednoducho
EDIT: Prípadne to úplne stačí aj bez toho obalenia do fnc INDEX(). To ma napadlo, jak som vypil polku piva. Nuž, je to na niečo dobré
To chcete zoradiť rovno položky v kolekcii?
Ak tam máte aj vyhľadávací kľúč, tak to priamo nepôjde. Lebo ten kľúč neskopírujete. Pretože je potrebné to preklopiť cez pole alebo inú kolekciu, a ten kľúč by ste musel mať ešte súbežne uložený v ďalšom poli alebo kolekcii, aby bol dohľadateľný a priradený položke v novovznikajúcej zoradenej kolekcii.
Ak chcete zoradený iba výpis (a kolekcia ostane tak ako je), to ide celkom ľahko.
Ak chcete zoradiť kolekciu ale bez kľúča, tak to tiež pôjde. Obe posledné spomínané cez pomocnú kolekciu.
Najlepšie by ale bolo, to zoradiť jednoducho už pri vytváraní kolekcie.
Treba napísať čo presne je potrebné urobiť. Nech to nerobím zbytočne. Resp. to sa bude dať určo aj vygoogliť.
Môže za to zabezpečený hárok.
Musí byť aspoň 1 viditeľný stĺpec odomknutý (alebo aspoň 1 bunka).
S touto chybou nie ste jediný. Riešenie som nevidel. Zaujímavé, že klik ani šípky či Enter mu nevadia
To si dajte do toho SmartFiltru, to mi príde jednoduchšie (teda ak máte miesto na obrazovke). KT - Analyzovať - Rýchly filter - Typ Vady - zakvačiť Viacnásobný výber (ak treba)
??? Takto? Lenže graf sa stáva neprehľadným. Neviem, asi nerozumiem.
Exporty určite odporúčam do tej istej zložky. Tomuto je fuk, či tam dávate týždenné, či iba jeden celkový (berie všetky súbory v zložke), alebo aj rovnaké či prelínajúce sa exporty (duple si odstráni).
S tým číslom týždňa, to musíme ešte doriešiť, aký typ čísla týždňa používate. ISO ? Uveďte napr tento rok aké chcete mať čísla týždňov pri jednotlivých dňoch. Je rozdiel WEEKNUM a WEEKNUM.ISO. PowerQuery ISO tuším nepozná, ale to by sme možno nejak poriešili.
EDIT: 22.01.2021 10:37: Vymenená príloha, doplnená featurka na výpočet WEEKNUM.ISO, nájdené na nete - snáď fungujúce.
No dobre. Do rôznych zložiek ? Myslíte takto:
11.1 exportujete súbor s názvom "zdrojova-data.xlsx" do zložky "E:\Download\Excel\KW exporty\"
18.1 exportujete súbor s názvom "zdrojova-data.xlsx" do zložky "D:\Dokumenty\"
alebo takto ?
11.1 exportujete súbor s názvom "zdrojova-data.xlsx" do zložky "D:\Dokumenty\KW exporty\KW3\"
18.1 exportujete súbor s názvom "zdrojova-data.xlsx" do zložky "D:\Dokumenty\KW exporty\KW4\"
Následne si potrebujete pozrieť napr. 20.1 aj analýzu dát stiahnutých 11.1?
Ten SW neuchováva dáta dlhšie ako 1 týždeň?
Môj návrh je:
- ak SW neuchováva dáta dlhšie ako týždeň, exportovať ich pod názvom s dátumom do stále rovnakej zložky. Napr. do zložky "D:\Exporty\" uložíme
11.1 súbor "zdrojova-data-2021.01.11.xlsx"
18.1 súbor "zdrojova-data-2021.01.18.xlsx"
- ak SW uchováva celú potrebnú históriu (nemyslím 10 rokov), tak Exportujte vždy celú históriu do stále rovnakého jedného súboru "zdrojova-data.xlsx" v rovnakej zložke napr. "D:\Export\", teda
11.1 súbor "D:\Export\"zdrojova-data.xlsx"
18.1 súbor "D:\Export\"zdrojova-data.xlsx"
Mätie ma to rôzne miesto na disku "ukládám já na různé místo na disku".
Inak v tom nevidím problém, ako ste si mohli všimnúť v predošlých príkladoch.
Upresnite ešte tieto veci, a poriešime to. Takže môže byť ten PowerQuery (Excel 2010 a vyšší)?
@ondrejmalik : Asi hovoríme jeden o voze a druhý o koze.
-Potrebujete si pozrieť, v ktorom týždni bolo koľko chýb nejakého druhu na vybraných linkách.
-Potrebujete nielen za posledný týždeň, ale aj retrospektívne.
-Ten Váš obslužný SW, exportuje plne automaticky, každý pondelok o 00:00:01 vyexportuje dáta za minulý týždeň, a fetrik ? Viac sa s Vami nebaví?
-Tieto dáta ten SW exportuje iba na Váš podnet, kedy si Vy zamaniete?
-Dá sa zmeniť rozsah dátumov exportovaných dát v tom SW? Napr. od dnes rok dozadu?
-Aký súbor presne ten SW poskytne? TXT, CSV, XML, XLS, DAT ... ? Môžete takýto súbor postnúť bez akejkoľvek úpravy?
-Tento súbor z toho SW je vždy ten istý súbor na disku? Teda napr. "C:\Users\Fero Mrkva\Desktop\SW\Export.xls"?
-Alebo každý export (vynútený/automatický) sa ukladá pod samostatným jedinečným menom? Napr. "Export_2021_01_18_00:00:01.xls"?
Ja totiž hovorím o prípade, že Vy máte Excel nakŕmiť priamo tým súborom/súbormi z exportu toho SW. Nie to komplikovane kopírovať a filtrovať a zoraďovať ... To môže urobiť PQ na pozadí.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.