Jak symulować pełne łączenie zewnętrzne w programie Excel?

34

Załóżmy, że mam pewne dane w Excelu (a nie w prawdziwej bazie danych). W jednym arkuszu mam dane, w których jedna kolumna działa jako identyfikator, i upewniłam się, że wartości w tej kolumnie są unikalne. W innym arkuszu mam również pewne dane, ponownie z jedną kolumną, którą można potraktować jako identyfikator, i jest ona również unikalna. Jeśli rząd N w arkuszu 1 ma jakąś wartość, a rząd M w arkuszu 2 ma tę samą wartość, jestem pewien, że rząd N i rząd M opisują ten sam obiekt świata rzeczywistego.

O co pytam: jak mogę uzyskać równowartość pełnego sprzężenia zewnętrznego bez pisania makr? Formuły i wszystkie funkcje dostępne za pośrednictwem wstążki są w porządku.

Mały przykład „odtwarzaj dane”:

Arkusz 1:

Dostoyevski    Russia
Pushkin        Russia
Shelley        England
Flaubert       France
Hugo           France
Eichendorff    Germany
Byron          England
Zola           France

Arkusz 2:

Shelley        Percy Bysshe
Eichendorff    Josef Freiherr Von
Flaubert       Gustave
Byron          Lord
Keller         Gottfried
Dostoyevski    Fyodor
Zola           Emile
Balzac         Honoré de

Pożądane wyjście (sortowanie nie jest ważne):

Dostoyevski    Russia   Fyodor
Pushkin        Russia
Shelley        England  Percy Bysshe
Flaubert       France   Gustave
Hugo           France
Eichendorff    Germany  Josef Freiherr von
Byron          England  Lord
Zola           France   Emile
Keller                  Gottfried
Balzac                  Honoré de

Wszystkim, którzy są przerażeni tym scenariuszem: wiem, że jest to niewłaściwy sposób. Jeśli mam jakiś wybór, nie użyłbym do tego Excela. Istnieje jednak wystarczająca liczba sytuacji, w których potrzebne jest pragmatyczne rozwiązanie, nie można zastosować statystyki i lepszego (z punktu widzenia IT) rozwiązania.

rumtscho
źródło
Jeśli posortujesz obie listy i umieścisz je obok siebie, powinno być dość łatwe ręczne dopasowanie odpowiedniej kolumny. Jeśli masz dużo danych, możesz napisać funkcję, która bierze dwa zakresy i robi to za Ciebie.
Dan
@ Dan, jak powiedziałem, proszę o zrobienie tego bez pisania funkcji . W sytuacjach, w których mogę to napisać, rozwiązanie jest trywialne (przynajmniej dla mnie, ponieważ wcześniej pisałem VBA)
rumtscho
Excel obsługuje zapytania SQL za pośrednictwem połączeń danych. Jestem w tym okropny, więc niestety nie mogę zaoferować więcej porad, ale może warto poszukać ciebie.
Kyle
@Kyle Dodałem tę opcję do mojej odpowiedzi. To nie jest dla osób o słabym sercu i może to być bałagan do grania i / lub całkowita przesada, ale hej, dlaczego nie!
Enderland

Odpowiedzi:

44

Łatwe podejście - standardowe operacje Excela

Najpierw skopiuj / wklej obie kluczowe kolumny z obu tabel do jednego nowego arkusza jako pojedynczej kolumny.

Skorzystaj z opcji „Usuń duplikaty”, aby uzyskać pojedynczą listę wszystkich unikatowych kluczy.

Następnie dodaj dwie kolumny (w tym przypadku), po jednej dla każdej kolumny danych w każdej tabeli. Zalecam również użycie formatu jako opcji tabeli, ponieważ sprawia, że ​​formuły wyglądają o wiele ładniej. Korzystając z vlookup, użyj następującej formuły:

=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")

Gdzie Sheet4!A:Breprezentuje dowolną tabelę danych tabeli źródłowej dla każdej odpowiedniej wartości. IFERROR zapobiega brzydkim wynikom # N / A, które pojawiają się, gdy vlookup nie powiedzie się i w tym przypadku zwraca pustą komórkę.

To daje wynikową tabelę.


