2

Это кажется простой концепцией, но я не могу найти способ сделать это без написания некоторого кода. Есть ли в Excel функция, позволяющая мне объединять столбцы из двух разных файлов CSV (скажем, Orders и OrderDetails) на основе столбца с общим идентификатором и создавать составной CSV со столбцами из обоих?

3 ответа3

2

Да, есть. Это немного глупо, но гораздо лучше, чем писать код.

Пример:

  • 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
  • удалить строки значений

У вас есть внутреннее соединение

Я оставляю читателю в качестве упражнения обработку таблиц с несколькими столбцами.

Хорошо, я дам вам самый простой и самый неэффективный метод, который мне приходит в голову: выполнить внутреннее объединение в обоих направлениях, отсортировать каждый набор в поле соединения и поместить результаты рядом друг с другом. Они должны выстроиться в очередь. (Примечание: это будет работать, только если столбец соединения содержит уникальные значения)

2

Это возможно в MSQuery, хотя вам придется настроить источник данных в ODBC

Это не функция, но вы должны найти ее относительно простой в реализации. Помощь также предоставляет документацию по выполнению различных объединений

Результирующий SQL msquery создает:

1

Я бы не стал использовать 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .