Страницы: 1
RSS
Объединение данных с идентичной структурой из разных книг
 
Доброе утро!
Есть 68 одинаковых по структуре файлов: свод + около 15 листов с таблицами (во всех файлах структура идентична до последней строчки, все 16 листов - это одна книга).
Нужно получить один свод с суммой по каждой ячейке всех файлов.
Как бы вы это сделали?

Теоретически можно создать пустой файл и прописать сумму из всех 68 листов, но есть подозрение, что компьютер взорвется при открытии всех файлов одновременно.
 
Я бы это сделал через Инструмент Консолидация: вкладка Данные -Консолидация
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ну или можно макросом собрать данные со всех листов в один, а потом через Сводные таблицы. Макросом, конечно, можно и сразу все собрать в нужном виде, но под рукой такого нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вот этим способом сборки пользуюсь чаще всего, рекомендую
http://www.planetaexcel.ru/techniques/3/49/
а дальше - как удобнее: сводные, формулы...
Изменено: hannushka - 18.10.2016 10:15:31
 
Консолидация выдает все совсем некрасиво, но сводит, это плюс. По итогу все данные должны быть в идентичной форме, просто просуммированные, поэтому я, конечно, уповаю на чудо-макрос, с точки зрения именно алгоритма все выглядит несложно, надо уже начать изучать их(
За макрос сбора спасибо, собрать и просуммировать конечно тоже вариант...
 
Вот еще вариант: Как собрать данные с нескольких листов или книг?
по крайней мере поможет собрать данные в один лист.
А вот порядок...Можете один раз организовать порядок на одном листе,а потом через СУММЕСЛИ
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,уже успела наткнуться на этот макрос, он, к сожалению, не сильно упрощает задачу.
Теоретически, алгоритм понятен:
1. Собрать каждую книгу в 1 лист.
2. Собрать все листы в одну книгу.
3. Просуммировать.

На практике же получается, что макросы копируют определенный диапазон и, даже если я в дальнейшем удалю все пустые строчки (потому что диапазон каждого листа разный), получается ручная обработка все тех же 68 файлов, что существенно замедляет процесс.
Думаю, может где надстройка есть, суммирующая книги, в конце концов это не так уж и ужасно сложно, но что-то не наткнулась пока.  
 
А эти  68 файлов лежат в папке? И Ексель 2010 стоит? Тогда можно использовать PowerQuery.  Посмотрите видео по ссылке https://www.youtube.com/watch?v=PUrX8DO5--I. Консолидировать данные с разных источников.
 
Цитата
Kayana написал:
На практике же получается, что макросы копируют определенный диапазон и, даже если я в дальнейшем удалю все пустые строчки (потому что диапазон каждого листа разный), получается ручная обработка все тех же 68 файлов
это как так у Вас получилось? Если в коде по моей ссылке указать только первую ячейку, с которой собирать данные - то данные будут собраны от этой ячейки и до последней заполненной на каждом листе. А пустые строки можно будет убрать уже в результирующем массиве данных из всех книг. Немного проще же, чем все 68 руками лопатить, нет?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Sertg, установила. Файлы да, в папках, лежат такие аккуратненькие и ждут. Под консолидацией вы имеете в виду функцию в PowerQuery слияние?
 
The_Prist, а это ручки у меня кривые, я не ячейку выделяла, а диапазон. Так все замечательно, даже строки удалять не надо, теоретически.
Большое спасибо за помощь, я уже отбросила этот макрос, а зря, собирает он неплохо. 68 раз собрать, потом посчитать, звучит все равно не так ужасно)
 
Мне бы еще макрос, чтобы он открывал файл, запускал другой макрос и копировал получившийся лист в другую книгу  :D
А вообще, посоветуйте хороший самоучитель по VBA и тему можно будет закрыть)
 
Такой вариант.
Работает со всеми файлами в папке, в которой лежит файл с макросами.
Суммирует ячейки, выделенные жёлтым цветом. Раскрашивать можно самостоятельно.

Код
Sub СобратьФайлы()
    ThisWorkbook.Save
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With

    Dim sh As Worksheet
    Dim cl As Range
    Dim cs As Range
    Dim sFileName As String
    
    
    For Each sh In ThisWorkbook.Worksheets
        For Each cl In sh.UsedRange.Cells
            With cl
                If .Interior.Color = 13434879 Then
                    .ClearContents
                End If
            End With
        Next
    Next
    
    sFileName = Dir(ThisWorkbook.Path & "\*.xl*")
    
    Do While sFileName <> ""
        If sFileName <> ThisWorkbook.Name Then
            Workbooks.Open ThisWorkbook.Path & "\" & sFileName
            Application.Calculate
            
            For Each sh In ThisWorkbook.Worksheets
                For Each cl In sh.UsedRange.Cells
                    With cl
                        If .Interior.Color = 13434879 Then
                            
                            Set cs = Workbooks(sFileName).Sheets(.Parent.Name).Range(.Address)
                            
                            Select Case .Parent.Name
                            Case "Титул"
                                .Value = cs.Value
                            Case Else
                                If IsNumeric(cs.Value) Then .Value = .Value + cs.Value
                            End Select
                        End If
                    End With
                Next
            Next
            
            Workbooks(sFileName).Close False
        End If
        
        sFileName = Dir
    Loop

    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With


