Суммирование нескольких таблиц в Excel

7

Я надеюсь, что это правильный сайт для этого вопроса

У меня есть квитанции о доставке за годы (более 60 таблиц, каждая на отдельном листе) с одинаковыми заголовками, и я хотел бы добавить их в сводную таблицу по годам.

Все, что мне нужно Art-No., это Descriptionобщее и общее Delivered Quantity, но прохождение каждого отдельного листа и составление их в индивидуальном порядке займет много времени. Не каждый заказ будет иметь одинаковые продукты или в том же порядке. Некоторые продукты могут появляться только один раз в год, в то время как другие на каждом заказе. Это немного беспорядок.

По Art-No.сути, это идентификатор продукта и может использоваться для идентификации продукта (а также Description).

Пример таблицы 1 заголовки таблиц и пример текста

Пример таблицы 2 введите описание изображения здесь

Пример таблицы 3 введите описание изображения здесь

Пример таблицы желаемых результатоввведите описание изображения здесь

Я пытался использовать Power Query для слияния, но это не консолидирует данные, а, кажется, помогает.

Я пробовал сводные таблицы, но они не хотят, чтобы они звучали как «Ссылка на источник данных недействительна»

Есть ли более простой способ сделать это?

Рудигер Кидд
источник
Вас интересует только суммирование Арт-№, Описание и Общее количество доставленных товаров, или вам также необходимо сохранить информацию, касающуюся заказа (например, клиента)?
Джонатан
Только эти 3, пожалуйста, другая информация относится только к этой индивидуальной квитанции
Rudiger Kidd
И поскольку вы пометили свой вопрос как «microsoft-excel-2010», я предполагаю, что это версия, с которой вы работаете.
Джонатан
да, это правильно
Рудигер Кидд
Я думал, что у меня будет время подготовить это для вас и дать полный ответ, но, похоже, сейчас нет. Если никто больше не вмешивается, я бы начал с изучения PowerPivot, который является надстройкой Microsoft для 2010 года. (Он включен в 2013 год.) Вы можете скачать его здесь: msdn.microsoft.com/en-us/library /…
Джонатан

Ответы:

2

Я думаю, что вы были на правильном пути с Power Query. Как правило, шаги:

  1. Загрузите каждую таблицу в Power Query (это неприятно, но я не знаю ни одного варианта массовой загрузки). Вы можете установить опцию по умолчанию только для загрузки соединения, чтобы у вас не было дубликатов листов с версией Power Query для каждой таблицы.

  2. Откройте свою первую таблицу в Power Query Editor. Выберите Добавить запросы (не объединять) в разделе Объединить ленты.

  3. В диалоговом окне «Добавить» выберите вторую таблицу и нажмите «ОК». Повторите эти действия для каждой таблицы, которую вы загрузили в Power Query. Теперь вы добавляете строки из каждой из 60 таблиц в одну «супер таблицу».

  4. Когда все ваши загруженные таблицы будут добавлены, загрузите ваш запрос на добавление в Excel.

  5. Используйте таблицу запросов добавления в качестве источника данных для создания сводной таблицы. Выберите Арт-№. и Description в качестве меток строк (в формате Tablular Layout, без промежуточных итогов) и Количество в качестве значений.

образец

DAV
источник
это именно то, что я искал, спасибо
Рудигер Кидд
Рад помочь. Если вам нужно какое-то продолжение, просто дайте мне знать.
Дав
3

Если бы все данные были на одном листе, было бы довольно легко применить к нему сводную таблицу для генерации сводки. Копирование и вставка 60+ листов в один заняло бы несколько минут вручную, но это можно сделать.

Кроме того, вы можете использовать макрос для копирования и вставки. Предполагая, что каждый лист начинается в A1 и все листы содержат таблицы данных, этот макрос должен работать:

Sub Macro1()

NumSheets = Application.Sheets.Count
Sheets.Add After:=Sheets(Sheets.Count)

i = 1
Do While i <= NumSheets
    Sheets(i).Select
    If (i = 1) Then
      Range("A1").Select
    Else
      Range("A2").Select
    End If
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets(NumSheets + 1).Select
    If (i = 1) Then
       Range("A1").Select
    Else
       Range("A2").Select
       Selection.End(xlDown).Select
       ActiveCell.Offset(1, 0).Range("A1").Select
    End If
    ActiveSheet.Paste
    i = i + 1
    Loop


End Sub
Сэр Аделаида
источник
1

Вот подход, который не использует Power Query.

Для любой таблицы вы можете суммировать доставленное количество определенного продукта (Арт. №), используя SUMIF . Например, следующая формула даст общее количество доставленного Арт-№. 59792 в таблице под названием Table1.

