K tomu řešení bez pomocných sloupců - je tu něco za něco. Bez pomocných sloupců se sloupce spojují v každém vzorci, při velkém počtu vzorců to stojí dost času a také dost zdrojů.
Nechtělo se přemýšlet, jestli seznam znamená ano nebo ne.
Proč filtr ve 2007 nefunguje nevím, tuto verzi teď nemám. Můžeš zkusit alternativu
=KDYŽ(F11<>tblCountryAF[country];NEPRAVDA;
KDYŽ(JE.NEDEF(POZVYHLEDAT(G11;tblVendorAF[vendor];0));NEPRAVDA;
POZVYHLEDAT(H11;tblSourceDataAF[cv];0)<>(ŘÁDEK(H11)-ŘÁDEK(tblSourceDataAF[[#Záhlaví];[cv]]))))
Pár poznámek.
Řešit toto bez třídění je horor. Nástroje, jako PQ, to dělají někde uvnitř.
Třídění pomůže při identifikaci položek k odstranění.
Dále doba odstraňování více záznamů z podobně velkých datech je úměrná počtu samostatných bloků. To nejhorší co lze udělat je odstraňovat položky po jedné. (Pokud je jich víc než jedna až několik.)
Pokud si zadavatel neváží svého času, zamysli se na vzorci:
=KDYŽ(
SOUČIN.SKALÁRNÍ(
(($G$11:G11&$H$11:H11)=([@country]&[@vendor]))*
([@country]=tblCountry[country])*
COUNTIF(tblVendor[vendor]; [@vendor]))
<2; "keep"; "delete")
Na každém řádku spojí sloupce porovná a vytvoří sloupce shoda/neshoda.
Každá položka vytvořeného vektoru se násobí. To se děje i v případě, že pro danou country a nebo dodavatele se duplicity nemažou.
Tedy ohromný počet výpočtů, současně SOUČIN.SKALÁRNÍ není nejefektivnější funkce.
1. Pomocný sloupec s [country]&[vendor]
2. Samostatně (více sloupců nebo vnořené KDYŽ)
když(country; nechat;
když(dodavatel;nechat;
když(unikátní;nechat;smazat)))
Tak se eliminují zbytečné operace.
K hledání unikátních položek je vhodná funkce POZVYHLEDAT (MATCH):
=POZVYHLEDAT([@country]&[@vendor];[country]&[vendor];0)
Funkce vždy najde. Stačí výsledek porovnat s akt. řádkem.
Funkce je v nejhorším případě (nejsou duplicity) stejně rychlá jako countif. Doba se zkracuje při vyšším počtu duplicit (Pokud funkce najde shodu končí, countif počítá do konce). A samozřejmě záleží na pozici v seznamu.
Lze to trochu modifikovat:
když(country; řádek;
když(dodavatel;řádek;
když(unikátní;řádek;0)))
Pak lze odstranit duplicity (zatím jsem netestoval, jestli je rychlejší odstranění duplicit nebo odstranění vybraných.)
Použijte KT.
Je to rychlejší na vytvoření i na použití.
Pokud máte Excel 365 nebo 2016, použijte MAXIFS.
1. Ve vzorci se musí násobit sloupec a řádek. Syntaxe zápisu maticových konstant se měnila. Proč, to ví asi jen ms. Dříve středník odděloval sloupce, nyní se sloupce odělují zpětným lomítkem a středník odděluje řádky. Záleží na verzi excelu.
2. Kromě toho, že vzorec funguje, víte jak to funguje?
Pokud ano, zkuste odhadnout kolik zkušených uživatelů ho pochopí. Používání podobných vzorců nepovažuji obvykle za dobrý nápad. Ale nic proti gustu.
@dontom
Ten vzorec by měl vypadat takto:
=INDEX(A1:B10;POZVYHLEDAT(1;SOUČIN.MATIC(--(PROB(ŘÁDEK(A1:A10)*{1\0\0\0};A1:A10*{1\0\0\0}+{0\9\-9\1}^99;1;ŘÁDEK(A1:A10))>=3000);1);0);2)
(Řádky a sloupce mají ve vzorci význam)
Moc nedoporučuji, je založen na tom, jak excel sčítá (a zahazuje "malá" čísla). Moc lidí to nepochopí.
Pokud se nehledá přesně, pak stačí normálně
{=INDEX(B1:B10;POZVYHLEDAT(3100;SUBTOTAL(9;POSUN($A$1;;;ŘÁDEK(A1:A10)));1))}
Do listu si vlož kolečko, nastav velikost barvu, ...
vyber kolečko, ctrl-c, vyber řadu nebo bod, ctrl-v
Smaž kolečko v listu
Záleží na tom, jak to vypadá v listu.
1. zkontrolovat formát (aby to nebyl text).
2. Pokud je to jedno číslo, tak F2 a znovu vložit.
3. Pokud je to sloupec tak text do sloupců
4. pokud je to rozhozené náhodně v listu, tak najít-nahradit, případě desetinného místa hledat "," nahradit ",".
5. Pokud tam desetinná čárka není, tak nahrazovat postupně jednotlivé číslice 0 za 0, 1 za 1, ...
Nebo třeba:
=INDEX($B$1:$B$100;(X11-DATUM(2015;1;1))/7 + 1)
Maticově:
=SUMA(KDYŽ(WEEKNUM(A4:A100+0;16)=I12;B4:B100;""))
Ondry napsal/a:
zkoušel jsem to nakopírovat vedle jen ty hodnoty a hodit do grafu, ale nejde misto, každopádně díky
Co vrátí:
? format(-657434, "dd.mm.yyyy")
Zkus toto
Sub Zamykani()
Dim bunka As Range
Dim oblast As Range
Set oblast = Range("A1:B2")
ActiveSheet.Unprotect Password:="000"
oblast.Locked = True
For Each bunka In oblast
If bunka.DisplayFormat.Interior.Color = RGB(51, 204, 51) Then bunka.Locked = False
Next bunka
ActiveSheet.Protect Password:="000"
End Sub
Ke kódu Pearsona - tohle bylo psáno pro 2003 a asi starší. Od verze 2007 to funguje jen náhodou, i když pominu problémy s lokální syntaxí vzorců.
Ten odkaz nikdy moc nefungoval
(Formula v podmíněném formátu je lokální - nutno převést, aktivních podmínek může být více + skládání výsledného vzhledu, ..., už si nevzpomínám co ještě)
Zkus vlastnost DisplayFormat
(nelze ji použít ve funkci)
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.