Суммирование нескольких таблиц в 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, без промежуточных итогов) и Количество в качестве значений.

образец


это именно то, что я искал, спасибо
Рудигер Кидд

Рад помочь. Если вам нужно какое-то продолжение, просто дайте мне знать.
Дав

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 и подумал, что это было круто .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.