Arkusz 3:

wprowadź opis zdjęcia tutaj

Arkusz 4:

wprowadź opis zdjęcia tutaj

Dane wynikowe:

wprowadź opis zdjęcia tutaj

Formuły wyników ( Ctrl+ ~przełącza to):

wprowadź opis zdjęcia tutaj


Wbudowane zapytanie SQL

Możesz to również zrobić za pomocą wbudowanego zapytania SQL. Jest ... znacznie mniej przyjazny dla użytkownika, ale może będzie lepszym przykładem użycia. Będzie to prawdopodobnie wymagać sformatowania danych „źródłowych” jako tabel.

  1. Kliknij komórkę w nowym arkuszu
  2. Przejdź do Dane -> Z innych źródeł -> Z zapytania Microsoft
  3. Wybierz pliki Excel * na karcie Bazy danych i naciśnij OK
  4. Wybierz skoroszyt
  5. Wybierz następujące cztery pola:
    • wprowadź opis zdjęcia tutaj
  6. Kliknij „Dalej” i „OK” w ładnym, sformatowanym ostrzeżeniu z lat 90
  7. Postępując zgodnie z tymi instrukcjami, utwórz pierwsze lewe łączenie zewnętrzne. W moim przypadku używam tabeli „kraje” jako lewego źródła i „nazw” jako prawej.
    • wprowadź opis zdjęcia tutaj
    • Daje to tylko niektóre wiersze (ponieważ dołączasz do identyfikatora)
  8. Część „utwórz złączenie odejmujące, a następnie dodaj jako połączenie” jest bardziej skomplikowana.

    • Oto konfiguracje łączenia odejmowania: wprowadź opis zdjęcia tutaj
    • Skopiuj kod SQL tego sprzężenia z przycisku SQL:
    • SELECT countries$.ID, countries$.Val1, names$.ID, names$. Val2 OD {oj C:\Users\Username\Desktop\Book2.xlsx. countries$ countries$DOŁĄCZ DO LEWEGO ZEWNĘTRZNEGO C:\Users\Username\Desktop\Book2.xlsx. names$ names$ON countries$.ID = names$.ID} GDZIE ( names$.ID ma wartość NULL)

  9. Wróć do pierwszego utworzonego połączenia zewnętrznego. Ręcznie edytuj kod SQL i

    • dodaj Uniondo dołu
    • Dodaj powyższy tekst połączenia odejmij na dole złącza
  10. Naciśnij przycisk „Zwróć dane” bezpośrednio po lewej stronie przycisku SQL
    • Możesz edytować SQL, aby wybrać tylko określone dane, które chcesz w tym momencie. W wyniku łatwiej mi ukryć kolumny.
  11. Umieść zapytanie gdzieś i potwierdź jego lokalizację
    • wprowadź opis zdjęcia tutaj

Nie dla słabego serca. Ale jeśli chcesz mieć wielką szansę, aby zobaczyć niektóre niezaktualizowane tak długo, jak mógłbyś być żywy, części pakietu Office, jest to świetna szansa.

kraina krańca
źródło
1
Czy masz odniesienie do notacji [@ID]? Nie wątpię, że to działa, ale nigdy wcześniej tego nie widziałem i wykonuję dużo pracy w Excelu.
TJL
1
@TJL, jeśli sformatujesz tabelę jako tabelę, użyje tego rodzaju notacji do odwoływania się do innych kolumn. Znacznie wyraźniejsze niż odwołania do komórek. To może być funkcja 2010+? Nie jestem pewny. Nie wykorzystałem magii formatowania jako wystarczającej liczby tabel przed 2010 rokiem.
Enderland
Czy nie możesz po prostu zmienić słowa LEWEGO na słowo FULL w pierwotnym zapytaniu? Jestem pewien, że po prostu używa sterownika ACE OLEDB do uruchomienia tego zapytania, które obsługuje składnię FULL JOIN.
Kyle Hale
14

Jako alternatywne rozwiązanie mogę zasugerować Power Query ? Jest to bezpłatny dodatek do programu Excel firmy Microsoft do wykonywania dokładnie takich czynności. Jego funkcjonalność zostanie również bezpośrednio uwzględniona w programie Excel 2016, więc jest przyszłościowa.

