Змест
Падручнік паказвае, як выкарыстоўваць функцыю VLOOKUP для капіравання даных з іншага аркуша або кнігі, VLOOKUP на некалькіх аркушах і дынамічны пошук для вяртання значэнняў з розных аркушаў у розныя ячэйкі.
Калі вы шукаеце некаторую інфармацыю ў Excel, гэта рэдкі выпадак, калі ўсе дадзеныя знаходзяцца на адным аркушы. Часцей вам давядзецца шукаць на некалькіх аркушах ці нават у розных працоўных сшытках. Добрая навіна заключаецца ў тым, што Microsoft Excel прапануе больш чым адзін спосаб зрабіць гэта, а дрэнная навіна ў тым, што ўсе спосабы крыху больш складаныя, чым стандартная формула VLOOKUP. Але з крыху цярпення мы іх разбярэм :)
Як VLOOKUP паміж двума аркушамі
Для пачатку давайце даследуем самы просты выпадак - выкарыстанне VLOOKUP для скапіяваць дадзеныя з іншага ліста. Гэта вельмі падобна на звычайную формулу VLOOKUP, якая шукае на тым самым аркушы. Розніца ў тым, што вы ўключаеце назву аркуша ў аргумент table_array , каб паведаміць вашай формуле, на якім працоўным аркушы знаходзіцца дыяпазон пошуку.
Агульная формула VLOOKUP з іншага аркуша выглядае наступным чынам:
VLOOKUP(lookup_value, Sheet!range, col_index_num, [range_lookup])У якасці прыкладу давайце выцягнем лічбы продажаў са справаздачы Jan у Summary ліст. Для гэтага мы вызначаем наступныя аргументы:
- Значэнні_прагляду знаходзяцца ў слупку A на аркушы Зводка , і мыVLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Нарэшце, гэтая стандартная формула VLOOKUP шукае значэнне A2 у першым слупку дыяпазону A2:C6 на аркушы West і вяртае матч з 2-га слупка. Вось і ўсё!
Дынамічны ВПР для вяртання даных з некалькіх аркушаў у розныя ячэйкі
Спачатку давайце вызначым, што менавіта азначае слова "дынамічны" ў дадзеным кантэксце і як будзе выглядаць гэтая формула адрозніваецца ад папярэдніх.
Калі ў вас ёсць вялікія кавалкі дадзеных у адным фармаце, якія падзелены на некалькі электронных табліц, вы можаце атрымаць інфармацыю з розных аркушаў у розныя ячэйкі. Выява ніжэй ілюструе канцэпцыю:
У адрозненне ад папярэдніх формул, якія атрымлівалі значэнне з пэўнага аркуша на аснове ўнікальнага ідэнтыфікатара, на гэты раз мы хочам атрымаць значэнні з некалькіх аркушаў адначасова час.
Для гэтай задачы ёсць два розныя рашэнні. У абодвух выпадках вам трэба правесці невялікую падрыхтоўчую працу і стварыць найменныя дыяпазоны для ячэек дадзеных у кожным аркушы пошуку. Для гэтага прыкладу мы вызначылі наступныя дыяпазоны:
- East_Sales - A2:B6 на аркушы East
- North_Sales - A2: B6 на паўночным аркушы
- South_Sales - A2:B6 на паўднёвым аркушы
- West_Sales - A2:B6 на заходнім аркушы
VLOOKUP і ўкладзеныя функцыі IF
Калі ў вас ёсць разумная колькасць аркушаў для пошуку, вы можаце выкарыстоўваць укладзеныя функцыі IFкаб выбраць аркуш на падставе ключавых слоў у загадзя вызначаных ячэйках (у нашым выпадку ячэйкі ад B1 да D1).
З пошукавым значэннем у A2 формула наступная:
=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)
У перакладзе на ангельскую мову частка IF гучыць так:
Калі B1 з'яўляецца East , глядзіце ў дыяпазон з назвай East_Sales ; калі B1 з'яўляецца Поўнач , глядзіце ў дыяпазоне з назвай Паўночныя_продажы ; калі B1 з'яўляецца Поўдзень , шукайце ў дыяпазоне з назвай Паўднёвыя_продажы ; і калі B1 роўны Захад , шукайце ў дыяпазоне пад назвай West_Sales .
Дыяпазон, які вяртаецца IF, пераходзіць у table_array VLOOKUP, які цягне адпаведнае значэнне з 2-га слупка на адпаведным аркушы.
Разумнае выкарыстанне змешаных спасылак для значэння пошуку ($A2 - абсалютны слупок і адносны радок) і лагічны тэст КАЛІ (B$1 - адносны слупок і абсалютны радок) дазваляе капіяваць формулу ў іншыя ячэйкі без якіх-небудзь змяненняў - Excel наладжвае спасылкі аўтаматычна на аснове адноснага становішча радка і слупка.
Такім чынам, мы ўводзім формулу ў B2, капіюем яе правільна і да неабходнай колькасці слупкоў і радкоў і атрымаем наступны вынік:
УСКОСНАЯ ВЫГЛЯД
Пры працы з вялікай колькасцю аркушаў формула таксама можа складацца з некалькіх укладзеных узроўняў доўгі і складаны для чытання. Нашмат лепшы спосаб - стварыць дынамічны дыяпазон ВПР з дапамогай INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Тут мы аб'ядноўваем спасылку на ячэйку, якая змяшчаеунікальная частка найменнага дыяпазону (B1) і агульная частка (_Sales). Гэта стварае тэкставы радок накшталт "East_Sales", які УСКОСНА пераўтворыцца ў назву дыяпазону, зразумелую Excel.
У выніку вы атрымаеце кампактную формулу, якая выдатна працуе на любой колькасці аркушаў:
Вось як VLookup паміж аркушамі і файламі ў Excel. Я дзякую вам за чытанне і спадзяюся ўбачыць вас у нашым блогу на наступным тыдні!
Практычны сшытак для спампоўкі
Віртуальны пошук прыкладаў некалькіх аркушаў (.xlsx файл)
ставіцца да першай ячэйкі дадзеных, якая з'яўляецца A2. - Масіў_табліцы - гэта дыяпазон A2:B6 на аркушы Jan. Каб спасылацца на яго, пастаўце перад спасылкай на дыяпазон імя аркуша, за якім варта клічнік: Jan!$A$2:$B$6.
Калі ласка, звярніце ўвагу, што мы блакуем дыяпазон абсалютнымі спасылкамі на ячэйкі, каб прадухіліць яго змяненне пры капіраванні формулы ў іншыя ячэйкі.
Col_index_num роўны 2, таму што мы хочам скапіяваць значэнне са слупка B, які з'яўляецца 2-м слупком у таблічным масіве.
- Range_lookup усталявана ў FALSE для пошуку дакладнага супадзення.
Аб'яднаўшы аргументы, мы атрымаем наступную формулу:
=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)
Парады і заўвагі:
- Калі назва аркуша змяшчае прабелы або неалфавітныя сімвалы , яна павінна быць заключана ў двукоссе, напрыклад "Ян Сэйлз"!$A$2:$B$6 . Для атрымання дадатковай інфармацыі, калі ласка, гл. Як спасылацца на іншы аркуш у Excel.
- Замест таго, каб уводзіць назву аркуша непасрэдна ў формулу, вы можаце пераключыцца на ліст пошуку і выбраць там дыяпазон. Excel аўтаматычна ўставіць спасылку з правільным сінтаксісам, пазбаўляючы вас ад праверкі імя і ліквідацыі непаладак.
ВПР з іншай кнігі
У ВПР паміж двумапрацоўныя кнігі, уключыце назву файла ў квадратныя дужкі, а затым назву аркуша і клічнік.
Напрыклад, каб шукаць значэнне A2 у дыяпазоне A2:B6 на аркушы Jan у працоўнай кнізе Sales_reports.xlsx выкарыстоўвайце наступную формулу:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Для атрымання поўнай інфармацыі глядзіце VLOOKUP з іншай кнігі ў Excel.
VLOOKUP папярок некалькі аркушаў з IFERROR
Калі вам трэба шукаць паміж больш чым двума аркушамі, самае простае рашэнне - выкарыстоўваць VLOOKUP у спалучэнні з IFERROR. Ідэя складаецца ў тым, каб укласці некалькі функцый IFERROR для праверкі некалькіх аркушаў адзін за адным: калі першы VLOOKUP не знаходзіць супадзення на першым аркушы, шукайце на наступным аркушы і гэтак далей.
IFERROR(VLOOKUP(…), IFERROR(VLOOKUP(…), …, " Не знойдзена "))Каб убачыць, як гэты падыход працуе з рэальнымі дадзенымі, давайце разгледзім наступны прыклад. Ніжэй табліца Зводка , якую мы хочам запоўніць назвамі тавараў і сумамі, шукаючы нумар заказу на аркушах Захад і Усход :
Спачатку мы выцягнем прадметы. Для гэтага мы загадваем формуле VLOOKUP шукаць парадкавы нумар у A2 на аркушы East і вяртаць значэнне са слупка B (2-і слупок у table_array A2:C6). Калі дакладнае супадзенне не знойдзена, шукайце на аркушы Захад . Калі абодва ВПР церпяць збой, вярніце "Не знойдзена".
=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"))
Савет. Пры неабходнасці вы можаце задаць розныя масівы табліц для розных функцый VLOOKUP. У гэтым прыкладзе абодва аркушы пошуку маюць аднолькавую колькасць радкоў (A2:C6), але вашы аркушы могуць адрознівацца па памеры.
Віртуальны пошук у некалькіх працоўных кнігах
Для ВЧ-прагляду паміж дзвюма ці больш працоўнымі кнігамі заключыце назву працоўнай кнігі ў квадратныя дужкі і пастаўце яе перад назвай аркуша. Напрыклад, вось як можна зрабіць ВПР у двух розных файлах ( Book1 і Book2 ) з дапамогай адной формулы:
=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"))
Зрабіце нумар індэкса слупка дынамічным для некалькіх слупкоў Vlookup
У сітуацыі, калі вам трэба вярнуць даныя з некалькіх слупкоў, дынамічны col_index_num можа зэканоміць ваш час. Неабходна зрабіць пару карэкціровак:
- Для аргумента col_index_num выкарыстоўвайце функцыю COLUMNS, якая вяртае колькасць слупкоў у вызначаным масіве: COLUMNS($A$1 :B$1). (Каардыната радка не мае асаблівага значэння, гэта можа быць любы радок.)
- У аргументе lookup_value зафіксуйце спасылку на слупок знакам $ ($A2), каб ён заставаўся выпраўлена пры капіраванні формулы ў іншыя слупкі.
У выніку вы атрымаеце свайго роду дынамічную формулу, якая здабывае адпаведныя значэнні з розных слупкоў, у залежнасці ад таго, у які слупок формула капіюецца:
=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"))
Пры ўводзе ў слупок B, COLUMNS($A$1:B$1)вылічваецца 2, паведамляючы VLOOKUP вярнуць значэнне з 2-га слупка таблічнага масіву.
Пры капіраванні ў слупок C (г.зн. вы перацягнулі формулу з B2 у C2), B$1 змяняецца на C$1, таму што спасылка на слупок адносная. Такім чынам, COLUMNS($A$1:C$1) дае значэнне 3, прымушаючы VLOOKUP вяртаць значэнне з 3-га слупка.
Гэта формула выдатна працуе для 2-3 лістоў пошуку. Калі ў вас больш, паўтаральныя IFERROR становяцца занадта грувасткімі. Наступны прыклад дэманструе крыху больш складаны, але нашмат больш элегантны падыход.
ВПР на некалькіх аркушах з дапамогай INDIRECT
Яшчэ адзін спосаб ВПР паміж некалькімі аркушамі ў Excel - выкарыстанне камбінацыі VLOOKUP і УСКОСНЫЯ функцыі. Гэты метад патрабуе невялікай падрыхтоўкі, але ў рэшце рэшт вы атрымаеце больш кампактную формулу для ВПР у любой колькасці электронных табліц.
Агульная формула для ВПР на аркушах выглядае наступным чынам:
VLOOKUP( значэнне_прагляду , INDIRECT("'"&INDEX( Лістовы_прагляду , MATCH(1, ---(COUNTIF(INDIRECT("'" & Аркушы_прагляду & ") '! дыяпазон_прагляду "), значэнне_прагляду )>0), 0)) & "'! масіў_табліцы "), нумар_слупка_індэкса , FALSE)Дзе:
- Lookup_sheets - найменны дыяпазон, які складаецца з імёнаў лістоў пошуку.
- Lookup_value - значэнне для пошуку.
- Дыяпазон_прагляду - дыяпазон слупка ў аркушах пошуку, дзе шукаць пошукзначэнне.
- Table_array - дыяпазон даных у пошукавых лістах.
- Col_index_num - нумар слупка ў таблічным масіве, з якога вяртае значэнне.
Каб формула працавала карэктна, майце на ўвазе наступныя засцярогі:
- Гэта формула масіва, якую трэба завяршыць, націснуўшы Ctrl + Клавішы Shift + Enter разам.
- Усе аркушы павінны мець аднолькавы парадак слупкоў .
- Паколькі мы выкарыстоўваем адзін таблічны масіў для ўсіх аркушаў пошуку, укажыце самы вялікі дыяпазон , калі вашы аркушы маюць розную колькасць радкоў.
Як выкарыстоўваць формулу для ВПР на аркушах
Каб ВПР шукаць некалькі аркушаў адначасова, выканайце наступныя крокі:
- Запішыце ўсе назвы аркушаў пошуку дзе-небудзь у сваёй працоўнай кніжцы і назавіце гэты дыяпазон ( Лістоў пошуку у нашым выпадку).
- шукаць значэнне A2 ( lookup_value )
- у дыяпазоне A2:A6 ( lookup_range ) у чатыры аркушы ( Усход , Поўнач , Поўдзень і Захад ), і
- выцягнуць адпаведныя значэнні са слупка B, які з'яўляецца слупком 2 ( col_index_num ) у дыяпазоне даных A2:C6 ( table_array ).
З прыведзенымі вышэй аргументамі формула прымае такую форму:
=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)
Звярніце ўвагу, што мы блакуем абодва дыяпазоны ($A$2:$A$6 і $A$2:$C$6) з абсалютнымі спасылкамі на ячэйкі.
Як У выніку мы атрымалі формулу для пошуку нумара замовы на 4 аркушах і атрымання адпаведнага элемента. Калі канкрэтны нумар заказу не знойдзены, адлюстроўваецца памылка #N/A, як у радку 14:
Каб вярнуць суму, проста заменіце 2 на 3 у col_index_num Аргумент як сумы знаходзяцца ў 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)
Калі вы хочаце замяніць стандартнае абазначэнне памылкі #N/A сваім уласным тэкстам, перанясіце формулу ў функцыю IFNA:
=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")
Vlookup некалькіх аркушаў паміж працоўнымі кнігамі
Гэта агульная формула (ці яе любы варыянт) таксама можа быць выкарыстана для пошуку некалькіх аркушаў у іншай працоўнай кнізе . Для гэтага аб'яднайце імя працоўнай кнігі ўнутры INDIRECT, як паказана ў формуле ніжэй:
=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")
Віртуальны пошук паміж аркушамі і вяртанне некалькіх слупкоў
Калі вы хочаце атрымаць даныя з некалькіх слупкі, формула шматячэйкавага масіва можа зрабіць гэта за адзін раз. Каб стварыць такую формулу, увядзіце канстанту масіва для аргумента col_index_num .
У гэтым прыкладзе мы хочам вярнуць імёны элементаў (слупок B) і сумы (слупок C), якія з'яўляюцца 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)
Каб правільна ўвесці формулу ў некалькі ячэек, вам трэба зрабіць вось што:
- У першым радку, выберыце ўсе вочкі, якія трэба запоўніць (B2:C2 у нашым прыкладзе).
- Увядзіце формулу і націсніце Ctrl + Shift + Enter. У выбраныя ячэйкі ўводзіцца адна формула, якая верне розныя значэнні ў кожным слупку.
- Перацягніце формулу ўніз да астатніх радкоў.
Як працуе гэтая формула
Каб лепш зразумець логіку, давайце разбяром гэтую базавую формулу на асобныя функцыі:
=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)
Працуючы знутры, вось што робіць формула:
COUNTIF і INDIRECT
У двух словах, INDIRECT стварае спасылкі для ўсіх лістоў пошуку, а COUNTIF падлічвае колькасць выпадкаў пошуку значэнне (A2) на кожным аркушы:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
Больш падрабязна:
Спачатку вы аб'ядноўваеце назву дыяпазону (Lookup_sheets) і спасылку на дыяпазон ($A$2: $A$6), дадаўшы апостраф і клічнік у патрэбных месцах, каб зрабіць знешнюю спасылку, і перадаць атрыманы тэкставы радок у функцыю INDIRECT для дынамічнай спасылкі на аркушы пошуку:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF правярае кожную ячэйку ў дыяпазоне A2:A6 на кожным аркушы пошуку адносна значэння ў A2 на галоўным ліст і вяртае колькасць супадзенняў для кожнага аркуша. У нашым наборы дадзеных парадкавы нумар у фармаце A2 (101) знаходзіцца на аркушы West , які з'яўляецца 4-м унайменны дыяпазон, таму COUNTIF вяртае гэты масіў:
{0;0;0;1}
Далей вы параўноўваеце кожны элемент масіва вышэй з 0:
--({0; 0; 0; 1}>0)
Гэта дае масіў значэнняў TRUE (больш за 0) і FALSE (роўных 0), якія вы прыводзіце да 1 і 0 з дапамогай двайнога адзінарнага (--), і ў выніку атрымліваеце наступны масіў:
{0; 0; 0; 1}
Гэтая аперацыя з'яўляецца дадатковай мерай засцярогі для апрацоўкі сітуацыі, калі аркуш пошуку змяшчае некалькі ўваходжанняў значэння пошуку, і ў гэтым выпадку COUNTIF верне лік, большы за 1, у той час як нам патрэбныя толькі 1 і 0 у канчатковы масіў (неўзабаве вы зразумееце чаму).
Пасля ўсіх гэтых пераўтварэнняў наша формула выглядае наступным чынам:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
ІНДЭКС і СУПАДАВАННЕ
На гэтым этапе ўваходзіць класічная камбінацыя INDEX MATCH:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
Функцыя MATCH, настроеная на дакладнае супадзенне (0 у апошнім аргументе), шукае значэнне 1 у масіве { 0;0;0;1} і вяртае сваю пазіцыю, якая роўная 4:
INDEX(Lookup_sheets, 4)
Функцыя INDEX выкарыстоўвае вернуты лік па MATCH у якасці аргумента нумара радка (row_num) і вяртае 4-е значэнне ў названым дыяпазоне Lookup_sheets , які з'яўляецца West .
Такім чынам, формула дадаткова памяншае да:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP і INDIRECT
Функцыя INDIRECT апрацоўвае тэкставы радок у ім:
INDIRECT("'"&"West"&"'!$A$2:$C$6")
І пераўтварае яго у спасылку, якая ідзе на аргумент table_array