Это кажется простой концепцией, но я не могу найти способ сделать это без написания некоторого кода. Есть ли в Excel функция, позволяющая мне объединять столбцы из двух разных файлов CSV (скажем, Orders и OrderDetails) на основе столбца с общим идентификатором и создавать составной CSV со столбцами из обоих?
3 ответа
Да, есть. Это немного глупо, но гораздо лучше, чем писать код.
Пример:
- Set1 = Алиса, Боб, Чарли, Эхо, Фокстрот, Лима
- Set2 = Боб, Чарли, Фокстрот, Лима, Майк, Ноябрь, Зебра
Поместите два набора в отдельные столбцы, с промежуточным столбцом.
A B C
1 Set1 JoinColumn Set2
2 Alice Bob
3 Bob Charlie
4 Charlie Foxtrot
5 Echo Lima
6 Foxtrot Mike
7 Lima November
8 Zebra
В ячейку B2 введите эту формулу
==IF(COUNTIF($A$2:$A$8,C3)>0,C3,"<NULL>")
Первая часть $ A $ 2:$ A $ 8 - это диапазон ячеек из Set1. Символы $ поддерживают статический диапазон, поэтому вы можете копировать и вставлять его в новые ячейки, а диапазон остается неизменным. C3 - это ячейка справа от текущей ячейки, к которой вы присоединяетесь.
Скопируйте и вставьте это до конца, и (показывая формулы для демонстрации) вы получите это:
A B C
1 Set1 JoinColumn Set2
2 Alice =IF(COUNTIF($A$2:$A$8,C3)>0,C3,"<NULL>") Bob
3 Bob =IF(COUNTIF($A$2:$A$8,C4)>0,C4,"<NULL>") Charlie
4 Charlie =IF(COUNTIF($A$2:$A$8,C5)>0,C5,"<NULL>") Foxtrot
5 Echo =IF(COUNTIF($A$2:$A$8,C6)>0,C6,"<NULL>") Lima
6 Foxtrot =IF(COUNTIF($A$2:$A$8,C7)>0,C7,"<NULL>") Mike
7 Lima =IF(COUNTIF($A$2:$A$8,C8)>0,C8,"<NULL>") November
8 =IF(COUNTIF($A$2:$A$8,C9)>0,C9,"<NULL>") Zebra
который на самом деле будет выглядеть так:
1 Set1 JoinColumn Set2
2 Alice Bob Bob
3 Bob Charlie Charlie
4 Charlie Foxtrot Foxtrot
5 Echo Lima Lima
6 Foxtrot <NULL> Mike
7 Lima <NULL> November
8 <NULL> Zebra
Еще несколько шагов:
- Скопируйте столбец B и вставьте Special над собой, вставьте значения
- Удалить столбец A
Теперь у вас есть простое правое внешнее соединение
- Сортировать по столбцу B
- удалить строки значений
У вас есть внутреннее соединение
Я оставляю читателю в качестве упражнения обработку таблиц с несколькими столбцами.
Хорошо, я дам вам самый простой и самый неэффективный метод, который мне приходит в голову: выполнить внутреннее объединение в обоих направлениях, отсортировать каждый набор в поле соединения и поместить результаты рядом друг с другом. Они должны выстроиться в очередь. (Примечание: это будет работать, только если столбец соединения содержит уникальные значения)
Это возможно в MSQuery, хотя вам придется настроить источник данных в ODBC
Это не функция, но вы должны найти ее относительно простой в реализации. Помощь также предоставляет документацию по выполнению различных объединений
Результирующий SQL msquery создает:
Я бы не стал использовать Excel для выполнения этой задачи. Вместо этого я бы использовал программу командной строки под названием join.exe
. Это то, что предназначено для этого. Это отдельно от UnxUpdates.zip .
Синтаксис прост:
Usage: join [OPTION]... FILE1 FILE2 For each pair of input lines with identical join fields, write a line to standard output. The default join field is the first, delimited by whitespace. When FILE1 or FILE2 (not both) is -, read standard input. -a FILENUM print unpairable lines coming from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2 -e EMPTY replace missing input fields with EMPTY -i, --ignore-case ignore differences in case when comparing fields -j FIELD equivalent to `-1 FIELD -2 FIELD' -o FORMAT obey FORMAT while constructing output line -t CHAR use CHAR as input and output field separator -v FILENUM like -a FILENUM, but suppress joined output lines -1 FIELD join on this FIELD of file 1 -2 FIELD join on this FIELD of file 2 --help display this help and exit --version output version information and exit Unless -t CHAR is given, leading blanks separate fields and are ignored, else fields are separated by CHAR. Any FIELD is a field number counted from 1. FORMAT is one or more comma or blank separated specifications, each being `FILENUM.FIELD' or `0'. Default FORMAT outputs the join field, the remaining fields from FILE1, the remaining fields from FILE2, all separated by CHAR. Important: FILE1 and FILE2 must be sorted on the join fields.
Последняя строка очень важна! Внутри этого же zip-файла находится файл sort.exe
который может отсортировать файлы за вас. Или вы также можете отсортировать файлы в Excel.