W każdym razie, dzięki Power Query, kroki są dość proste:

  1. Zaimportuj obie tabele jako zapytania do edytora zapytań Power Query.
  2. Wykonaj na nich transformację Merge Queries, ustawiając odpowiednią kolumnę łączenia i ustawiając typ łączenia jako Full Outer.
  3. Załaduj tabelę wyników do nowego arkusza.

Zaletą tego jest to, że po skonfigurowaniu tej opcji, jeśli dokonujesz zmian w swoich bazowych tabelach danych, po prostu naciskasz Dane> Odśwież wszystko, a także twoja karta wyników zapytania mocy jest aktualizowana.

Kyle Hale
źródło
Naprawdę interesujące. Mój przyjaciel, który jest właścicielem restauracji, zapytał mnie o MS Office i pokazał mi swój pakiet 2016, który nie obejmuje MS Access. Rozumiem teraz, dlaczego tak jest. Excel miał wiele ograniczeń. Nigdy nie kupiłem powyżej 2003 roku, ponieważ żadna z funkcji nie była wartościowa i nowy styl też mi się nie podobał; 2010 i więcej. Access robi to wszystko i jeszcze więcej, więc nasuwa się pytanie, dlaczego tak wiele osób próbuje wykonać pracę z bazą danych w programie Excel, skoro Access jest na to sposobem? Jedyne, co widzę to to, że być może, aby dobry Access DB działał, potrzebuje również dobrego doświadczenia w VB.
ejbytes
@ejbytes większość ludzi rozumie pojęcie arkuszy kalkulacyjnych. Większość ... nie rozumie pojęcia bazy danych. Miałem projekt konwertujący projekt arkusza kalkulacyjnego jako bazy danych do bazy danych, a użytkownicy nadal nazywali go „arkuszem kalkulacyjnym” - nawet po obszernych wyjaśnieniach dotyczących działania bazy danych!
Enderland
@enderland Myślę, że masz rację. Arkusz kalkulacyjny z nie rygorystycznymi regułami i nieciągłą elastycznością ... i kwerendami zamaskowanymi jako filtry. Platforma dla tabel i list make-shift.
ejbytes
@ejbytes tldr wersja jest MS chciał przetestować silnik pamięci magazynu kolumn w Excelu, aby pozwolić na więcej wierszy, zawierał zewnętrzne połączenia danych, okazał się bardzo popularny, więc dodali w narzędziu ETL. Teraz opracowali wszystkie narzędzia jako PowerBI.
Kyle Hale,
@KyleHale Korzystam z pakietu Office 2010 i próbuję wykonać PEŁNE ZŁĄCZE ZEWNĘTRZNE, ale usługa Power Query ignoruje identyfikatory z drugiej tabeli, których nie ma w pierwszej tabeli.
GeMir
0

Szybkim sposobem na pół-symulację (sprzężenie zewnętrzne) jest wzięcie drugiej listy i wklejenie jej bezpośrednio pod listą pięści, tzn. Aby wszystkie (klucze podstawowe) znajdowały się w tej samej (głównej) kolumnie. Następnie posortuj tę kolumnę podstawową, skończysz na liście z przeplotem, a następnie wykonasz transponowane równanie JEŻELI (superużytkownik psuje widok układu tabeli ...):

lista A lista B


sam blue tim 32874 tim red mary 5710 chris green gustav 047 fred blue
mary black

kopiuj / wklej / sortuj, wynik wygląda następująco: AB chris green fred blue gustav 047 mary 5710 mary black sam blue tim 32874 tim red

następnie formuła dla komórki c1: (c1) = if (A1 = A2, B2)

wynik wygląda następująco:

ABC chris zielony FALSE fred niebieski FALSE gustav 047 FALSE mary 5710 czarny mary czarny FALSE sam niebieski FALSE tim 32874 czerwony tim czerwony FALSE

Sortuj C, aby pozbyć się falals itp. Jest to podstawowa wersja pomysłu, wystarczy ją rozwinąć, jeśli potrzeba więcej danych. -wag770310

d587793
źródło
Czy możesz sformatować to w jakikolwiek sposób, aby było czytelne?
davidbaumann