Vysvetliť ??? To by bolo na dlho. Skúsim to iba krátko popísať.
Pre zjednodušenie chápania vzorcov je použitých niekoľko Definovaných názvov:
PODSKUPINA
=OFFSET(STOPS!$K$1;MATCH(DISORDER_A!$A2;STOPS!$B$2:$B$1998;0);;COUNTIF(STOPS!$B$2:$B$1998;DISORDER_A!$A2))
=POSUN(STOPS!$K$1;POZVYHLEDAT(DISORDER_A!$A2;STOPS!$B$2:$B$1998;0);;COUNTIF(STOPS!$B$2:$B$1998;DISORDER_A!$A2))MATCH nájde pozíciu (druhý riadok má index 1), kde sa nachádza lis
COUNTIF zistí počet záznamov toho lisu
OFFSET použije tieto 2 hodnoty na nastavenie oblasti podskupiny (predpoklad je, že sú pokope zoskupené !!!)
Pri zadávaní tohto vzorca do Def. názvu je potrebné stáť na 1. výsledkovej bunke E2.
POZNAMKA
=OFFSET(PODSKUPINA;;2)
=POSUN(PODSKUPINA;;2)Poznámka je tá istá oblasť, len posunutá o 2 vpravo
PROSTOJ
=OFFSET(PODSKUPINA;;-5)
=POSUN(PODSKUPINA;;-5)Prostoj je opäť tá istá oblasť, len posunutá o 5 vľavo
CHYBY
=((PODSKUPINA<>"")*1)+((POZNAMKA<>"")*2)
=((PODSKUPINA<>"")*1)+((POZNAMKA<>"")*2)Kvôli spájaniu pomlčkou " - " treba rozlíšiť 4 stavy:
-žiadna chyba ani v Podskupine, ani v Poznámke (0 nebude nič písať)
-chyba iba v Podskupine (1 nebude dávať za ňu pomlčku)
-chyba iba v Poznámke (2 nebude dávať pomlčku pred ňu)
-chyby aj v Podskupine aj v Poznámke (3 bude medzi ne dávať pomlčku)
tie spočítané príznaky (0,1,2,3) sa nakoniec použijú v CHOOSE/ZVOLIT na určenie toho, čo sa má udiať ohľadom pomlčky.
IDX_CHYBY
=IF(CHYBY>0;ROW(PODSKUPINA)-MIN(ROW(PODSKUPINA))+1)
=KDYŽ(CHYBY>0;ŘÁDEK(PODSKUPINA)-MIN(ŘÁDEK(PODSKUPINA))+1)Keďže niektoré riadky v oblasti lisu nemusia obsahovať chybu, potrebujeme si zistiť indexy tých v oblasti, ktoré chybu majú. Takže otestujeme predošlý názov CHYBY na číslo >0 a priradíme mu vypočítaný index (teda riadok oblasti lisu mínus prvý riadok oblasti lisu [MIN slúži na určenie 1. riadku, dá sa použiť aj MATCH ako v prvom vzorci])
PORADIE_CHYBY
=SMALL(IDX_CHYBY;INT((COLUMN()-5)/3)+1)
=SMALL(IDX_CHYBY;CELÁ.ČÁST((COLUMN()-5)/3)+1)No a tento Def. názov už iba vracia postupne od najmenšieho indexy, v ktorých sa nachádza nejaká chyba (predchádzajúci Def. názov IDX_CHYBY). Poradové číslo chyby sa mení vždy každé 3 stĺpce. Teda E,F,G = 1; H,I,J = 2; K,L,M = 3 ...
Kompletujúci vzorec je
=IFERROR(CHOOSE(INDEX(CHYBY;PORADIE_CHYBY);INDEX(PODSKUPINA;PORADIE_CHYBY);INDEX(POZNAMKA;PORADIE_CHYBY);INDEX(PODSKUPINA;PORADIE_CHYBY)&" - "&INDEX(POZNAMKA;PORADIE_CHYBY));"")
=IFERROR(ZVOLIT(INDEX(CHYBY;PORADIE_CHYBY);INDEX(PODSKUPINA;PORADIE_CHYBY);INDEX(POZNAMKA;PORADIE_CHYBY);INDEX(PODSKUPINA;PORADIE_CHYBY)&" - "&INDEX(POZNAMKA;PORADIE_CHYBY));"")V ňom sa na základe CHYBY (viď popis) rozhoduje či sa uplatní
1 - chyba iba v Podskupine
INDEX(PODSKUPINA;PORADIE_CHYBY)2 - chyba iba v Poznámke
INDEX(POZNAMKA;PORADIE_CHYBY)3 - obe chyby
INDEX(PODSKUPINA;PORADIE_CHYBY)&" - "&INDEX(POZNAMKA;PORADIE_CHYBY)0 - stav bez chyby ošetruje IFERROR, lebo CHOOSE s parametrom 0 dá chybovú hodnotu (musí začínať od 1), a to vyrieši IFERROR.
To bez chyby sa dá urobiť aj tak, že sa k CHYBY pripočíta 1 a riešenie stavov v CHOOSE bude
1 - bez chyby
""2 - chyba iba v Podskupine
INDEX(PODSKUPINA;PORADIE_CHYBY)3 - chyba iba v Poznámke
INDEX(POZNAMKA;PORADIE_CHYBY)4 - obe chyby
INDEX(PODSKUPINA;PORADIE_CHYBY)&" - "&INDEX(POZNAMKA;PORADIE_CHYBY)
Načítanie času je jednoduché, podľa rovnakého princípu indexu chyby
Čas v minutách, tu som urobil chybu, treba
=IF(F2="";"";MINUTE(F2))
=KDYŽ(F2="";"";MINUTA(F2))opraviť napr. na toto
=IF(F2="";"";TEXT(F2;"[m]")*1)
=KDYŽ(F2="";"";HODNOTA.NA.TEXT(F2;"[m]")*1)
EDIT: Príloha v pôvodnom príspevku vymenená za novú s týmto novým počítaním minút.
2 pr.
No skúste, či to bude použiteľné...
Ak som to pochopil správne, tak sa dá použiť aj kratší vzorec:
=TRIM(MID(SUBSTITUTE($A2;" ";REPT(" ";LEN($A2)));(COLUMN(A1)-1)*LEN($A2)+1;LEN($A2)))
=PROČISTIT(ČÁST(DOSADIT($A2;" ";OPAKOVAT(" ";DÉLKA($A2)));(SLOUPEC(A1)-1)*DÉLKA($A2)+1;DÉLKA($A2)))
@simplynever1: Na pochopenie každého vzorca odporúčam použiť na karte "Vzorce" krokovanie vzorca pomocou "Vyhodnotiť vzorec". Samozrejme nie na 2000 riadkoch, ale iba na 10, aby ste videl, čo sa deje.
Chcete zoradiť podľa abecedy, alebo len zoradiť pod seba, tak ako idú ?
Toto ich dá tak ako idú:
=IFERROR(INDEX($M$3:$M$25;SMALL(IF($M$3:$M$25<>"-";ROW($M$3:$M$25)-2);ROW(M1)));"")
=IFERROR(INDEX($M$3:$M$25;SMALL(KDYŽ($M$3:$M$25<>"-";ŘÁDEK($M$3:$M$25)-2);ŘÁDEK(M1)));"")
a toto ich aj zoradí podľa abecedy (nesmú sa ale opakovať):
=IFERROR(INDEX($M$3:$M$25;MATCH(ROW(M1)-1;IF($M$3:$M$25<>"-";COUNTIFS($M$3:$M$25;"<"&$M$3:$M$25;$M$3:$M$25;"<>-"));0));"")
=IFERROR(INDEX($M$3:$M$25;POZVYHLEDAT(ŘÁDEK(M1)-1;KDYŽ($M$3:$M$25<>"-";COUNTIFS($M$3:$M$25;"<"&$M$3:$M$25;$M$3:$M$25;"<>-"));0));"")
"Jiří49" napsal/a:
...elninoslov přijde se "zázračným" maticovým vzorcem...
No a čo skúsiť KT?
Priložte prílohu. A to ste mohol pokračovať v predchádzajúcom vlákne, v ktorom je riešenie predošlej variácie dotazu, na ktoré ste ani nereagoval.
https://pc-help.cnews.cz/viewtopic.php?p=1689208#p1689208
Maticový vzorec:
=SUM((LEN(A1:A10)-LEN(SUBSTITUTE(LOWER(A1:A10);LOWER(G1);"")))/LEN(G1))
=SUMA((DÉLKA(A1:A10)-DÉLKA(DOSADIT(MALÁ(A1:A10);MALÁ(G1);"")))/DÉLKA(G1))
V G1 je hľadaný text.
Uveďte nejaké požiadavky, príklady, prílohy, popis, nech sa vieme rozhodnúť, či budeme vedieť ako postupovať.
Dá sa použiť CLng()
DATEoldCOUNT = WorksheetFunction.CountIf(OblastSMAZ, "<" & CLng(DATEnow))
alebo Long namiesto dátumu
Dim DATEnow As Long
PS: Ale viete o tom, že to bude kolabovať ak bude oblasť SpecialCells(xlCellTypeVisible) rozdelená filtrom.
Pošlite prílohu,nech je jasné odkiaľ makro spúšťate a čo je v listoch. Z toho sa bude dať snáď vydedukovať, čo chcete urobiť.
V polospánku :
Sub add()
Dim WS As Worksheet, Nazov As String
Nazov = Format(Now, "dd.mm.yyyy")
On Error Resume Next
Set WS = Worksheets(Nazov)
On Error GoTo 0
If Not WS Is Nothing Then MsgBox "Nelze přidat, jelikož se den už v sešitě nachází", vbExclamation: Exit Sub
Worksheets("VZOR").Visible = True
Worksheets("VZOR").Copy After:=Worksheets(Worksheets.Count)
Worksheets("VZOR").Visible = False
Set WS = Worksheets(Worksheets.Count)
WS.Range("A1").Value = Nazov
WS.Name = Nazov
ActiveWindow.Zoom = 55
End Sub
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.