Это кажется простой концепцией, но я не могу найти способ сделать это без написания некоторого кода. Есть ли в 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.