End Sub


Пока писал, оказалось, что тему уже можно закрыть.
Изменено: МатросНаЗебре - 18.10.2016 14:05:36
 
МатросНаЗебре, вариант то отличный, если он сразу суммирует все файлы. Один момент - в получившемся своде дублируются абсолютно все названия) Причем хорошо, если два раза, а если все 68?
 
Цитата
Kayana написал: дублируются абсолютно все названия
Эти названия нужно тянуть из файлов (тех, которых 68 штук) или можно один раз внести и больше не тянуть?
Если да, то уберите в этих ячейках заливку жёлтым цветом.
 
The_Prist, заметила, что скрипт подтягивает не все данные с листа, то есть банально пропускает цифры - переносит пустую форму. С чем может быть связано?
МатросНаЗебре, один раз внести. Пока думаю, каким образом закрасить все необходимое и не закрасить ничего лишнего, данных очень много в каждой книге.
 
Цитата
Kayana написал: 68 раз собрать
ну опять не понимаю. Вы можете положить все файлы в одну папку и сразу все указать. Один раз, но все. И код соберет данные со всех файлов сразу...
Цитата
Kayana написал: банально пропускает цифры
он не может сам от себя что-то пропускать. Можете конкретно показать что именно не подтягивается, из какого файла и какие настройки при этом применяете. Спасибо.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
ну опять не понимаю. Вы можете положить все файлы в одну папку и сразу все указать. Один раз, но все. И код соберет данные со всех файлов сразу...
Они и есть в папке. Если я собираю все книги сразу, макрос выдает мне результат на одном листе, то есть все 68 файлов, все таблицы на 1 листе. Что я делаю не так?

Про данные уже методом проб и ошибок выяснила, что макрос подтягивает ерунду, если он находится не в файле, в котором работаю, фиг бы с ним. Так он идеально собирает все данные на лист, но опять же, может быть я что-то не понимаю, есть возможность собрать каждый файл на лист отдельно, а я не в курсе?
 
Цитата
Kayana написал: то есть все 68 файлов, все таблицы на 1 листе
а как надо было? Изначально нигде вроде не писалось, что каждый файл должен собираться на отдельный лист...
Но есть вариант: при сборе данных в первый столбец вставляется имя файла. Так Вы поймете какие данные из какого файла. Дальше уже можно это оформить сводной или формулами с привязкой к имени файла и остальным данным. Не получится так? Или уже после сбора разбить данные на разные листы(тем же фильтром). Но это уже муторнее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, суммировать то всяко проще с листов отдельных, формулу протянул и все...
 
Ну не знаю...Вам виднее. Мне обрабатывать данные с одного листа проще. Есть подозрение, что СУММПРОИЗВ справится вполне. Можете кусочек собранных данных прислать и показать, что в итоге надо?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, вот такой вот реальный пример, разве что великоват по весу.
https://drive.google.com/open?id=0BztNahNtRCYiUDZ3c3RSWjdvQ3M
Тут три книги. В точности таких же (другие территории) еще 65.
Нужен, соответственно, идентичный им по структуре сводный просуммированный вариант.
 
Так они у Вас не совсем идентичные по структуре. Кол-во столбцов-то различается. Да и шапки в разных таблицах по разному сделаны. Из такой каши сложно что-то вменяемое единое собрать сходу.
По сути, Вам вероятнее всего надо собирать из каждого файла по имени листа данные. Чтобы в результате получилось столько же листов, сколько в каждой книге и в каждом листе данные такого же листа из всех книг.
Изменено: The_Prist - 18.10.2016 17:17:49
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,идентичные книги, не листы, как я и изначально писала. По факту это один образец, размноженный по количеству территорий.
Цитата
The_Prist написал:
По сути, Вам вероятнее всего надо собирать из каждого файла по имени листа данные. Чтобы в результате получилось столько же листов, сколько в каждой книге и в каждом листе данные такого же листа из всех книг.
Если честно, я зависла.
Сейчас я думаю в принципе собрать каждую книгу в один лист (мне не важно, что таблицы просто будут идти подряд), к примеру вашим макросом. После этого собрать все листы в одну книгу (чтобы каждая территория была одним листом), а потом просто сделать идентичный образец и протянуть формулу суммы.
 
Цитата
Kayana написал:
Sertg , установила. Файлы да, в папках, лежат такие аккуратненькие и ждут. Под консолидацией вы имеете в виду функцию в PowerQuery слияние?
А видео по ссылке смотрели?  
Заходим на вкладку  PQ. Далее создать запрос из папки.
Далее вводим путь к папке или выходим в обзор через проводник  и доходим до Вашей папки.
Потом появляется окно с со списком все обнаруженных в данной папке файлов выбираем какие надо и жмем кнопку изменить.  Как работать в PQ можно посмотреть тут.  Как обрабатывать в Power Query таблицу с многоуровневой шапкой можно посмотреть  тут. Удачи в трудах.
Изменено: Sertg - 19.10.2016 07:52:11
 
Sertg, каюсь, не смотрела, на работе не было возможности, изучу из дома подробнее.
Большое спасибо за помощь!
Страницы: 1
Читают тему
Наверх