Excel vzorec: Najít nejbližší shodu -

Obsah

Obecný vzorec

(=INDEX(data,MATCH(MIN(ABS(data-value)),ABS(data-value),0)))

souhrn

Chcete-li najít nejbližší shodu v číselných datech, můžete použít INDEX a MATCH s pomocí funkcí ABS a MIN. V zobrazeném příkladu je vzorec v F5 zkopírovaný dolů:

=INDEX(trip,MATCH(MIN(ABS(cost-E5)),ABS(cost-E5),0))

kde cesta (B5: B14) a náklady (C5: C14) jsou pojmenovány rozsahy.

V F5, F6 a F7 vrátí vzorec cestu nejbližší z hlediska nákladů na 500, 1000 a 1500.

Poznámka: Toto je maticový vzorec a musí být zadán pomocí kláves Control + Shift + Enter, kromě Excel 365.

Vysvětlení

V jádru se jedná o vzorec INDEX a MATCH: MATCH vyhledá pozici nejbližší shody, posune pozici na INDEX a INDEX vrátí hodnotu na této pozici ve sloupci Trip. Tvrdá práce se provádí pomocí funkce MATCH, která je pečlivě nakonfigurována tak, aby odpovídala „minimálnímu rozdílu“ takto:

MATCH(MIN(ABS(cost-E5)),ABS(cost-E5),0)

Pokud vezmeme věci krok za krokem, vyhledávací hodnota se vypočítá s MIN a ABS takto:

MIN(ABS(cost-E5)

Za prvé, je hodnota v E5 je odečtena od pojmenované oblasti nákladů (C 5: C14). Jedná se o operaci pole a protože v rozsahu je 10 hodnot, výsledkem je pole s 10 hodnotami, jako je tato:

(899;199;250;-201;495;1000;450;-101;500;795)

Tato čísla představují rozdíl mezi každou cenou v C5: C15 a cenou v buňce E5, 700. Některé hodnoty jsou záporné, protože cena je nižší než cena v E5. K převodu záporných hodnot na kladné hodnoty používáme funkci ABS:

ABS((899;199;250;-201;495;1000;450;-101;500;795))

který vrací:

(899;199;250;201;495;1000;450;101;500;795)

Hledáme nejbližší shodu, takže pomocí funkce MIN najdeme nejmenší rozdíl, který je 101:

MIN((899;199;250;201;495;1000;450;101;500;795)) // returns 101

Toto se stane vyhledávací hodnotou uvnitř MATCH. Vyhledávací pole je generováno jako dříve:

ABS(cost-E5) // generate lookup array

který vrací stejné pole, které jsme viděli dříve:

(899;199;250;201;495;1000;450;101;500;795)

Nyní máme to, co potřebujeme k nalezení pozice nejbližší shody (nejmenší rozdíl), a můžeme MATCH část vzorce přepsat takto:

MATCH(101,(899;199;250;201;495;1000;450;101;500;795),0) // returns 8

Se 101 jako vyhledávací hodnotou vrátí MATCH 8, protože 101 je na 8. pozici v poli. Konečně, tato pozice se přivádí do index jako řádek argumentu, s názvem rozsahu cesty jako pole:

=INDEX(trip,8)

a INDEX vrátí 8. cestu v rozsahu „Španělsko“. Když je vzorec zkopírován dolů do buněk F6 a F7, najde nejbližší shodu s 1000 a 1500, „Francie“ a „Thajsko“, jak je znázorněno.

Poznámka: Pokud dojde k nerozhodnému výsledku, vrátí tento vzorec první zápas.

S XLOOKUPEM

Funkce XLOOKUP poskytuje zajímavý způsob řešení tohoto problému, protože typ shody 1 (přesná shoda nebo další největší) nebo -1 (přesná shoda nebo další nejmenší) nevyžaduje třídění dat. To znamená, že můžeme napsat vzorec takto:

=XLOOKUP(0,ABS(cost-E5),trip,,1)

Jak je uvedeno výše, k vytvoření vyhledávacího pole používáme absolutní hodnotu (cost-E5):

(899;199;250;201;495;1000;450;101;500;795)

Potom nakonfigurujeme XLOOKUP tak, aby hledal nulu s typem shody nastaveným na 1, pro přesnou shodu nebo další největší. Dodáváme s názvem rozsah výlet jako vratné pole, takže výsledkem je „Španělsko“ jako předtím.

Zajímavé články...