Екцел формула: Издвоји сва делимична подударања -

Генеричка формула

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

Резиме

Да бисте издвојили сва подударања на основу делимичног подударања, можете користити формулу низа засновану на функцијама ИНДЕКС и АГГРЕГАТЕ, уз подршку од ИСУМБЕР и СЕАРЦХ. У приказаном примеру, формула у Г5 је:

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

са следећим именованим опсезима: „претрага“ = Д5, „цт“ = Д8, „подаци“ = Б5: Б55.

Напомена: ово је формула низа, али не захтева контролу + схифт + ентер, јер АГГРЕГАТЕ може нативно да обрађује низове.

Објашњење

Језгро ове формуле је функција ИНДЕКС, са АГРЕГАТЕ-ом који се користи за откривање „н-тог подударања“ за сваки ред у области издвајања:

INDEX(data,nth_match_formula)

Готово сав посао састоји се у откривању и извештавању који се редови у „подацима“ подударају са низом за претрагу, и извештавању о положају за сваку подударну вредност у ИНДЕКС. То се ради са АГГРЕГАТЕ функцијом конфигурисаном овако:

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

Први аргумент, 15, говори АГРЕГАТЕ-у да се понаша МАЛО и враћа н-те најмање вредности. Други аргумент, 6, је опција за занемаривање грешака. Трећи аргумент је израз који генерише низ резултата који се подударају (описано у наставку). Четврти аргумент, Ф5, делује као „к“ у МАЛОМ како би се одредила „н-та“ вредност.

АГГРЕГАТЕ делује на низовима, а доњи израз гради низ за трећи аргумент унутар АГГРЕГАТЕ:

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

Овде се функција РЕД користи за генерисање низа релативних бројева редова, а ИСУМБЕР и СЕАРЦХ се користе заједно за подударање низа за претрагу са вредностима у подацима, што генерише низ вредности ТРУЕ и ФАЛСЕ.

Паметна бит је подела бројева редова према резултатима претраге. У оваквој математичкој операцији, ТРУЕ се понаша као 1, а ФАЛСЕ као нула. Резултат су бројеви редова повезани са позитивним подударањем подељени са 1 и преживе операцију, док су бројеви редова повезани са неподударајућим вредностима уништени и постали # ДИВ / 0 грешке. Будући да је АГГРЕГАТЕ подешен да игнорише грешке, он занемарује грешке # ДИВ / 0 и враћа "н-ти" најмањи број у преосталим вредностима, користећи број у колони Ф за "нтх".

Управљање учинком

Као и све формуле низа, и ова формула је „скупа“ у погледу ресурса са великим скупом података. Да би се утицаји на перформансе свели на минимум, цела формула ИНДЕКС и МАТЦХ умотана је у АКО овако:

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

где именовани опсег „цт“ (Д8) садржи ову формулу:

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

Ова провјера зауставља покретање ИНДЕКС и АГРЕГАТЕ дијела формуле након што се изваде све одговарајуће вриједности.

Формула низа са МАЛИМ

Ако ваша верзија Екцел-а нема функцију АГРЕГАТЕ, можете користити алтернативну формулу засновану на СМАЛЛ и ИФ:

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

Напомена: ово је формула низа и мора се унети са цонтрол + схифт + ентер.

Занимљиви Чланци...