Як імітувати повне зовнішнє приєднання в Excel?


34

Припустимо, у мене є деякі дані в Excel (а не в реальній базі даних). На одному аркуші я маю дані, де один стовпець функціонує як ідентифікатор, і я переконався, що значення в цьому стовпці є унікальними. В іншому аркуші я також маю деякі дані, знову ж таки з одним стовпчиком, який можна вважати ідентифікатором, і він також унікальний. Якщо рядок N у Листі 1 має деяке значення, а рядок M у Листі 2 має те саме значення, я впевнений, що рядок N і рядок M описують один і той же об'єкт реального світу.

Що я запитую: як я можу отримати еквівалент повного зовнішнього з'єднання, не записуючи жодних макросів? Формули та всі функції, доступні через стрічку, добре.

Невеликий приклад "даних про відтворення":

Лист 1:

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

Лист 2:

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

Бажаний вихід (сортування не важливо):

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

Всім, хто жахнувся цим сценарієм: я знаю, що це неправильний спосіб зробити це. Якщо у мене є вибір, я б не використовував для цього Excel. Однак там є достатньо ситуацій, коли потрібне прагматичне рішення, статистика та краще (з точки зору ІТ) рішення не можна застосувати.


Якщо ви сортуєте обидва списки та покладете їх поруч, вручну потрібно зіставити потрібний стовпець. Якщо у вас багато даних, ви можете написати функцію, яка займає два діапазони, і робить це за вас.
Дан

@ Як я вже сказав, я прошу це зробити без написання функції . У ситуаціях, коли я можу це написати, рішення є тривіальним (принаймні для мене, тому що я писав VBA раніше)
rumtscho

Excel підтримує запити SQL через з'єднання даних. Мені це страшно, тому я, на жаль, не можу запропонувати набагато більше порад, але, можливо, варто звернути увагу на вас.
Кайл

@Kyle Я додав цей варіант до своєї відповіді. Це не для слабкого серця, і це може бути безладом, щоб грати та / або повне перенасичення, але ей, чому б ні!
Ендерленд

Відповіді:


44

Простий підхід - стандартні операції в Excel

Спочатку скопіюйте / вставте обидва ключові стовпці з обох таблиць в один, новий аркуш у вигляді одного стовпця.

За допомогою "Видалити копії" отримуйте єдиний список всіх ваших унікальних ключів.

Потім додайте два стовпці (у цьому випадку) - по одному для кожного стовпця даних у кожній таблиці. Я рекомендую використовувати формат як варіант таблиці, оскільки це робить ваші формули виглядати набагато приємніше. Використовуючи vlookup, використовуйте таку формулу:

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

Де Sheet4!A:Bпредставлено будь-яку таблицю даних таблиці вихідних даних для кожного відповідного значення. IFERROR запобігає негарним результатам # N / A, які з’являються, коли vlookup не є успішним, і в цьому випадку повертає порожню клітинку.

Це дає вам отриману таблицю.


Лист3:

введіть тут опис зображення

Sheet4:

введіть тут опис зображення

Дані про результати:

введіть тут опис зображення

Формули результатів ( Ctrl+ ~перемикає це):

введіть тут опис зображення


Вбудований запит SQL

Ви також можете це зробити за допомогою вбудованого SQL-запиту. Це ... набагато менш зручний для користувачів, але, можливо, буде кращий варіант використання. Це, ймовірно, вимагає, щоб ви відформатували свої "вихідні" дані у вигляді таблиць.

  1. Клацніть на клітинку на новому аркуші
  2. Перейдіть до Дані -> З інших джерел -> Від Microsoft Query
  3. Виберіть файли Excel * на вкладці Бази даних та натисніть кнопку ОК
  4. Виберіть свою робочу книжку
  5. Виберіть наступні чотири поля:
    • введіть тут опис зображення
  6. Клацніть «наступний» та «добре» у приємному попередженні форматування 1990-х, яке ви бачите
  7. Дотримуючись цих вказівок, створіть перше ліве зовнішнє з'єднання. У моєму випадку я використовую таблицю "країни" як ліве джерело, а "імена" - як праве.
    • введіть тут опис зображення
    • Це дає лише деякі рядки (оскільки ви приєдналися до ідентифікатора)
  8. Частина "створити об'єднання віднімання, а потім додати його як об'єднання" є складнішою.

    • Ось конфігурації об’єднання віднімання: введіть тут опис зображення
    • Скопіюйте SQL цього об'єднання за допомогою кнопки SQL:
    • ВИБРАТИ countries$.id, countries$.Val1, names$.id, names$. Val2 ВІД {oj C:\Users\Username\Desktop\Book2.xlsx. countries$ countries$ЛІВНІЙ ЗОВНІШНІЙ ПРИЄДНАЙТЕСЬ C:\Users\Username\Desktop\Book2.xlsx. names$ names$ON countries$.ID = names$.ID} WHERE ( names$.ID недійсний)

  9. Поверніться до першого створеного вами зовнішнього з'єднання. Вручну відредагуйте SQL та

    • додати Unionдо дна
    • Додайте вищенаведений відніміть текст приєднання до нижньої частини з'єднання
  10. Натисніть кнопку "Дані повернення" відразу ліворуч від кнопки SQL
    • Ви можете відредагувати SQL, щоб вибрати лише ті дані, які ви бажаєте в цей момент. Мені легше приховати стовпці в результаті.
  11. Помістіть Запит десь і підтвердьте його місцезнаходження
    • введіть тут опис зображення

