Podmíněné formátování Excel



Dobrý den, naučil jsem se pár věcí v Excelu ohledně podmíněného formátování buněk na základě jejich hodnoty, nevím si ale rady s tím, aby formátování záviselo na hodnotách v jiném sloupci:První sloupec je datum, v dalších několika sloupcích je jednička nebo nula, vždy jen jedno číslo na řádku (v pouze jednom ze sloupců na řádku je 0 nebo 1).Podle toho, jestli je v řádku 0 nebo 1 bych chtěl datum zvýraznit červeně nebo zeleně.Alternativa je zvýraznit celý řádek, ale protože mám barevný i text v některých sloupcích, bylo by to nepřehledné.Díky
Zdravim,tak napr. takhle:sloupec A jsou datumy, sloupec B jmeno, sloupec C obshuje 0 nebo 1. Pokud 1, bude datum v A zelene podbarveny.Oznacit vsechny datumy (radky), zvolit podminene formatovani, nove pravidlo. Zvolit pouzit vzorec a do radky napsat =$C1=1, format vybrat napr. zelene podbarveni a potvrdit OK.Zabarveni celeho radku se provede zvoleni pomineneho formatovani a polozky upravit pravidla. Ve tretim sloupecku je aplikovat na... , kde je oblast ve sloupci A (datumy). Lze to zde zmenit a rozsirit na celou oblast tabulky a bude zvyrazneny cely radek.Podobne muzeme nastavit zabarveni cervene pro hodnotu 0.S pozdravem,syd
<p>tradičně je "seřadit podle" označeno pomocí šipek nahoru/dolů, které představují třídění vzestupně nebo sestupně. názvy sloupců by měly mít vyšší úroveň kontrastu než hodnoty, například odvážnější text nebo stínované pozadí.</p><p>osobně při obarvení střídavých řádků obvykle přecházím na světlejší než na tmavší, protože efekt se zvyšuje tím výrazněji, čím déle vaši uživatelé interagují s tabulkou.</p><p>zde je několik skvělých příkladů možností rozvržení tabulky: <a href="http://patterntap.com/tap/collection/tables">http://patterntap.com/tap/collection/tables</a> </p> <p>i když si myslím, že jste sloupec již vytvořili, v této odpovědi předpokládám, že tento sloupec dosud neexistuje. imo, jedinečný povinný sloupec by měl být přidán <em> nikdy</em> bez plánování, jak naplnit existující řádky první. proto poskytnu metody, jak toho dosáhnout, počínaje nulou.</p><hr><p>jak to uděláte, záleží na tom, co se podílí na naplnění hodnot.</p><p>po použití libovolné metody přidejte do sloupce jedinečné omezení, abyste zajistili integritu dat. u metod 1 a 2 to lze provést v rámci jednoho příkazu nebo v rámci uživatelské transakce (není zobrazeno) a mělo by být provedeno v rámci uživatelské transakce v metodě 3.</p><p>pravděpodobně existuje několik dalších nejasných způsobů, jak to udělat, ale myslím, že jsem se zabýval nejběžnějšími.</p><hr><p><strong> metoda 1: přidejte sloupec identity </strong></p><pre><code>alter table mytable add mycolumn int identity(1, 2) not null </code></pre><p>tím se naplní všechny řádky v tabulce celočíselnými hodnotami začínajícími počátečními hodnotami (1), zvyšujícími se o přírůstkovou hodnotu (2) pro každý řádek. věřím, že pořadí, ve kterém jsou hodnoty naplněny, není definováno (pokud musíte určit objednávku, použijte metodu 3).</p><hr><p><strong> metoda 2: vyplnění pomocí výchozího omezení </strong></p><pre><code>alter table mytable add mycolumn uniqueidentifier not null constraint df\_mytable\_mycolumn default (newsequentialid()) </code></pre><p>to provede atomicky tři věci: 1. přidejte sloupec, který nepovoluje hodnoty <code>null</code>; 2. vytvořte výchozí omezení pro sloupec; 3. vyplňte každý řádek v tabulce pomocí výchozího omezení.</p><p>i když tento příklad používá sloupec <code>uniqueidentifier</code>, funguje stejně dobře s jakýmkoli typem dat a výchozím omezením.</p><hr><p><strong> metoda 3: vyplnění pomocí příkazu update </strong></p><p>tento případ by nastal, když například existuje hodnota z jiné části aplikace, kterou je třeba přidat do tabulky, nebo je třeba zadat přesnou objednávku pro jedinečné hodnoty.</p><pre><code>begin transaction alter table mytable add mycolumn int null update mytable set mycolumn = ... alter table mytable alter column mycolumn int not null commit transaction </code></pre><hr><p><strong> metoda 4: vyplnění pomocí objektu sequence </strong></p><p>pro sql server 2012 můžete naplnit sloupec pomocí hodnot generovaných objektem <code>sequence</code> - s tím jsem ještě nepracoval, takže se budu odkazovat na <a href="http://msdn.microsoft.com/en-us/library/ff878058.aspx">článek msdn</a> pro úplnost.</p> <p>sloupec můžete třídit do sestupného formátu a poté pouze získat hodnotu z n-tého řádku.</p><p>upravit::</p><p>aktualizováno podle požadavku na komentář.<strong> <em>upozorněn&iacute;</em> </strong>zcela nevyzkoušené!</p><pre><code>select dob from (select dob from users order by dob desc) where rowid = 6 </code></pre><p>něco takového by mělo fungovat pro oracle ... možná budete muset nejprve dostat syntaxi!</p> <p>chcete-li zkontrolovat nestandardní řazení ve sloupcích, můžete použít následující dotaz:</p><pre><code>select table\_schema, table\_name, column\_name, collation\_name from information\_schema.columns where collation\_name is not null order by table\_schema, table\_name, ordinal\_position; </code></pre><p>chcete-li najít řazení databáze, je třeba zadat dotaz <code>pg\_database</code>:</p><pre><code>select datname, datcollate from pg\_database; </code></pre><p>zde jsou relevantní stránky příručky postgresql:</p><ul> <li> <a href="http://www.postgresql.org/docs/current/static/infoschema-columns.html">http://www.postgresql.org/docs/current/static/infoschema-columns.html</a> </li> <li> <a href="http://www.postgresql.org/docs/current/static/infoschema-collations.html">http://www.postgresql.org/docs/current/static/infoschema-collations.html</a> </li> <li> <a href="http://www.postgresql.org/docs/current/static/catalog-pg-database.html">http://www.postgresql.org/docs/current/static/catalog-pg-database.html</a> </li> </ul> <p>protože ostatní odpovědi již naznačují, sql server může nebo nemusí explicitně zajistit, že řádky jsou seřazeny v pořadí seskupených indexů před <code>insert</code>.</p><p>to závisí na tom, zda má klastrovaný indexový operátor v plánu sadu vlastností <code>dmlrequestsort</code> (což zase závisí na odhadovaném počtu řádků, které jsou vloženy).</p><p>pokud zjistíte, že sql server to z jakéhokoli důvodu podceňuje, můžete mít prospěch z přidání explicitního <code>order by</code> k dotazu <code>select</code> k minimalizaci rozdělení stránek a následné fragmentaci z operace <code>insert</code></p><p><strong> příklad: </strong></p><pre><code>use tempdb; go create table t(n int primary key,filler char(2000)) create table t2(n int primary key,filler char(2000)) go declare @t table (u uniqueidentifier primary key default newid(),n int) insert into @t(n) select number from master..spt\_values where type = 'p' and number between 0 and 499 /*estimated row count wrong as inserting from table variable*/ insert into t(n) select t1.n*1000 + t2.n from @t t1, @t t2 /*same operation using explicit sort*/ insert into t2(n) select t1.n*1000 + t2.n from @t t1, @t t2 order by t1.n*1000 + t2.n select avg\_fragmentation\_in\_percent, fragment\_count, page\_count, avg\_page\_space\_used\_in\_percent, record\_count from sys.dm\_db\_index\_physical\_stats(2, object\_id('t'), null, null, 'detailed') ; select avg\_fragmentation\_in\_percent, fragment\_count, page\_count, avg\_page\_space\_used\_in\_percent, record\_count from sys.dm\_db\_index\_physical\_stats(2, object\_id('t2'), null, null, 'detailed') ; </code></pre><p>ukazuje, že <code>t</code> je masivně roztříštěný</p><pre><code>avg\_fragmentation\_in\_percent fragment\_count page\_count avg\_page\_space\_used\_in\_percent record\_count      99.3116118225536 92535 92535 67.1668272794663 250000 99.5 200 200 74.2868173956017 92535 0 1 1 32.0978502594514 200 </code></pre><p>ale pro <code>t2</code> fragmentace je minimální</p><pre><code>avg\_fragmentation\_in\_percent fragment\_count page\_count avg\_page\_space\_used\_in\_percent record\_count      0.376 262 62500 99.456387447492 250000 2.1551724137931 232 232 43.2438349394613 62500 0 1 1 37.2374598468001 232 </code></pre><p>naopak někdy budete chtít donutit sql server, aby podceňoval počet řádků, když víte, že data jsou již předem roztříděna a chcete zabránit zbytečnému třídění. jedním z pozoruhodných příkladů je vložení velkého počtu řádků do tabulky pomocí seskupeného indexového klíče <code>newsequentialid</code>. <a href="https://connect.microsoft.com/sqlserver/feedback/details/668540/unnecessary-sort-operation-for-insert-into-clustered-index-with-newsequentialid-key">ve verzích sql serveru před denali sql server přidává zbytečnou a potenciálně nákladnou operaci řazení</a> . tomu lze zabránit</p><pre><code>declare @var int =2147483647 insert into foo select top (@var) * from bar </code></pre><p>sql server poté odhadne, že bude vloženo 100 řádků bez ohledu na velikost <code>bar</code>, která je pod prahem, při kterém je do plánu přidáno řazení. jak je však uvedeno v poznámkách níže, znamená to, že vložka bohužel nebude moci využít výhody minimálního protokolování.</p> <p>přiznávám, že jsem to nikdy předtím neudělal, takže došlo k trochu poškrábání hlavy. jednoduchá ukázková tabulka, která demonstruje:</p><pre><code>if exists (select * from sys.objects where object\_id = object\_id(n'[dbo].[mytable]') and type in (n'u')) drop table [dbo].[mytable] go create table dbo.mytable ( col1 int , col2 char(1) ) go insert dbo.mytable (col1, col2) values (1, 'a') insert dbo.mytable (col1, col2) values (1, 'b') insert dbo.mytable (col1, col2) values (1, 'c') insert dbo.mytable (col1, col2) values (2, 'a') insert dbo.mytable (col1, col2) values (2, 'b') insert dbo.mytable (col1, col2) values (2, 'c') insert dbo.mytable (col1, col2) values (3, 'a') insert dbo.mytable (col1, col2) values (3, 'b') insert dbo.mytable (col1, col2) values (3, 'c') </code></pre><p>pomocí parametru @sortstyle k rozlišení objednávek řazení se @sortstyle = 1 třídí podle <code>col1 asc, col2 desc</code> a @ sortstyle = 2 seřadit podle <code>col2 desc, col1 asc</code>.</p><pre><code>declare @sortstyle int set @sortstyle = 1 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc set @sortstyle = 2 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc </code></pre><p> <a href="https://dba.stackexchange.com/questions/4104/how-do-you-order-by-a-parameter/4111#4111">jak se objednáváte parametrem</a> pokrývá jednodušší případ třídění podle 1 sloupce.</p> <p>nevidím s tím velký problém, i když existuje nebezpečí, že druhý řádek bude nesprávně interpretován - např. jako „sublistování“ na rozdíl od pokračování strouhanky. možná budete chtít zdůraznit pokračování pomocí vedoucího oddělovače a může také pomoci záporná textová odrážka (druhý řádek je potom odsazen).</p><p>navrhoval bych, že pokud je váš řádek „strouhanky“ v plné šířce a stále se obtéká přes více řádků, můžete mít v hierarchii příliš mnoho úrovní nebo jsou názvy strouhanky příliš dlouhé, z nichž každá může snížit použitelnost.</p> <p>není specifický pro css, tj. obecně nezáleží na tom, zda určíte jednu barvu v hsl nebo rgb, kde je důležité, pokud potřebujete interpolovat přes hodnotu barvy, přechod z červené na zelenou v hsl je mnohem předvídatelnější než v rgb. a můžete to udělat beze změny vnímaného jasu barvy. to znamená, že je užitečné, kdykoli potřebujete změnit barvu (vyblednutí, sklon ...)</p><p>je také snazší vybrat barvu v hsl/hsb (jedná se o dva mírně odlišné barevné modely). výběr barvy photoshopu, který vidíte, je výběr barvy hsb, zvolte h na liště vlevo, zvolte s na horizontální ose barevné záplaty a b na vertikální ose.</p> <p>měli byste zvážit formát iso 8601 (2013-04-01t13: 01: 02). ano, existují normy pro tyto věci. dvojtečky a spojovníky mohou být vynechány.</p><p>řetězec formátu, který obvykle používám, je <code>%y%m%dt%h%m%s</code> a přináší 20130401t130102. v závislosti na požadavcích vynechávám hodnoty zleva. v bash skriptu dostanu datum s řádkem jako:</p><pre><code>logdate=$(date +%y%m%dt%h%m%s) </code></pre> <p>mohl bych o tom dál podrobně hovořit, ale tady není správné fórum (bývalý poradce pro život = vzdělávání v oblasti osvojování jazyků (la) a zpoždění la).</p><p>stručně řečeno: protože funkce textu je rozhodující pro to, co děláte, nejlepší volbou je poskytnout nějaký důraz na text, aniž by to narušilo jeho čitelnost. nejjednodušší způsob, jak toho dosáhnout, je velká písmena prvního písmena každého slova, jako v prvním příkladu.</p><p>ve skutečnosti je vaše současné pořadí příkladů do značné míry v pořadí od nejlepších po nejhorší možnosti.</p><p>je zřejmé, že je třeba vzít v úvahu také grafický design stránky - ale to tu nemáme, takže můj názor je založen čistě na tom, co čtenáři nejrychleji pochopí.</p><p>(zdá se, že počáteční přístup pouze k omezení počtu titulů je stále populárnější - např. nadpis - což je škoda. západní čtenáři tento vzhled snadno spojí se začátkem věty, takže očekávají, že další text bude okamžitě následovat. ne následovat - jako ve vašem případě - způsobí chvilkovou pauzu, úpravu. trvá to jen milisekundy, ale nastane, a pokud je to možné, doporučuji se jí vyhýbat.)</p><p>všimněte si, že rahulův ne-příklad by byl v téměř každém případě tím nejhorším rozhodnutím, jaké byste mohli učinit.</p>