Преглед садржаја
Водич показује како да користите функцију ВЛООКУП за копирање података са другог радног листа или радне свеске, Влоокуп у више листова и динамичко тражење да бисте вратили вредности из различитих листова у различите ћелије.
Када тражите неке информације у Екцел-у, редак је случај када су сви подаци на истом листу. Чешће ћете морати да претражујете више листова или чак различите радне свеске. Добра вест је да Мицрософт Екцел пружа више од једног начина да се то уради, а лоша вест је да су сви начини мало компликованији од стандардне ВЛООКУП формуле. Али уз само мало стрпљења, схватићемо их :)
Како ВЛООКУП између два листа
За почетак, хајде да истражимо најједноставнији случај - користећи ВЛООКУП за копирајте податке са другог радног листа. Веома је слична обичној формули ВЛООКУП која претражује на истом радном листу. Разлика је у томе што укључујете име листа у аргумент табле_арраи да бисте својој формули рекли у ком радном листу се налази опсег претраживања.
Генерична формула за ВЛООКУП са другог листа је следећа:
ВЛООКУП(вредност_претраживања, Схеет!ранге, цол_индек_нум, [ранге_лоокуп])Као пример, хајде да повучемо бројке о продаји из извештаја Јан у Резиме лист. За ово дефинишемо следеће аргументе:
- Лоокуп_валуес су у колони А на листу Резиме , а миВЛООКУП:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Коначно, ова врло стандардна ВЛООКУП формула тражи А2 вредност у првој колони опсега А2:Ц6 на Вест листу и враћа меч из 2. колоне. То је то!
Динамички ВЛООКУП за враћање података из више листова у различите ћелије
Прво, хајде да дефинишемо шта тачно значи реч „динамички“ у овом контексту и како ће ова формула бити другачији од претходних.
У случају да имате велике комаде података у истом формату који су подељени у више табела, можда ћете желети да издвојите информације из различитих листова у различите ћелије. Слика испод илуструје концепт:
За разлику од претходних формула које су преузимале вредност из одређеног листа на основу јединственог идентификатора, овог пута тражимо да издвојимо вредности из неколико листова одједном време.
Постоје два различита решења за овај задатак. У оба случаја, потребно је да обавите мали припремни рад и креирате именоване опсеге за ћелије са подацима у сваком листу за тражење. За овај пример дефинисали смо следеће опсеге:
- Источна_продаја - А2:Б6 на источном листу
- Северна_продаја - А2: Б6 на северном листу
- Јужна_продаја - А2:Б6 на јужној страни
- Западна_продаја - А2:Б6 на западном листу
ВЛООКУП и угнежђени ИФ
Ако имате разуман број листова за тражење, можете користити угнежђене ИФ функциједа изаберете лист на основу кључних речи у унапред дефинисаним ћелијама (ћелије Б1 до Д1 у нашем случају).
Са вредношћу претраживања у А2, формула је следећа:
=VLOOKUP($A2, IF(B$1="east", East_Sales, IF(B$1="north", North_Sales, IF(B$1="south", South_Sales, IF(B$1="west", West_Sales)))), 2, FALSE)
Преведено на енглески, део ИФ гласи:
Ако је Б1 Исток , погледајте опсег под називом Исток_Продаја ; ако је Б1 Север , погледајте опсег под називом Север_Продаја ; ако је Б1 Југ , погледајте опсег под називом Југ_Продаја ; и ако је Б1 Вест , погледајте опсег под називом Вест_Салес .
Опсег који враћа ИФ иде у табле_арраи ВЛООКУП-а, који повлачи одговарајућу вредност из 2. колоне на одговарајућем листу.
Паметно коришћење мешовитих референци за тражену вредност ($А2 - апсолутна колона и релативни ред) и логички тест ИФ (Б$1 - релативна колона и апсолутни ред) омогућава копирање формуле у друге ћелије без икаквих промена - Екцел аутоматски прилагођава референце на основу релативног положаја реда и колоне.
Дакле, уносимо формулу у Б2, копирамо је десно и до онолико колона и редова колико је потребно и добићете следећи резултат:
ИНДИРЕКТНИ ВЛООКУП
Када радите са много листова, вишеструки угнежђени нивои такође могу да направе формулу дугачак и тежак за читање. Далеко бољи начин је да креирате динамички опсег влоокуп уз помоћ ИНДИРЕЦТ:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Овде спајамо референцу на ћелију која садржијединствени део именованог опсега (Б1) и заједнички део (_Салес). Ово производи текстуални низ као што је „Еаст_Салес“, који ИНДИРЕКТНО конвертује у име опсега разумљиво Екцел-у.
Као резултат, добијате компактну формулу која лепо функционише на било ком броју листова:
Тако се врши претрага између листова и датотека у Екцел-у. Захваљујем вам што сте читали и надам се да се видимо на нашем блогу следеће недеље!
Вежбање за преузимање
Примери више листова за претрагу (.клск датотека)
односи се на прву ћелију података, која је А2. - Табле_арраи је опсег А2:Б6 на Јан листу. Да бисте га позвали, ставите префикс референци опсега са именом листа праћеним знаком узвика: Јан!$А$2:$Б$6.
Обратите пажњу да закључавамо опсег апсолутним референцама на ћелије како бисмо спречили да се промени приликом копирања формуле у друге ћелије.
Цол_индек_нум је 2 јер желимо да копирамо вредност из колоне Б, која је 2. колона у низу табеле.
- Ранге_лоокуп је подешена на ФАЛСЕ да би се тражило тачно подударање.
Стављајући аргументе заједно, добијамо ову формулу:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Превуците формулу низ колону и добићете овај резултат:
У На сличан начин, можете потражити податке са листова Феб и Мар :
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Савети и напомене:
- Ако назив листа садржи размаке или неабецедних знакова , мора се ставити у једноструке наводнике, као што је 'Јан Салес'!$А$2:$Б$6 . За више информација погледајте Како да референцирате други лист у Екцел-у.
- Уместо да куцате име листа директно у формулу, можете се пребацити на радни лист за тражење и тамо изабрати опсег. Екцел ће аутоматски уметнути референцу са тачном синтаксом, поштедећи вас труда да проверите име и решите проблеме.
Претрага из друге радне свеске
За ВЛООКУП између дварадне свеске, укључите име датотеке у угласте заграде, а затим име листа и знак узвика.
На пример, да бисте тражили А2 вредност у опсегу А2:Б6 на листу Јан у радној свесци Салес_репортс.клск , користите ову формулу:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
За све детаље погледајте ВЛООКУП из друге радне свеске у Екцел-у.
Влоокуп широм више листова са ИФЕРРОР
Када треба да тражите између више од два листа, најлакше решење је да користите ВЛООКУП у комбинацији са ИФЕРРОР. Идеја је да се угнезди неколико функција ИФЕРРОР да би се проверавало више радних листова један по један: ако први ВЛООКУП не пронађе подударање на првом листу, претражите следећи лист, и тако даље.
ИФЕРРОР(ВЛООКУП(…), ИФЕРРОР(ВЛООКУП(…), …, " Није пронађено "))Да бисмо видели како овај приступ функционише на подацима из стварног живота, размотримо следећи пример. Испод је табела Резиме коју желимо да попунимо називима ставки и износима тражећи број поруџбине у листовима Запад и Исток :
Прво ћемо повући ставке. За ово, ми наводимо формулу ВЛООКУП да тражи број реда у А2 на листу Еаст и врати вредност из колоне Б (2. колона у табле_арраи А2:Ц6). Ако није пронађено тачно подударање, претражите у листу Запад . Ако оба Влоокупа не успеју, вратите „Није пронађено“.
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
Да бисте вратили износ,једноставно промените број индекса колоне у 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
Савет. Ако је потребно, можете одредити различите низове табела за различите функције ВЛООКУП-а. У овом примеру, оба листа за тражење имају исти број редова (А2:Ц6), али ваши радни листови могу бити различите величине.
Преглед у више радних свеска
Да бисте прегледали између две или више радних свеска, ставите име радне свеске у угласте заграде и ставите га испред назива листа. На пример, ево како можете да потражите у две различите датотеке ( Књига1 и Књига2 ) са једном формулом:
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE),"Not found"))
Учините број индекса колоне динамичким за Влоокуп више колона
У ситуацији када требате да вратите податке из неколико колона, динамички цол_индек_нум може вам уштедети време. Потребно је извршити неколико подешавања:
- За аргумент цол_индек_нум , користите функцију ЦОЛУМНС која враћа број колона у наведеном низу: ЦОЛУМНС($А$1 :Б$1). (Координата реда заправо није битна, може бити било који ред.)
- У аргументу лоокуп_валуе , закључајте референцу колоне са знаком $ ($А2), тако да остаје поправљено приликом копирања формуле у друге колоне.
Као резултат, добијате неку врсту динамичке формуле која издваја одговарајуће вредности из различитих колона, у зависности од тога у коју колону је формула копирана:
=IFERROR(VLOOKUP($A2, East!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, West!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), "Not found"))
Када се унесе у колону Б, ЦОЛУМНС($А$1:Б$1)процењује на 2 говорећи ВЛООКУП-у да врати вредност из 2. колоне у низу табеле.
Када се копира у колону Ц (тј. превукли сте формулу са Б2 на Ц2), Б$1 се мења у Ц$1 јер референца колоне је релативна. Сходно томе, ЦОЛУМНС($А$1:Ц$1) процењује на 3 приморавајући ВЛООКУП да врати вредност из 3. колоне.
Ова формула одлично функционише за 2 - 3 листа за претрагу. Ако их имате више, понављајуће грешке ИФЕРРОР постају превише гломазне. Следећи пример демонстрира мало компликованији, али много елегантнији приступ.
Претражи више листова помоћу ИНДИРЕЦТ
Још један начин за претрагу између више листова у Екцел-у је коришћење комбинације ВЛООКУП-а и ИНДИРЕКТНЕ функције. Овај метод захтева мало припреме, али на крају ћете имати компактнију формулу за Влоокуп у било ком броју табела.
Генеричка формула за Влоокуп преко листова је следећа:
ВЛООКУП( лоокуп_валуе , ИНДИРЕЦТ("'"&амп;ИНДЕКС( Лоокуп_схеетс , МАТЦХ(1, ---(ЦОУНТИФ(ИНДИРЕЦТ("'" &амп; Лоокуп_схеетс &амп; ") '! опсег_траживања "), вредност_претраживања )&гт;0), 0)) &амп; "'! табле_арраи "), индекс_колца , ФАЛСЕ)Где:
- Лоокуп_схеетс - именовани опсег који се састоји од имена листа за тражење.
- Лоокуп_валуе - вредност за претрагу.
- опсег_проналажења - опсег колона у листама за тражење где да се тражи тражењевредност.
- Табле_арраи - опсег података у листама за претрагу.
- Цол_индек_нум - број колоне у низу табеле из које се врати вредност.
Да би формула радила исправно, имајте на уму следећа упозорења:
- То је формула низа, која се мора попунити притиском на Цтрл + Схифт + Ентер заједно тастери.
- Сви листови морају имати исти редослед колона .
- Пошто користимо један низ табеле за све листове за тражење, наведите највећи опсег ако ваши листови имају различит број редова.
Како користити формулу за претрагу преко листова
Да бисте прегледали више листова истовремено, извршите ове кораци:
- Запишите све називе листова за тражење негде у радној свесци и именујте тај опсег ( Лоокуп_схеетс у нашем случају).
- тражити А2 вредност ( лоокуп_валуе )
- у опсегу А2:А6 ( лоокуп_ранге ) у четири радна листа ( Исток , Север , Југ и Запад ) и
- извући одговарајуће вредности из колоне Б, што је колона 2 ( цол_индек_нум ) у опсегу података А2:Ц6 ( табле_арраи ).
Са горњим аргументима, формула поприма овај облик:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)
Имајте на уму да закључавамо оба опсега ($А$2:$А$6 и $А$2:$Ц$6) апсолутним референцама ћелија.
Као као резултат, добили смо формулу за тражење броја поруџбине у 4 листа и преузимање одговарајуће ставке. Ако одређени број поруџбине није пронађен, приказује се грешка #Н/А као у реду 14:
Да бисте вратили износ, једноставно замените 2 са 3 у цол_индек_нум аргумент пошто су износи у 3. колони низа табеле:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE)
Ако желите да замените стандардну нотацију грешке #Н/А сопственим текстом, премотајте формула у ИФНА функцију:
=IFNA(VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE), "Not found")
Потражи више листова између радних свеска
Ова генеричка формула (или било која њена варијација) се такође може користити за претрагу више листова у различитој радној свесци . За ово, спојите име радне свеске унутар ИНДИРЕЦТ као што је приказано у формули испод:
=IFNA(VLOOKUP($A2, INDIRECT("'[Book1.xlsx]" & INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'[Book1.xlsx]" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 2, FALSE), "Not found")
Преглед између листова и враћање више колона
Ако желите да извучете податке из неколико колоне, формула низа са више ћелија то може учинити у једном потезу. Да бисте креирали такву формулу, наведите константу низа за аргумент цол_индек_нум .
У овом примеру желимо да вратимо називе ставки (колона Б) и износе (колона Ц), који су 2. и 3. колона у низу табеле, респективно. Дакле, тражени низ је{2,3}.
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets &"'!$A$2:$C$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), {2,3}, FALSE)
Да бисте правилно унели формулу у више ћелија, ово треба да урадите:
- У првом реду, изаберите све ћелије које ће се попунити (Б2:Ц2 у нашем примеру).
- Унесите формулу и притисните Цтрл + Схифт + Ентер . Ово уноси исту формулу у изабране ћелије, које ће вратити различите вредности у свакој колони.
- Превуците формулу до преосталих редова.
Како ова формула функционише
Да бисмо боље разумели логику, хајде да поделимо ову основну формулу на појединачне функције:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)
Радећи изнутра према ван, ево шта ради формула:
ЦОУНТИФ и ИНДИРЕЦТ
Укратко, ИНДИРЕЦТ гради референце за све листове за тражење, а ЦОУНТИФ броји појављивања тражења вредност (А2) у сваком листу:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
Детаљније:
Прво, спајате назив опсега (Лоокуп_схеетс) и референцу опсега ($А$2: $А$6), додајући апострофе и знак узвика на права места да бисте направили спољну референцу и убаците резултујући текстуални низ функцији ИНДИРЕЦТ да би се динамички упућивао на листове за тражење:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
ЦОУНТИФ проверава сваку ћелију у опсегу А2:А6 на сваком листу за претрагу у односу на вредност у А2 на главном лист и враћа број подударања за сваки лист. У нашем скупу података, број поруџбине у А2 (101) се налази у листу Запад , који је 4. уименовани опсег, тако да ЦОУНТИФ враћа овај низ:
{0;0;0;1}
Даље, поредите сваки елемент горњег низа са 0:
--({0; 0; 0; 1}>0)
Ово даје низ вредности ТРУЕ (веће од 0) и ФАЛСЕ (једнако 0), које приморавате на 1 и 0 коришћењем двоструког унарног (--) и добијате следећи низ као резултат:
{0; 0; 0; 1}
Ова операција је додатна мера предострожности за решавање ситуације када листа за тражење садржи неколико појављивања вредности тражења, у ком случају би ЦОУНТИФ вратио број већи од 1, док желимо само 1 и 0 у коначан низ (ускоро ћете разумети зашто).
Након свих ових трансформација, наша формула изгледа овако:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
ИНДЕКС и МАЦХ
У овом тренутку, класична комбинација ИНДЕКС МАТЦХ корака у:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
Функција МАТЦХ конфигурисана за тачно подударање (0 у последњем аргументу) тражи вредност 1 у низу { 0;0;0;1} и враћа његову позицију, а то је 4:
INDEX(Lookup_sheets, 4)
Функција ИНДЕКС користи враћени број помоћу МАТЦХ као аргумент броја реда (број_реда) и враћа 4. вредност у именованом опсегу Лоокуп_схеетс , што је Вест .
Дакле, формула даље смањује на:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
ВЛООКУП и ИНДИРЕЦТ
Функција ИНДИРЕЦТ обрађује текстуални низ унутар ње:
INDIRECT("'"&"West"&"'!$A$2:$C$6")
и претвара га у референцу која иде до аргумента табле_арраи