Не для слабкого серця. Але якщо ви хочете отримати великий шанс побачити деякі неоновлені, як довго, як вам, можливо, вже були, живі частини Office, це великий шанс.


1
Чи є у вас посилання на нотацію [@ID]? Я не сумніваюся, що це працює, але я його раніше ніколи не бачив, і я багато працюю в Excel.
TJL

1
@TJL, якщо ви відформатуєте таблицю у вигляді таблиці, вона використовуватиме такий тип позначень для посилання на інші стовпці. Набагато чіткіше, ніж посилання на клітини. Це може бути функція 2010+? Я не впевнений. Я не використав магію форматування як таблицю достатньою до 2010 року ..
enderland


Ви не можете просто змінити слово Вліво на слово ПОВНО в оригінальному запиті? Я впевнений, що для запуску запиту, який підтримує синтаксис FULL JOIN, просто використовується драйвер ACE OLEDB.
Кайл Хейл

14

Як альтернативне рішення, чи можна запропонувати Power Query ? Це безкоштовний додаток Excel від Майкрософт, який в основному виконує саме такі речі. Його функціональність буде фактично також включена в Excel 2016, тому вона захищена в майбутньому.

У будь-якому випадку, за допомогою Power Query кроки досить прості:

  1. Імпортуйте обидві таблиці як запити в редактор запитів живлення.
  2. Виконайте перетворення запитів на об'єднання, встановивши відповідний стовпець приєднання та встановивши тип з'єднання як повний зовнішній.
  3. Завантажте таблицю результатів на новий аркуш.

Приємно в цьому, коли ви це налаштували, якщо ви вносите зміни до базових таблиць даних, ви просто натискаєте Дані> Оновити все, і ваш лист результатів запиту про оновлення також оновлюється.


Дійсно цікаво. Мій друг, який є власником ресторану, розпитував мене про MS Office і показав мені свій набір 2016 року, який не включає MS Access. Я зараз бачу, чому це так. У Excel було багато обмежень. Я ніколи не купував вище 2003 року, тому що жодна з особливостей не була цінною, і мені не сподобався новий вигляд; 2010 і вище. Доступ робить все це та інше, тому виникає питання, чому так багато людей намагаються виконати роботу Бази даних в Excel, коли Access - це спосіб досягти цього? Єдине, що я можу побачити, це те, що, можливо, для того, щоб отримати хороший доступ до БД доступу, він також потребує хорошого досвіду роботи з VB.
ejbytes

@ejbytes більшість людей розуміють поняття електронних таблиць. Більшість ... не розуміють поняття бази даних. У мене був проект, який перетворював проект бази даних електронних таблиць у базу даних, і користувачі все ще називали його "електронною таблицею" - навіть після широких пояснень того, як працює база даних!
Ендерленд

@enderland Я думаю, ти маєш рацію. Електронна таблиця з не суворими правилами та непостійною гнучкістю ... та запитами, замаскованими під фільтри. Платформа для змінних таблиць і списків.
ejbytes

Версія @ejbytes tldr - MS хотіла перевірити двигун пам'яті стовпців у Excel, щоб увімкнути більше рядків, він включав зовнішні з'єднання даних, він виявився надзвичайно популярним, тому вони додали в інструмент ETL. Тепер вони згорнули всі інструменти як PowerBI.
Кайл Хейл

@KyleHale Я використовую Office 2010 і намагаюся зробити ПОВНОГО ВІДПОЛУЧЕННЯ, але Power Query ігнорує ідентифікатори з другої таблиці, які не в першій таблиці.
GeMir

0

Швидкий спосіб напівсимулювати (зовнішнє з'єднання) - це взяти другий список і вставити його безпосередньо під ваш список кулаків, тобто так, щоб ваші (первинні ключі) знаходилися в одному (первинному) стовпчику. Потім сортуйте цей первинний стовпець, ви отримаєте переплетений список, а потім зробите перенесене рівняння IF (суперрусери псують подання макета таблиці ..):

listA listB


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

скопіювати / вставити / сортувати, результат виглядає так: AB chris green fred blue gustav 047 mary 5710 mary чорний sam blue blue 32874 tim red

тоді формула для комірки c1: (c1) = if (A1 = A2, B2)

результат виглядає приблизно так:

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

Сортуйте C, щоб позбутися помилок тощо. Це основна версія ідеї, просто розгорніть її, якщо введено більше даних. -wag770310


Чи можете ви відформатувати це будь-яким способом, щоб зробити його читабельним?
davidbaumann
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.