Čísla 1 až 100 + 100 řádků?
Takže nechcete generátor náhodných čísel, ale náhodně rozhodit čísla 1 až 100.
A1:=RANDBETWEEN(1;100)+ŘÁDEK()/1000B1:=RANK(A1;$A$1:$A$100)Pak oba vzorce zkopírujte na 100 řádků (A1:B100). Po stisku F9 se ve sloupci B "vygeneruje" nová sada.
Děkuji.
Tabulku dat jsem používal před pár lety, ale nějak to vyšumělo. Takže jsem dnes s pomocí nápovědy své základy obnovil. Teď si s ní ve volných chvílích zkusím hrát.
1) obrázky - příloha by byla lepší
2) nerozumím jak pracujete.
a) Pokud máte každý den 24 údajů z předešlého dne - tak dejte kopírovat - vložit jinak jako hodnoty plus transponovat - jednou denně.
b) Nebo je to databáze dat a potřebujete to rozhodit do tabulky = kontingenční tabulka.
Ale myslím, že c) je správně. Jen nevím jak je to c) . ;))
@lubo
K tomu cyklu. Obvykle používám tabulku dat
Toto by mně zajímalo. Mohl byste to rozvést?
Formát buňky slouží k tomu, aby zobrazil hodnotu buňky v požadovaném tvaru. To znamená, že pokud je buňka prázdná, žádná hodnota tam není a tak se prostě nic nezobrazí. Něco jiného je, pokud do ní vložíte řetězec o nulové délce. V tu chvíli už prázdná není a můžete použít formát "ahoj";"ahoj";"ahoj";"ahoj" nebo ;;;"ahoj". V tu chvíli to pro Vás ale ztrácí smysl, protože to děláte kvůli pohybu v listu.
Ten Váš @"Ahoj" není úplně správně, protože říká, že se má zobrazit hodnota buňky tak jak je vložená a k ní přilepit slovo ahoj. Takže pokud do ní napíšu 1,15646786 zobrazí se 1,15646786Ahoj.
Napsal jste funkci, o které tvrdíte, že je UDF. A pak ji testujete v prostředí jazyka VBA? Tedy vylučujete přístup z listu do VBA?
Ano, mohl jsem to vyzkoušet na čistém listu - nicméně pro mne to není korektní test.
Já Vám to tedy vysvětlím:
1 000 000x jste zavolal funkci a počítal v nepřirozeném prostředí VBA.
Já, protože tu fci nepovažuji za užitečnou jsem kvůli ni nevytvářel nějaký extra sešit, ale použil co mám. Proto jsem musel cyklus zkrátit na 100 kroků. Nejdříve jsem zadal 1. a pak 2. funkci - pro jednoduchost řekněme, že ty pomalé ostatní činnosti (zadání hodnoty, kalkulace, událostní procedury) trvaly 100s. Měřit to nebudu - v reálu to určitě bylo víc. Těch 100 s ale trvaly (v ideálním případě) v obou případech stejně - takže když je odečtu - mám co? Čas 100xvýpočtu volaného z listu v obou případech a můžu porovnat. 100 kroků je hodně málo na relevantní výsledek, ale i tak je něco vidět.
Nicméně tolik k testování. Diskutuji s Vámi o tom jen proto, že si to tu může přečíst někdo další a nabyde dojmu, že je zbytečné používat funkce a je lepší si vše napsat sám. Vás očividně nepřesvědčím a ani se o to nesnažím, je mi to jedno. Pro ostatní je ovšem lepší vědět, že to není tak jednoduché. O stovkách ušetřených hodin nemůže být v excelu ani řeč. Excel je operativní nástroj - tzn. to jak říkáte jednorázové použití je velice časté a nebojím se říci ve většině případů ("Tady máš data a potřebuji z toho zjistit to a to. Jo a mimochodem, potřebuji to hned"). Já mám několik souborů, které jsou jakžtakž stále stejné. Ale kolik jich vytvořím operativně? Jsem člověk s provozu - excel neučím, nevytvářím aplikace na zakázku. Tím pádem ani netvrdím, že nějaká koluje mezi anonymními uživateli i po 10ti letech a ti ji spokojeně používají dodnes. Já s excelem denně pracuji. Použití integrované funkce znamená použití normalizované syntaxe, která je všude stejná a tak, když si to otevře někdo jiný, nemusí přemýšlet co to je, protože to má v nápovědě.
Váš test dokázal, že při 1 milionu výpočtů neušetřím nic a musím funkci napsat. Můj test ukázal to samé. Kde je tedy přínos? Jednotná syntaxe? A nebo jen další funkce k zaokrouhlování. Já prostě použiju kolekci WorksheetFunction a mám to.
Pak jsem se zamyslel a našel jednoduchý způsob, jak ladit jeden samotný vzoreček: stačí na tu chvíli vypnout Volatile. Na jeden vzoreček nepotřebuji vypínat Volatile. Pokud je ovšem další průběh kódu závislý na výsledku UDF, je Vaše myšlenka k ničemu. Mimochodem stačí použít CTRL+F8 a nemusím nic vypínat. Nic to nemění na tom, že je to otravné.
K tématu UDF vs FCE ode mne už opravdu vše.
@Vovka
Dobrá - pro Vás ještě jednou - pokud chci otestovat vliv vzorce na kalkulace a události, tak ho musím do listu vložit. Vaše hodnotové pole mi s tím nepomůže. Nechci být nejrychlejší - já chci simulovat a testovat. Tady tedy dávám kód, kterým jsem to dělal (jen jsem upravil Váš a myslel jsem, že to není potřeba vkládat). Soubor Vám sem nedám, protože je to pracovní soubor.Sub test2()
Application.ScreenUpdating = False
Dim i As Long
Dim Cas1 As Single, Cas2 As Single, Cas3 As Single, Cas4 As Single
ActiveCell.FormulaR1C1 = "=CEILING(R[1]C,0.1)"
Cas1 = Timer
For i = 1 To 100
ActiveCell.Offset(1, 0).Value = 123.4 + i / 1000
Next i
Cas2 = Timer
ActiveCell.FormulaR1C1 = "=RoundX(R[1]C,0.1,1)"
Cas3 = Timer
For i = 1 To 100
ActiveCell.Offset(1, 0).Value = 123.4 + i / 1000
Next i
Cas4 = Timer
MsgBox "Jedno sto pro každou funkci:" & vbCrLf _
& "Ceiling (X, 0.1)" & vbTab & vbTab & Format(Cas2 - Cas1, "0.000") & " sec" & vbCrLf _
& "RoundX (X, 0.1, 1)" & vbTab & vbTab & Format(Cas4 - Cas3, "0.000") & " sec", _
vbInformation, "SROVNÁVACÍ VÝKONOVÝ TEST"
Application.ScreenUpdating = True
End SubTakže pokud je použití napsat vzorec s odkazem na hodnotu nevhodné...
;)))
Já už jsem napsal, vše co jsem chtěl. Jen poznámka k nevhodnému použití. Je fajn, že u mne předpokládáte nevhodné použití ;)) . Do jedné buňky jsem vložil vzorec a do druhé cyklem vkládal hodnoty. Jak byste to udělal vy? (nemusíte odpovídat ;)) )
Hehe - tak teď jste mně vážně dostal - já se s tím píšu a vono už je to na mém blogu hotové - jen mi to samotnému nedocvaklo - alespoň jsem to řešil stejně. CONCATENATE_RANGEIF - http://elcha-en.blogspot.cz/2014/12/array-formula-cse-in-vba-code.html
vyzkoušejte přílohu - napsal jsem Vám na to funkci.
Výsledek testů v příloze
@Vovka
mno když se Vám, tak líbila. Prosím, abyste si žádný argument nebral osobně.
Obávám se, že to není tak jednoduché. Pokud by oprava změnila chování funkce a v některém starém sešitu by tu chybou někdo vědomě využíval, začal by se ten starý sešit chovat vadně. Změna chování funkce si podle mne přímo vynucuje nové jméno funkce.
Ano toto je pravda. Když vezmeme v úvahu, že na světe používají excel miliony uživatelů tak je téměř jisté, že tento případ někde existuje. Možná jich budou i tisíce. Pokud toto někdo má, jedná se o pokročilého uživatele, který na to přijde, zjistí příčinu a opraví si. Já teď jen přemýšlím, jestli je lepší přesvědčit "pár" pokročilých uživatelů, že si mají svá řešení opravit nebo nutit miliony ostatní uživatelů aby s každou verzí kontrolovali, jestli náhodou není nová varianta jejich funkce. Rozhodnutí není na mne, přesto si myslím, že takto je to špatně. Že to uživatelé dělat nebudou lze vidět i tady na tomto fóru.
Tohle by v žádném případě nemělo zaniknout! Je to pěkné a úplné řešení toho problému
Není to úplné řešení. Co tohle?=MROUND(A1;SIGN(A1)*A2)
Každé tvrzení má mít své opodstatnění. Proto jsem provedl svůj výkonový test, o kterém píšu shora
Toto je věčná diskuse ne nepodobná POSUN vs INDEX (volatilní vs nevolatilní). Když jsem začínal, tak jsem si to také zjišťoval - hledal co je lepší? Vzhledem k tomu, že excel je napsán (nebo byl, nevím jak je to teď) v jazyce C, resp. C++ a UDF jsou ve VB... - ale to už je akademická debata. PC se stále zrychlují tak toto srovnání už je asi zbytečné. Teď ale ta praktická část. Nezpochybňuji, že UDF může být rychlejší (stejně jako jiné funkce - já si například napsal vlastní filtr souborů v adresáři, protože integrovaný na 1 pc jel bleskově a na druhém několik minut!). Ale
1) UDF je pomalejší, protože si ji musím napsat a odladit.
2) UDF je pomalejší, protože musím uložit soubor s povolenými makry (nebo uložit do bezpečného adresáře).
3) UDF je pomalejší, protože musím při spuštění povolit makra.
4) UDF je nehorázně otravná a pomalá, když potřebuji ladit nějaký projekt (krokovat) a je v listu obsažena několikrát (mohou to být stovky - vlastní zkušenost).
Mohl bych pokračovat, ale toto pro mne jsou hlavní důvody. A ještě jeden - za excel jsem si zaplatil a proto ho nepoužívám jako DataGrid, ale jako tabulkový kalkulátor. Pro mne je v excelu nejlepší programátor ten, který napíše nejméně kódu.
A k Vašemu výkonovému testu - záleží PC od PC. Možná Vás potěší, že u mne to v laboratorních podmínkách (Váš test - bez vlivu na list) RoundX jednoznačně vyhrála.
Pak jsem ji integroval do souboru, který obsahuje desetitisíce výpočtů a události change a je prošpikován kódem. Tam už prohrála a to jsem musel počet cyklů snížit na 100 (oba spodní případy - u toho prvního jsem zapomněl změnit text).
;))
není problém přidat další podmínku
A tady je opraveno záporné číslo v požadovaném tvaru - podmíněné formátování ;)))
Tady je to v požadovaném tvaru
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.