Excel vzorec: Počítat dlouhá čísla bez COUNTIF -

Obecný vzorec

SUMPRODUCT(--(A:A=A1))

souhrn

Předmluva

Toto je nepříjemně dlouhý úvod, ale kontext je důležitý, promiňte!

Pokud se pokusíte spočítat velmi dlouhá čísla (16 a více číslic) v rozsahu s COUNTIF, mohou se vám zobrazit nesprávné výsledky kvůli chybě ve způsobu, jakým určité funkce zpracovávají dlouhá čísla, i když jsou tato čísla uložena jako text. Zvažte obrazovku níže. Všechny počty ve sloupci D jsou nesprávné - ačkoli každé číslo ve sloupci B je jedinečné, počet vrácený COUNTIF naznačuje, že tato čísla jsou duplikáty.

=COUNTIF(data,B5)

Tento problém souvisí s tím, jak Excel zpracovává čísla. Excel dokáže zpracovat pouze 15 platných číslic a pokud v aplikaci Excel zadáte číslo s více než 15 číslicemi, uvidíte koncové číslice tiše převedené na nulu. Výše uvedený problém počítání vyplývá z tohoto limitu.

Normálně se tomuto limitu můžete vyhnout zadáním dlouhých čísel jako textu, a to buď zahájením čísla jednoduchou uvozovkou („999999999999999999), nebo naformátováním buněk jako textu před zadáním. Pokud nepotřebujete provádět matematické operace s číslem, je to dobré řešení a umožňuje vám zadávat extra dlouhá čísla pro věci, jako jsou čísla kreditních karet a sériová čísla, aniž byste ztratili čísla.

Pokud se však pokusíte pomocí funkce COUNTIF spočítat číslo s více než 15 číslicemi (i když je uloženo jako text), mohou se vám zobrazit nespolehlivé výsledky. Stává se to proto, že COUNTIF interně převede dlouhou hodnotu zpět na číslo v určitém okamžiku během zpracování, čímž se aktivuje výše popsaný limit 15 číslic. Bez všech číslic mohou být některá čísla počítána jako duplikáty při počítání s COUNTIF.

Řešení

Jedním z řešení je nahradit vzorec COUNTIF vzorcem, který používá SUM nebo SUMPRODUCT. V zobrazeném příkladu vypadá vzorec v E5 takto:

=SUMPRODUCT(--(data=B5))

Vzorec používá pojmenovaný rozsah „data“ (B5: B9) a generuje správný počet pro každé číslo pomocí SUMPRODUCT.

Vysvětlení

Nejprve výraz uvnitř SUMPRODUCT porovná všechny hodnoty v pojmenovaném rozsahu „data“ s hodnotou ze sloupce B v aktuálním řádku. Výsledkem je pole výsledků PRAVDA / NEPRAVDA.

=SUMPRODUCT(--(data=B5)) =SUMPRODUCT(--((TRUE;FALSE;FALSE;FALSE;FALSE)))

Dále dvojitý zápor vynucuje hodnoty PRAVDA / NEPRAVDA na hodnoty 1/0.

=SUMPRODUCT((1;0;0;0;0))

Nakonec SUMPRODUCT jednoduše sečte položky v poli a vrátí výsledek.

Varianta maticového vzorce

Můžete také použít funkci SUMA namísto SUMPRODUCT, ale toto je maticový vzorec a musí být zadán pomocí control + shift + enter:

(=SUM(--(B:B=B5)))

Další funkce s tímto problémem

Sám jsem to neověřil, ale zdá se, že několik funkcí má stejný problém, včetně SUMIF, SUMIFS, COUNTIF, COUNTIFS, AVERAGEIF a AVERAGEIFS.

Dobré odkazy

15místné číslo s čísly SUMIF (S), COUNTIF (S), AVERAGEIF (S) (wmfexcel.com) Zpráva o chybě COUNTIF od Johna Walkenbacha (dailydoseofexcel.com)

Zajímavé články...