VLOOKUP na wielu arkuszach w Excelu z przykładami

  • Udostępnij To
Michael Brown

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:

    1. Zapisz wszystkie nazwy arkuszy lookup gdzieś w swoim skoroszycie i nazwij ten zakres ( Lookup_sheets w naszym przypadku).

  • Dostosuj wzór ogólny do swoich danych, w tym przykładzie będzie to:
    • 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.

  • Wprowadź formułę w najwyższej komórce (B2 w tym przykładzie) i naciśnij Ctrl + Shift + Enter, aby ją zakończyć.
  • Kliknij dwukrotnie lub przeciągnij uchwyt wypełnienia, aby skopiować formułę w dół kolumny.
  • 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)

    Michael Brown jest oddanym entuzjastą technologii z pasją do upraszczania złożonych procesów za pomocą narzędzi programowych. Dzięki ponad dziesięcioletniemu doświadczeniu w branży technologicznej doskonalił swoje umiejętności w programach Microsoft Excel i Outlook, a także w Arkuszach i Dokumentach Google. Blog Michaela jest poświęcony dzieleniu się swoją wiedzą i doświadczeniem z innymi, dostarczając łatwych do zastosowania wskazówek i samouczków w celu poprawy produktywności i wydajności. Niezależnie od tego, czy jesteś doświadczonym profesjonalistą, czy początkującym, blog Michaela oferuje cenne spostrzeżenia i praktyczne porady dotyczące maksymalnego wykorzystania tych niezbędnych narzędzi programowych.