`=SUMIF(Table1[Art-No.],"=59792",Table1[Delivered Quantity])`

Вы можете использовать функцию INDIRECT, чтобы извлечь имя таблицы из другой ячейки. Например, если ячейка A2 содержит «Table1», то следующая формула даст тот же результат, что и приведенная выше.

`=SUMIF(INDIRECT(A2"[Art-No.]"),"=59792",INDIRECT(A2&"[Delivered Quantity]"))`

Таким образом, чтобы создать новую таблицу с общим количеством статей каждого типа в каждой таблице, вы можете выполнить следующее:

  1. Поместите все номера артикулов в первый ряд, начиная с B1.
  2. Поместите все имена таблиц в первый столбец, начиная с A2.
  3. Скопируйте следующее в B2

= SUMIF (НЕПОСРЕДСТВЕННЫЙ ($ A2 & "[Art-No.]"), B $ 1, НЕПОСРЕДСТВЕННЫЙ ($ A2 & "[Доставленное количество]"))

  1. Скопируйте B2 и вставьте в остальную часть таблицы.
Джонатан
источник
0

Вот вариант, который не использует Power Query или Pivot Tables:

Как указано в комментариях, вы можете создать таблицу результатов вы хотите со всем , за исключением Ordered qty.и Delivered qty.пол. Это означает, что все, что нам нужно сделать, это суммировать значения для каждого листа, используя Art-no.в качестве уникального идентификатора.

Шаг 1: Создайте список со всеми именами листа. Это можно сделать с помощью небольшого VBA, поскольку в вашем файле так много листов.

Sub SheetNames()
    Dim ws As Worksheet
    Dim r As Integer
    Set ws = Worksheets.Add
    For r = 1 To Worksheets.Count
        ws.Cells(r, 1).Value = Worksheets(r).Name
    Next
End Sub

Шаг 2: Создайте именованный диапазон, который ссылается на список имен рабочих листов. Я превратил список в таблицу и основал диапазон имен на этом, но это не обязательно.

Именованный диапазон

Шаг 3: Создание вашей таблицы базовых результатов без Ordered qty.и Delivered qty.значений , заполненных Если вы не имеете , что имеется где - то, что может быть проще всего использовать что - то вроде того, что. Сэр Аделаида отправил объединить все листы, удалить поля , которые не нужно стереть все кол-во. значения и удалить дубликаты. Вы можете задаться вопросом, зачем вам это нужно, если вы просто будете следовать этому методу, но уловка на следующем шаге слишком крута, чтобы не поделиться ею.

Таблица

Шаг 4: Напишите свои формулы для суммирования данных со всех листов одновременно. Во-первых, вот формула, которую вы можете использовать для Ordered qty.:

=SUMPRODUCT(SUMIF(INDIRECT("'"&sheets&"'!"&"B2:B10000"),[@[Art-no.]],INDIRECT("'"&sheets&"'!"&"D2:D10000")))

Это специальная SUMIFупаковка SUMPRODUCT. Ключом к SUMIFработе с трехмерной ссылкой является INDIRECTфункция и список имен листов, которые мы создали. Вот части формулы:

  • INDIRECT("'"&sheets&"'!"&"B2:B10000")Это стандартная INDIRECTфункция, за исключением того, что мы ссылаемся на именованный диапазон, который мы создали в шаге 2, который указывает на список имен листов. Это то, что делает его трехмерным эталоном. Я выбрал, B2:B10000но вы можете настроить / расширить это по мере необходимости. Легко сделать эталонный путь больше, чем требуется, чтобы убедиться, что ничего не пропущено, если диапазоны в обеих INDIRECTфункциях имеют одинаковый размер. Он должен указывать на столбец с Art-no.другими листами.
  • [@[Art-no.]]Поскольку я превратил свою таблицу результатов в фактическую таблицу в Excel, это просто указывает на Art-no.значение в текущей строке с формулой.
  • INDIRECT("'"&sheets&"'!"&"D2:D10000")Это то же самое, что и другие, INDIRECTно оно указывает на Ordered qty.столбец.
  • SUMIF(~) Это сейчас становится SUMIF(Art-no. from every sheet, Art-no. in this row, Ordered qty. from every sheet)
  • SUMPRODUCT(~)SUMIFВозвращает массив вместо одного значения , поэтому мы используем это , чтобы просто сложить все значения в этом массиве.

Формула Delivered qty.такая же , за исключением того, вы должны изменить , D2:D10000чтобы G2:G10000или все , что требуется , чтобы указать на колонку с Delivered qty.в других листах.


Кредит, где кредит должен, я нашел этот метод на CreditJet.net и подумал, что это было круто .

Инженер Тост
источник