Excel vzorec: Extrahujte všetky čiastočné zhody -

Všeobecný vzorec

=IF(F5>ct,"",INDEX(data,AGGREGATE(15,6,(ROW(data)-ROW($B$5)+1)/ISNUMBER(SEARCH(search,data)),F5)))

Zhrnutie

Ak chcete extrahovať všetky zhody na základe čiastočnej zhody, môžete použiť vzorec poľa založený na funkciách INDEX a AGGREGATE s podporou ISNUMBER a SEARCH. V zobrazenom príklade je vzorec v G5:

=IF(F5>ct,"",INDEX(data,AGGREGATE(15,6,(ROW(data)-ROW($B$5)+1)/ISNUMBER(SEARCH(search,data)),F5)))

s nasledujúcimi pomenovanými rozsahmi: „search“ = D5, „ct“ = D8, „data“ = B5: B55.

Poznámka: toto je vzorec poľa, ale nevyžaduje ovládanie + shift + enter, pretože AGGREGATE dokáže polia spracovať natívne.

Vysvetlenie

Jadrom tohto vzorca je funkcia INDEX, pričom funkcia AGGREGATE slúži na zistenie „n-tej zhody“ pre každý riadok v oblasti extraktu:

INDEX(data,nth_match_formula)

Takmer celá práca spočíva v zisťovaní a hlásení, ktoré riadky v údajoch sa zhodujú s hľadaným reťazcom, a v hlásení polohy každej zhodnej hodnoty s indexom INDEX. To sa deje pomocou takto nakonfigurovanej funkcie AGGREGATE:

AGGREGATE(15,6,(ROW(data)-ROW($B$5)+1)/ISNUMBER(SEARCH(search,data)),F5)

Prvý argument, 15, hovorí, že AGGREGATE sa má správať ako MALÝ a vráti n-té najmenšie hodnoty. Druhým argumentom, 6, je možnosť ignorovať chyby. Tretím argumentom je výraz, ktorý generuje pole výsledkov zhody (popísané nižšie). Štvrtý argument, F5, slúži ako "k" v MALOM na určenie "n-tej" hodnoty.

AGGREGATE pracuje na poliach a výraz uvedený nižšie vytvára pole pre tretí argument vo vnútri AGGREGATE:

(ROW(data)-ROW($B$5)+1)/ISNUMBER(SEARCH(search,data))

Tu sa funkcia ROW používa na generovanie poľa relatívnych čísel riadkov a ISNUMBER a SEARCH sa používajú spolu na priradenie vyhľadávacieho reťazca k hodnotám v dátach, čím sa vygeneruje pole hodnôt TRUE a FALSE.

Chytrým bitom je vydelenie čísel riadkov výsledkami vyhľadávania. V matematickej operácii, ako je táto, sa TRUE správa ako 1 a FALSE ako nula. Výsledkom je, že čísla riadkov spojené s pozitívnou zhodou sa vydelia 1 a prežijú operáciu, zatiaľ čo čísla riadkov spojené s nezhodnými hodnotami sa zničia a stanú sa chybami # DIV / 0. Pretože AGGREGATE je nastavený na ignorovanie chýb, ignoruje chyby # DIV / 0 a vráti „n-té“ najmenšie číslo v zostávajúcich hodnotách, pričom použije číslo v stĺpci F pre „n-té“.

Riadenie výkonu

Rovnako ako všetky vzorce v poli, aj tento vzorec je z hľadiska zdrojov s veľkým súborom údajov „drahý“. Aby sa minimalizovali dopady na výkon, celý vzorec INDEX a MATCH je zabalený do IF takto:

=IF(F5>ct,"",formula)

kde pomenovaný rozsah „ct“ (D8) obsahuje tento vzorec:

=COUNTIF(data,"*"&search&"*")

Táto kontrola zastaví spustenie časti INDEX a AGGREGATE vzorca po extrakcii všetkých zodpovedajúcich hodnôt.

Pole vzorca s MALÝM

Ak vaša verzia programu Excel nemá funkciu AGGREGATE, môžete použiť alternatívny vzorec založený na MALOM a AK:

=IF(F5>ct,"",INDEX(data,SMALL(IF(ISNUMBER(SEARCH(search,data)),ROW(data)-ROW($B$5)+1),F5)))

Poznámka: toto je vzorec poľa a musí sa zadávať pomocou klávesov Control + Shift + Enter.

Zaujímavé články...