Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel - pomoc s funkcí COUNTIFS

Pěkné dopoledne,
peru se tu s Excelem a funkcí COUNTIFS (která by měla být pro můj účel vhodná).
Mám sloupeček TIMESTAMP, který má formát "čas" a každá hodnota inkrementálně roste vždy o jednu minutu.
Dále mám sloupeček STARTMOMENT a ENDMOMENT, které jsou také formátu "čas". Tyto dva sloupečky definují časový interval "od - do" a každý nový řádek představuje nový interval.

Úkolem je pro každý TIMESTAMP spočítat, kolikrát se daný časový moment vyskytuje ve všech intervalech (řádcích) definovaných sloupečky STARTMOMENT a ENDMOMENT.

Mám to vyřešené už makrem, teď se pokouším o řešení vzorcem - protože to bude aplikováno na desetitisíce timestamps a intervalů...
Pokud vám to přijde povědomé, tak navazuji na starý thread - pouze jsem si dovolil to dát jako nový dotaz, ať neexhumuju starý thread...

Děkuji.

Předmět Autor Datum
Jestli tohle jde dát do vzorce (vzorců) tak kloubouk dolů kdo sem dá funkční řešení. ;-) (ty interva…
TNT 19.11.2012 16:22
TNT
Těch timestampů bylo cca čtvrt milionu a intervalů kolem deseti tisíc. Běhal jsem to na i5, ale makr…
Moas 20.11.2012 07:30
Moas
Máš to takmer správne, len máš vymenené znamienka a nesprávne oblasti. Vzorec má vyzerať takto: =CO…
los 19.11.2012 18:31
los
Díky moc, určitě je ten vzorec správně? Když si sloupec TIMESTAMP s opraveným vzorcem ve sloupci C r…
Moas 19.11.2012 19:42
Moas
Vzorec je určite správne. Ten čas 19.10.12 7:22 sa nachádza v týchto intervaloch: 18.10.12 13:27 19…
los 19.11.2012 20:04
los
Už to všechno chápu. Děkuji. :beer:
Moas 20.11.2012 06:59
Moas
Ještě jedna drobnost (a je mi už žinantní dávat nový dotaz)... Pokouším se celý vzorec s COUNTIFS vl…
Moas 20.11.2012 09:25
Moas
Zkus tohle: Range("X1").Formula = "=COUNTIFS(List1!R2C21:List1!R100000C21,""<=""&R[1]C1,List1!R2C22…
Siki83 20.11.2012 11:11
Siki83
Mám vyřešeno - stačilo středníky nahradit čárkami a vnitřní uvozovky zdvojit. poslední
Moas 20.11.2012 14:39
Moas

Jestli tohle jde dát do vzorce (vzorců) tak kloubouk dolů kdo sem dá funkční řešení. ;-) (ty intervaly ve vzorku se překrývají!)

Jak píšeš desítky tisíc timestampů a intervalů. Jak to dlouho jede přes makro? Jaký je poměr timestampů a intervalů? Na jakém počítači (procesor)? Jen pro zajímavost. Dík.

Těch timestampů bylo cca čtvrt milionu a intervalů kolem deseti tisíc. Běhal jsem to na i5, ale makro zdá se běhá jen na jednom jádru, resp. chápu, že to samo od sebe nebude vícejádrové. Každopádně večer jsem to pustil a ráno když jsem přišel do práce, tak bylo hotovo.
Losův vzorec vytěžuje všechna čtyři jádra a zdá se, že bude rychlejší, byť tedy i na zkušebním vzorku tisícovky timestampů a pěti stovek intervalů maká CPU asi tři minuty, než to propočítá. Ale aspoň jedou všechna jádra.

Máš to takmer správne, len máš vymenené znamienka a nesprávne oblasti. Vzorec má vyzerať takto:

=COUNTIFS($E$3:$E$19;"<="&$B3;$F$3:$F$19;">="&$B3)

Edit: A to s tým zvyšovaním času stále platí, takéto chyby zo zaokrúhľovania môžu byť dosť nepríjemné. Do bunky B4 daj nasledovný vzorec a rozkopíruj nižšie:

=$B$3+$A$1*(ROW($B4)-ROW($B$3))

Edit2: Aha, ako sa pozerám, tak tie znamienka som mal vymenené v tej pôvodnej otázke, ale keďže tam boli v oboch stĺpcoch takmer všade rovnaké časy, tak som si to nevšímol. :-[

Díky moc,
určitě je ten vzorec správně?
Když si sloupec TIMESTAMP s opraveným vzorcem ve sloupci C roztáhnu dále (až třeba do 20.10.), tak mi ten vzorec pro "19.10.12 7:22" vrací 3 výskyty, i když ten interval E3:F19 takovou hodnotu obsahuje pouze jednou...

Ten vzorec pro odstranění možné chyby zaokrouhlení - co je to za magii? :) Funkci ROW znám, ale totok?

Vzorec je určite správne. Ten čas 19.10.12 7:22 sa nachádza v týchto intervaloch:

18.10.12 13:27	19.10.12 7:38
18.10.12 15:58	19.10.12 8:52
19.10.12 7:22	19.10.12 7:24

S tým zaokrúhľovaním je to tak, že pri každom výpočte vzniká nejaká odchýlka δ. Keď počítaš ďalšiu hodnotu postupnosti podľa jej predchádzajúceho člena, tak sa celková odchýlka kumuluje.

B3 = x
B4 = x + c ± δ
B5 = x + c ± δ + c ± δ
..
Bn = x + (n-3)c ± (n-3)δ

Namiesto toho sa dá vypočítať n-tý člen postupnosti priamo, kde nemáš takú veľkú odchýlku:

Bn = x + (n-3)c ± δ

Funkcia ROW je použitá na výpočet n (=ROW($B4)) a konštanty 3 (=ROW($B$3)).

Ještě jedna drobnost (a je mi už žinantní dávat nový dotaz)...
Pokouším se celý vzorec s COUNTIFS vložit pomocí VBA do buňky X1. Použil jsem

Range("X1").Formula = "=COUNTIFS(SheetName!$U$2:SheetName!$U$100000;" <= "&$A2;SheetName!$V$2:SheetName!$V$100000;" >= "&$A2)"

Ale to nezabralo. Type Mismatch. Nejspíš se mu nelíbí vnořené uvozovky. Zkusil jsem tedy všechny čtyři výskyty vnořených uvozovek zdvojit, to nepomohlo. Našel jsem nějaké podobné situace na webu, ale nezadařilo se mi to zduplikovat pro moje potřeby.
Děkuji.

Zpět do poradny Odpovědět na původní otázku Nahoru