Если вы хотите сделать немного веселый, взломанный подход к Excel, вы можете сделать бит «copy-paste» для своих пользователей за кулисами. Учитывая две аналогичные таблицы OLD
и NEW
со структурами
+-----+------+-------+------------+
| id | foo | bar | date |
+-----+------+-------+------------+
| 95 | blah | $25 | 2015-06-01 |
| 96 | bork | $12 | 2015-07-01 |
| 97 | bump | $200 | 2015-08-01 |
| 98 | fizz | | 2015-09-01 |
| 99 | buzz | $50 | 2015-10-01 |
| 100 | char | ($1) | 2015-11-01 |
| 101 | mope | | 2015-12-01 |
+-----+------+-------+------------+
и
+----+-----+-------+------------+------+---------+
| id | foo | bar | date | fizz | buzz |
+----+-----+-------+------------+------+---------+
| 1 | cat | ($10) | 2016-01-01 | 285B | 1110111 |
| 2 | dog | $25 | 2016-02-01 | 27F5 | 1110100 |
| 3 | ant | $100 | 2016-03-01 | 1F91 | 1001111 |
+----+-----+-------+------------+------+---------+
... вы можете объединение вместе данные для этих двух наборов данных с некоторыми благоразумно первенствует колдовство, как показано ниже:
Ваш UNION
стол (названный с использованием alt + j + t + ) должны иметь следующие пункты:
- Новый природный ID
- DataSet указатель (название старой или новой таблицы)
- производный ID из исходного массива данных
- Столбцы данных, которые вы хотите от Старого & новых DataSets
пример:
+---------+------------+------------+----+------+-----+------------+------+------+
| UnionId | SourceName | SourceRank | id | foo | bar | date | fizz | buzz |
+---------+------------+------------+----+------+-----+------------+------+------+
| 1 | OLD | | | | | | | |
| 2 | NEW | | | | | | | |
+---------+------------+------------+----+------+-----+------------+------+------+
Затем вы получите разумное использование Indirect() и VlookUp() для получения идентификаторов поиска и целей столбца. Пример кода ниже
SourceRank - помощник колонка
=COUNTIFS([SourceName],[@SourceName],[UnionId],"<="&[@UnionId])
ID - идентификатор из оригинального DataSet
=SMALL(INDIRECT([@SourceName]&"[id]"),[@SourceRank])
Все остальное просто ВПР безумие !!Несмотря на то, что я взял на себя смелость копировать образец кода ниже для справки
Foo=VLOOKUP([@id],INDIRECT([@SourceName]),MATCH(UNION[[#Headers],[foo]],INDIRECT([@SourceName]&"[#Headers]"),0),0)
бар=VLOOKUP([@id],INDIRECT([@SourceName]),MATCH(UNION[[#Headers],[bar]],INDIRECT([@SourceName]&"[#Headers]"),0),0)
Дата=VLOOKUP([@id],INDIRECT([@SourceName]),MATCH(UNION[[#Headers],[date]],INDIRECT([@SourceName]&"[#Headers]"),0),0)
Fizz=VLOOKUP([@id],INDIRECT([@SourceName]),MATCH(UNION[[#Headers],[fizz]],INDIRECT([@SourceName]&"[#Headers]"),0),0)
гудение=VLOOKUP([@id],INDIRECT([@SourceName]),MATCH(UNION[[#Headers],[fizz]],INDIRECT([@SourceName]&"[#Headers]"),0),0)
Выход
Вы, вероятно, хотите сделать разумное использование If()
и/или IfError()
, чтобы помочь пользователям игнорировать новые ссылки столбцов на старую таблицу и те строки, которые не делают но есть данные. Без этого, однако, вы получите что-то вроде ниже.
Это и готово принять & читать новые материалы для обоего OLD
и NEW
DataSets и сортировка, чтобы избавиться от этих надоедливых строк заполнителей ...
Надеется, что это помогает! Счастливое кодирование!
Что вы пробовали? Есть пара способов с головы до головы, которые можно решить (с разной степенью стабильности); и это поможет узнать ответы на ваш текущий подход. –
Я думаю, что Microsoft PowerQuery для такой ситуации. За кулисами он загружает MS SQL Server Express локально и управляет загрузкой и объединением данных. Я не работал с ним (я работал с PowerPivot, который делает что-то подобное), но он показывает обещание. Проверьте ссылку. https://support.office.com/en-us/article/Introduction-to-Microsoft-Power-Query-for-Excel-6E92E2F4-2079-4E1F-BAD5-89F6269CD605. Имейте в виду, что в худшем случае вашим источником может быть сам Excel, то есть, как только вы получите данные в Excel, это «источник» – Hambone
Microsoft PowerQuery сделает это. –