Spis treści
Samouczek pokazuje, jak używać funkcji VLOOKUP do kopiowania danych z innego arkusza lub skoroszytu, Vlookup w wielu arkuszach oraz dynamicznego wyszukiwania w celu zwrócenia wartości z różnych arkuszy do różnych komórek.
Kiedy szukamy jakichś informacji w Excelu, rzadko kiedy wszystkie dane znajdują się na tym samym arkuszu. Częściej trzeba szukać w wielu arkuszach, a nawet różnych skoroszytach. Dobra wiadomość jest taka, że Microsoft Excel oferuje więcej niż jeden sposób, aby to zrobić, a zła jest taka, że wszystkie sposoby są nieco bardziej skomplikowane niż standardowa formuła VLOOKUP. Ale przy odrobinie cierpliwości, możemyrozgryzie je :)
Jak zrobić VLOOKUP pomiędzy dwoma arkuszami
Na początek przeanalizujmy najprostszy przypadek - użycie VLOOKUP do skopiowania danych z innego arkusza. Jest to bardzo podobne do zwykłej formuły VLOOKUP, która przeszukuje ten sam arkusz. Różnica polega na tym, że nazwa arkusza jest umieszczona w polu tablica argument informujący o tym, w którym arkuszu znajduje się zakres odnośników.
Ogólna formuła do VLOOKUP z innego arkusza jest następująca:
VLOOKUP(lookup_value, Arkusz!zakres , col_index_num, [range_lookup])Jako przykład niech posłużą dane dotyczące sprzedaży z Jan raport do Podsumowanie arkusz. W tym celu definiujemy następujące argumenty:
- Lookup_values znajdują się w kolumnie A na Podsumowanie arkusza i odwołujemy się do pierwszej komórki z danymi, czyli A2.
- Tablica to zakres A2:B6 w arkuszu Jan. Aby się do niego odwołać, należy poprzedzić odwołanie do zakresu nazwą arkusza, a następnie wykrzyknikiem: Jan!$A$2:$B$6.
Proszę zwrócić uwagę, że zakres blokujemy bezwzględnymi odwołaniami do komórek, aby nie zmieniał się podczas kopiowania formuły do innych komórek.
Col_index_num wynosi 2, ponieważ chcemy skopiować wartość z kolumny B, która jest drugą kolumną w tablicy.
- Range_lookup jest ustawiona na FALSE, aby wyszukać dokładne dopasowanie.
Składając te argumenty w całość, otrzymujemy taki oto wzór:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Przeciągnij formułę w dół kolumny, a otrzymasz taki wynik:
W podobny sposób można Vlookupować dane z Luty oraz Mar arkusze:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Wskazówki i uwagi:
- Jeśli nazwa arkusza zawiera miejsca lub znaki niealfabetyczne musi być ujęty w pojedynczy cudzysłów, np. 'Jan Sales'!$A$2:$B$6 Więcej informacji można znaleźć w części Jak odwołać się do innego arkusza w programie Excel.
- Zamiast wpisywać nazwę arkusza bezpośrednio w formule, możesz przejść do arkusza lookup i wybrać tam zakres. Excel automatycznie wstawi odwołanie z poprawną składnią, oszczędzając Ci trudu sprawdzania nazwy i rozwiązywania problemów.
Vlookup z innego skoroszytu
Aby wykonać VLOOKUP pomiędzy dwoma skoroszytami, należy umieścić nazwę pliku w nawiasach kwadratowych, a następnie nazwę arkusza i wykrzyknik.
Na przykład, aby wyszukać wartość A2 w zakresie A2:B6 na Jan arkusz w Sprzedaż_sprawozdań.xlsx skoroszytu, użyj tej formuły:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Pełne informacje na ten temat znajdziesz w artykule VLOOKUP z innego skoroszytu w Excelu.
Vlookup na wielu arkuszach z IFERROR
Kiedy trzeba szukać między więcej niż dwoma arkuszami, najprostszym rozwiązaniem jest użycie VLOOKUP w połączeniu z IFERROR. Pomysł polega na zagnieżdżeniu kilku funkcji IFERROR, aby sprawdzić wiele arkuszy jeden po drugim: jeśli pierwszy VLOOKUP nie znajdzie dopasowania w pierwszym arkuszu, szukaj w następnym arkuszu, i tak dalej.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Nie znaleziono "))Aby zobaczyć jak to podejście działa na rzeczywistych danych, rozważmy następujący przykład.Poniżej znajduje się Podsumowanie tabelę, którą chcemy wypełnić nazwami pozycji i kwotami poprzez wyszukanie numeru zamówienia w West oraz East arkusze:
Najpierw wyciągniemy pozycje. W tym celu instruujemy formułę VLOOKUP, aby wyszukała numer zamówienia w A2 na stronie East i zwrócić wartość z kolumny B (2. kolumna w tablica A2:C6). Jeśli nie znaleziono dokładnego dopasowania, należy szukać w West Jeśli oba Vlookups nie powiodą się, zwróć "Nie znaleziono".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
Aby zwrócić kwotę, wystarczy zmienić numer indeksu kolumny na 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
Wskazówka. W razie potrzeby można określić różne tablice tabel dla różnych funkcji VLOOKUP. W tym przykładzie oba arkusze lookup mają taką samą liczbę wierszy (A2:C6), ale Twoje arkusze mogą mieć różne rozmiary.
Vlookup w wielu skoroszytach
Aby wykonać Vlookup pomiędzy dwoma lub więcej skoroszytami, należy zawrzeć nazwę skoroszytu w nawiasach kwadratowych i umieścić ją przed nazwą arkusza. Na przykład, w ten sposób można wykonać Vlookup w dwa różne pliki ( Księga1 oraz Księga2 ) za pomocą jednego wzoru:
=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"))
Spraw, aby numer indeksu kolumny był dynamiczny, aby Vlookup obejmował wiele kolumn
W sytuacji, gdy trzeba zwrócić dane z kilku kolumn, wykonanie col_index_num dynamika może zaoszczędzić ci trochę czasu. Trzeba wprowadzić kilka poprawek:
- Dla col_index_num argument, użyj funkcji KOLUMNY, która zwraca liczbę kolumn w określonej tablicy: KOLUMNY($A$1:B$1). (Współrzędna wiersza nie ma znaczenia, może to być dowolny wiersz).
- W lookup_value argument, blokuje odwołanie do kolumny znakiem $ ($A2), dzięki czemu pozostaje ono stałe podczas kopiowania formuły do innych kolumn.
W rezultacie otrzymujemy rodzaj dynamicznej formuły, która wydobywa pasujące wartości z różnych kolumn, w zależności od tego, do której kolumny formuła została skopiowana:
=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"))
Po wprowadzeniu do kolumny B, COLUMNS($A$1:B$1) ocenia na 2, mówiąc VLOOKUP, że zwraca wartość z drugiej kolumny tablicy.
Po skopiowaniu do kolumny C (tj. przeciągnięciu formuły z B2 do C2), B$1 zmienia się na C$1, ponieważ odwołanie do kolumny jest względne. W konsekwencji COLUMNS($A$1:C$1) ocenia się na 3, zmuszając VLOOKUP do zwrócenia wartości z trzeciej kolumny.
Ta formuła działa świetnie dla 2 - 3 arkuszy lookup. Jeśli masz więcej, powtarzające się IFERRORy stają się zbyt uciążliwe. Następny przykład demonstruje nieco bardziej skomplikowane, ale dużo bardziej eleganckie podejście.
Vlookup wielu arkuszy z INDIRECT
Jeszcze jednym sposobem na Vlookup między wieloma arkuszami w Excelu jest użycie kombinacji funkcji VLOOKUP i INDIRECT. Ta metoda wymaga trochę przygotowania, ale w końcu będziesz miał bardziej kompaktową formułę do Vlookup w dowolnej liczbie arkuszy kalkulacyjnych.
Ogólna formuła do Vlookup przez arkusze jest następująca:
VLOOKUP( lookup_value , INDIRECT("'"&INDEX( Lookup_sheets , MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'! lookup_range "), lookup_value )>0), 0)) & "'! tablica "), col_index_num , FALSE)Gdzie:
- Lookup_sheets - nazwany zakres składający się z nazw arkuszy lookup.
- Lookup_value - wartość, której należy szukać.
- Lookup_range - zakres kolumn w arkuszach lookup, w których należy szukać wartości lookup.
- Tablica - zakres danych w arkuszach wynikowych.
- Col_index_num - numer kolumny w tablicy, z której ma zostać zwrócona wartość.
Aby formuła działała poprawnie, należy pamiętać o następujących zastrzeżeniach:
- Jest to formuła tablicowa, którą należy uzupełnić, naciskając razem klawisze Ctrl + Shift + Enter.
- Wszystkie arkusze muszą mieć taka sama kolejność kolumn .
- Ponieważ używamy jednej tablicy dla wszystkich arkuszy wyszukujących, należy określić największy zakres jeśli twoje arkusze mają różną liczbę rzędów.
Jak używać formuły Vlookup w różnych arkuszach
Aby Vlookupować wiele arkuszy jednocześnie, wykonaj następujące kroki:
- Zapisz wszystkie nazwy arkuszy lookup gdzieś w swoim skoroszycie i nazwij ten zakres ( Lookup_sheets w naszym przypadku).
- wyszukiwanie wartości A2 ( lookup_value )
- w zakresie A2:A6 ( lookup_range ) w czterech arkuszach ( East , Północna , Południowa oraz West ), oraz
- wyciągnąć pasujące wartości z kolumny B, która jest kolumną 2 ( col_index_num ) w zakresie danych A2:C6 ( tablica ).
Przy powyższych argumentach formuła przyjmuje taki kształt:
=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)
Zauważ, że oba zakresy ($A$2:$A$6 i $A$2:$C$6) blokujemy bezwzględnymi odwołaniami do komórek.
W efekcie mamy formułę, która ma wyszukać numer zamówienia w 4 arkuszach i pobrać odpowiednią pozycję. Jeśli nie zostanie znaleziony konkretny numer zamówienia, wyświetlony zostanie błąd #N/A jak w wierszu 14:
Aby zwrócić kwotę, wystarczy zamienić 2 na 3 w col_index_num argumentu, gdyż kwoty znajdują się w 3 kolumnie tablicy:
=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)
Jeśli chciałbyś zastąpić standardową notację błędu #N/A własnym tekstem, zawiń formułę w funkcję 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), "Nie znaleziono")
Vlookup wielu arkuszy między skoroszytami
Ta ogólna formuła (lub jej dowolna odmiana) może być również użyta do Vlookup wielu arkuszy w inny podręcznik W tym celu należy połączyć nazwę skoroszytu wewnątrz INDIRECT, jak pokazano w poniższej formule:
=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")
Vlookup pomiędzy arkuszami i zwracanie wielu kolumn
Jeśli chcesz wyciągnąć dane z kilku kolumn, a formuła macierzy wielokomórkowej Aby stworzyć taką formułę, należy podać stałą tablicową dla col_index_num argument.
W tym przykładzie chcemy zwrócić nazwy pozycji (kolumna B) i kwoty (kolumna C), które są odpowiednio drugą i trzecią kolumną tablicy. Wymagana tablica to więc {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)
Aby poprawnie wprowadzić formułę do wielu komórek, należy zrobić to w następujący sposób:
- W pierwszym rzędzie zaznacz wszystkie komórki, które mają zostać zaludnione (B2:C2 w naszym przykładzie).
- Wpisz formułę i naciśnij Ctrl + Shift + Enter . Wprowadza to tę samą formułę w wybranych komórkach, która zwróci inną wartość w każdej kolumnie.
- Przeciągnij formułę w dół na pozostałe wiersze.
Jak działa ta formuła
Aby lepiej zrozumieć logikę, rozbijmy ten podstawowy wzór na poszczególne funkcje:
=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)
Pracując od środka na zewnątrz, oto co robi formuła:
COUNTIF i INDIRECT
W skrócie, INDIRECT buduje referencje dla wszystkich arkuszy lookup, a COUNTIF liczy wystąpienia wartości lookup (A2) w każdym arkuszu:
--(COUNTIF( INDIRECT(""&Lookup_sheets&""!$A$2:$A$6"), $A2)>0)
Bardziej szczegółowo:
Najpierw konkatenujemy nazwę zakresu (Lookup_sheets) i odwołanie do zakresu ($A$2:$A$6), dodając apostrofy i wykrzyknik w odpowiednich miejscach, aby utworzyć zewnętrzne odwołanie, i podajemy wynikowy ciąg tekstowy do funkcji INDIRECT, aby dynamicznie odwoływać się do arkuszy lookup:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF sprawdza każdą komórkę z zakresu A2:A6 w każdym arkuszu wyszukującym z wartością w A2 w arkuszu głównym i zwraca liczbę dopasowań dla każdego arkusza. W naszym zbiorze danych numer zamówienia w A2 (101) znajduje się w West arkusz, który jest 4. w nazwanym zakresie, więc COUNTIF zwraca tę tablicę:
{0;0;0;1}
Następnie porównujesz każdy element powyższej tablicy z 0:
--({0; 0; 0; 1}>0)
Daje to tablicę wartości TRUE (większych niż 0) i FALSE (równych 0), które można zamienić na 1 i 0 za pomocą podwójnego unarnego (--), i uzyskać następującą tablicę jako wynik:
{0; 0; 0; 1}
Operacja ta jest dodatkowym zabezpieczeniem przed sytuacją, gdy arkusz lookup zawiera kilka wystąpień wartości lookup, w takim przypadku COUNTIF zwróciłby liczbę większą niż 1, podczas gdy chcemy, aby w końcowej tablicy były tylko 1 i 0 (za chwilę zrozumiesz dlaczego).
Po tych wszystkich przekształceniach nasz wzór wygląda następująco:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDEKS i MATCH
W tym momencie wkracza klasyczna kombinacja INDEX MATCH:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
Funkcja MATCH skonfigurowana na dokładne dopasowanie (0 w ostatnim argumencie) szuka wartości 1 w tablicy {0;0;0;1} i zwraca jej pozycję, czyli 4:
INDEX(Lookup_sheets, 4)
Funkcja INDEX używa liczby zwróconej przez MATCH jako argumentu numeru wiersza (row_num) i zwraca 4. wartość w podanym zakresie Lookup_sheets , czyli West .
Dalej więc wzór sprowadza się do:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP i INDIRECT
Funkcja INDIRECT przetwarza znajdujący się wewnątrz niej ciąg tekstowy:
INDIRECT("'"& "West"&""!$A$2:$C$6")
I przekształca go w referencję, która trafia do tablica argument VLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Na koniec ta bardzo standardowa formuła VLOOKUP szuka wartości A2 w pierwszej kolumnie zakresu A2:C6 na stronie West i zwraca dopasowanie z 2. kolumny. To jest to!
Dynamiczny VLOOKUP do zwracania danych z wielu arkuszy do różnych komórek
Na początek zdefiniujmy, co dokładnie oznacza w tym kontekście słowo "dynamiczny" i czym ta formuła będzie się różnić od poprzednich.
W przypadku, gdy masz duże porcje danych w tym samym formacie, które są podzielone na wiele arkuszy kalkulacyjnych, możesz chcieć wyodrębnić informacje z różnych arkuszy do różnych komórek. Poniższy obrazek ilustruje tę koncepcję:
W przeciwieństwie do poprzednich formuł, które pobierały wartość z określonego arkusza na podstawie unikalnego identyfikatora, tym razem chcemy wydobyć wartości z kilku arkuszy jednocześnie.
Istnieją dwa różne rozwiązania tego zadania. W obu przypadkach należy wykonać trochę pracy przygotowawczej i utworzyć nazwane zakresy dla komórek danych w każdym arkuszu lookup. Dla tego przykładu zdefiniowaliśmy następujące zakresy:
- Wschód_Sprzedaż - A2:B6 na arkuszu wschodnim
- North_Sales - A2:B6 na arkuszu północnym
- South_Sales - A2:B6 na arkuszu południowym
- West_Sales - A2:B6 na arkuszu zachodnim
VLOOKUP i zagnieżdżone IF
Jeśli masz rozsądną liczbę arkuszy do przejrzenia, możesz użyć zagnieżdżonych funkcji IF, aby wybrać arkusz na podstawie słów kluczowych w predefiniowanych komórkach (komórki B1 do D1 w naszym przypadku).
Z wartością lookup w A2, formuła jest następująca:
=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)
Przetłumaczony na język angielski fragment IF brzmi:
Jeśli B1 jest East , szukaj w przedziale o nazwie Wschód_Sprzedaż ; jeśli B1 to. Północna , szukaj w przedziale o nazwie North_Sales ; jeśli B1 to. Południowa , szukaj w przedziale o nazwie South_Sales ; a jeśli B1 to. West , szukaj w przedziale o nazwie West_Sales .
Zakres zwracany przez IF sięga do tablica VLOOKUP, który wyciąga pasującą wartość z 2. kolumny w odpowiednim arkuszu.
Sprytne wykorzystanie mieszanych odwołań dla wartości lookup ($A2 - kolumna bezwzględna i wiersz względny) oraz testu logicznego JEŻELI (B$1 - kolumna względna i wiersz bezwzględny) pozwala na kopiowanie formuły do innych komórek bez żadnych zmian - Excel automatycznie dostosowuje odwołania na podstawie względnego położenia wiersza i kolumny.
Wpisujemy więc formułę w B2, kopiujemy ją w prawo i w dół do tylu kolumn i wierszy, ile potrzeba, i otrzymujemy następujący wynik:
POŚREDNI VLOOKUP
W przypadku pracy z wieloma arkuszami, wiele zagnieżdżonych poziomów może sprawić, że formuła będzie zbyt długa i trudna do odczytania. Znacznie lepszym rozwiązaniem jest utworzenie formuły dynamiczny zakres vlookup za pomocą INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Tutaj konkatenujemy odwołanie do komórki, która zawiera unikalną część nazwanego zakresu (B1) i część wspólną (_Sales). W ten sposób powstaje ciąg tekstowy typu "East_Sales", który INDIRECT konwertuje na nazwę zakresu zrozumiałą przez Excela.
W efekcie otrzymujesz kompaktową formułę, która pięknie sprawdza się na dowolnej ilości arkuszy:
Tak właśnie wygląda Vlookup pomiędzy arkuszami i plikami w Excelu. Dziękuję za przeczytanie i mam nadzieję, że zobaczymy się na naszym blogu za tydzień!
Zeszyt ćwiczeń do pobrania
Przykłady Vlookup wielu arkuszy (plik .xlsx)