Давайте предположим, что у меня есть некоторые данные в Excel (а не в реальной базе данных). На одном листе у меня есть данные, где один столбец работает как идентификатор, и я убедился, что значения в этом столбце уникальны. На другом листе у меня также есть некоторые данные, опять же с одним столбцом, который может быть взят в качестве идентификатора, и он также уникален. Если строка N на листе 1 имеет какое-то значение, а строка M на листе 2 имеет то же значение, я уверен, что строка N и строка M описывают один и тот же объект реального мира.
Что я спрашиваю: как я могу получить эквивалент полного внешнего соединения без написания макросов? Формулы и все функции, доступные через ленту, в порядке.
Небольшой пример "play data":
Лист 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 для этого. Тем не менее, существует достаточно ситуаций, когда необходимо прагматичное решение, невозможно применить стат и лучшее (с точки зрения ИТ) решение.
источник
Ответы:
Простой подход - стандартные операции Excel
Сначала скопируйте / вставьте оба ключевых столбца из обеих таблиц в один новый лист в виде одного столбца.
Используйте «Удалить дубликаты», чтобы получить единый список всех ваших уникальных ключей.
Затем добавьте два столбца (в данном случае), по одному для каждого столбца данных в каждой таблице. Я также рекомендую использовать формат в качестве табличного параметра, поскольку он делает ваши формулы более привлекательными. Используя vlookup, используйте следующую формулу:
Где
Sheet4!A:B
представляет собой таблицу данных исходной таблицы для каждого соответствующего значения. IFERROR предотвращает появление неприятных # N / A результатов, которые появляются, когда vlookup не удается, и в этом случае возвращает пустую ячейку.Это дает вам вашу итоговую таблицу.
Sheet3:
Лист4:
Данные результата:
Формулы результата ( Ctrl+ ~переключит это):
Встроенный SQL-запрос
Вы также можете сделать это с помощью встроенного SQL-запроса. Это ... гораздо менее удобно для пользователя, но, возможно, будет лучшим вариантом использования. Это, вероятно, потребует от вас отформатировать ваши «исходные» данные в виде таблиц.
Часть «создать вычитаемое соединение, а затем добавить его как объединение» более сложна ..
Вернитесь к первому внешнему соединению, которое вы создали. Вручную отредактируйте SQL и
Union
в конецНе для слабонервных. Но если вы хотите получить отличную возможность увидеть некоторые не обновленные до тех пор, пока вы можете быть живыми части Office, это отличный шанс.
источник
В качестве альтернативного решения, могу ли я предложить Power Query ? Это бесплатная надстройка Excel от Microsoft, предназначенная для выполнения именно такого рода задач. Его функциональные возможности будут непосредственно включены в Excel 2016, так что он защищен от будущего.
В любом случае, с Power Query шаги довольно просты:
Хорошая вещь об этом - после того, как вы настроите это, если вы вносите изменения в свои базовые таблицы данных, вы просто нажимаете Данные> Обновить все, и ваш лист результатов Power Query также обновляется.
источник
Быстрый способ полу-симуляции (внешнего соединения) состоит в том, чтобы взять второй список и вставить его непосредственно под первым списком, т. Е. Чтобы ваши (первичные ключи) были в одном (первичном) столбце. Затем отсортируйте этот основной столбец, в результате вы получите список с чередованием, а затем выполните транспонированное уравнение ПЧ (суперпользователь испортил представление макета таблицы ...):
listA listB
сэм синий тим 32874 тим красный мэри 5710 крис грин густав 047 фред блю мэри
чёрный
копия / вставка / сортировка, результат выглядит так: AB Крис Грин Фред Блю Густав 047 Мэри 5710 Мэри черный Сэм Блю Тим 32874 Тим красный
тогда формула для ячейки c1: (c1) = if (A1 = A2, B2)
Результат выглядит так:
ABC Крис Грин ЛОЖЬ фред синий ЛОЖЬ густав 047 ЛОЖЬ Мэри 5710 черный Мэри черный ЛОЖЬ сэм синий ЛОЖЬ тим 32874 красный тим красный ЛОЖЬ
Сортировка C, чтобы избавиться от ложных и т.д. Это базовая версия идеи, просто расширьте ее, если вам нужно больше данных. -wag770310
источник