Постановка задачи
Давайте разберем красивое решение для одной из весьма стандартных ситуаций, с которой рано или поздно сталкивается большинство пользователей Excel: нужно быстро и автоматически собрать данные из большого количества файлов в одну итоговую таблицу.
Предположим, что у нас есть вот такая папка, в которой содержится несколько файлов с данными из филиалов-городов:
Количество файлов роли не играет и может меняться в будущем. В каждом файле есть лист с именем Продажи, где расположена таблица с данными:
Количество строк (заказов) в таблицах, само-собой, разное, но набор столбцов везде стандартный.
Задача: собрать данные из всех файлов в одну книгу с последующим автоматическим обновлением при добавлении-удалении файлов-городов или строк в таблицах. По итоговой консолидированной таблице затем можно будет строить любые отчеты, сводные таблицы, фильтровать-сортировать данные и т.д. Главное — суметь собрать.
Подбираем оружие
Для решения нам потребуется последняя версия Excel 2016 (в нее нужный функционал уже встроен по умолчанию) или предыдущие версии Excel 2010-2013 с установленной бесплатной надстройкой Power Query от Microsoft (скачать ее можно здесь). Power Query — это супергибкий и супермощный инструмент для загрузки в Excel данных из внешнего мира с последующей их зачисткой и обработкой. Power Query поддерживает практически все существующие источники данных — от текстовых файлов до SQL и даже Facebook
Если у вас нет Excel 2013 или 2016, то дальше можно не читать (шучу). В более древних версиях Excel подобную задачу можно реализовать только программированием макроса на Visual Basic (что весьма непросто для начинающих) или монотонным ручным копированием (что долго и порождает ошибки).
Шаг 1. Импортируем один файл как образец
Для начала давайте импортируем данные из одной книги в качестве примера, чтобы Excel «подхватил идею». Для этого создайте новую пустую книгу и…
- если у вас Excel 2016, то откройте вкладку Данные и выберите Создать запрос — Из файла — Из книги (Data — New Query- From file — From Excel)
- если у вас Excel 2010-2013 с установленной надстройкой Power Query, то откройте вкладку Power Query и выберите на ней Из файла — Из книги (From file — From Excel)
Затем в открывшемся окне переходим в нашу папку с отчетами и выбираем любой из файлов-городов (не играет роли какой именно, т.к. они все типовые). Через пару секунд должно появиться окно Навигатор, где нужно в левой части выбрать требуемый нам лист (Продажи), а в правой отобразится его содержимое:
Если нажать в правом нижнем углу этого окна кнопку Загрузить (Load), то таблица будет сразу импортирована на лист в исходном виде. Для одиночного файла — это хорошо, но нам нужно загрузить много таких файлов, поэтому мы пойдем немного другим путем и жмем кнопку Правка (Edit). После этого должен в отдельном окне отобразиться редактор запросов Power Query с нашими данными из книги:
Это очень мощный инструмент, позволяющий «допилить» таблицу под нужный нам вид. Даже поверхностное описание всех его функций заняло бы под сотню страниц, но, если совсем кратко, то с помощью этого окна можно:
- отфильтровывать ненужные данные, пустые строки, строки с ошибками
- сортировать данные по одному или нескольким столбцам
- избавляться от повторов
- делить слипшийся текст по столбцам (по разделителям, количеству символов и т.д.)
- приводить текст в порядок (удалять лишние пробелы, исправлять регистр и т.д.)
- всячески преобразовывать типы данных (превращать числа как текст в нормальные числа и наоборот)
- транспонировать (поворачивать) таблицы и разворачивать двумерные кросс-таблицы в плоские
- добавлять к таблице дополнительные столбцы и использовать в них формулы и функции на встроенном в Power Query языке М.
- …
Для примера, давайте добавим к нашей таблице столбец с текстовым названием месяца, чтобы потом проще было строить отчеты сводных таблиц. Для этого щелкните правой кнопкой мыши по заголовку столбца Дата и выберите команду Дублировать столбец (Duplicate Column), а затем щелкните правой кнопкой мыши по заголовку появившегося столбца-дубликата и выберите команды Преобразование — Месяц — Название месяца:
Должен образоваться новый столбец с текстовыми названиями месяца для каждой строки. Дважды щелкнув по заголовку столбца, его можно переименовать из Копия Дата в более удобное Месяц, например.
Если в каких-то столбцах программа не совсем корректно распознала тип данных, то ей можно помочь, щелкнув по значку формата в левой части каждого столбца:
Исключить строки с ошибками или пустые строки, а также ненужных менеджеров или заказчиков можно с помощью простого фильтра:
Причем все выполненные преобразования фиксируются в правой панели, где их всегда можно откатить (крестик) или изменить их параметры (шестеренка):
Легко и изящно, не правда ли?
Шаг 2. Преобразуем наш запрос в функцию
Чтобы впоследствии повторить все сделанные преобразования данных для каждой импортируемой книги, нужно преобразовать наш созданный запрос в функцию, которая затем будет применяться, по очереди, ко всем нашим файлам. Сделать это, на самом деле, очень просто.
В редакторе запросов перейдите на вкладку Просмотр и нажмите кнопку Расширенный редактор (View — Advanced Editor). Должно открыться окно, где все наши предыдущие действия будут записаны в виде кода на языке М. Обратите внимание, что в коде жестко прописан путь к файлу, который мы импортировали для примера:
Теперь аккуратно вносим пару правок:
Смысл их прост: первая строка (filepath)=> превращает нашу процедуру в функцию с аргументом filepath, а ниже мы меняем фиксированный путь на значение этой переменной.
Все. Жмем на Готово и должны увидеть вот это:
Не пугайтесь, что пропали данные — на самом деле все ОК, все так и должно выглядеть Мы успешно создали нашу пользовательскую функцию, где запомнился весь алгоритм импорта и обработки данных без привязки к конкретному файлу. Осталось дать ей более понятное имя (например getData) на панели справа в поле Имя и можно жать Главная — Закрыть и загрузить (Home — Close and Load). Обратите внимание, что в коде жестко прописан путь к файлу, который мы импортировали для примера.. Вы вернетесь в основное окно Microsoft Excel, но справа должна появиться панель с созданным подключением к нашей функции:
Шаг 3. Собираем все файлы
Все самое сложное — позади, осталась приятная и легкая часть. Идем на вкладку Данные — Создать запрос — Из файла — Из папки (Data — New Query — From file — From folder) или, если у вас Excel 2010-2013, аналогично на вкладку Power Query. В появившемся окне указываем папку, где лежат все наши исходные файлы-города и жмем ОК. Следующим шагом должно открыться окно, где будут перечислены все найденные в этой папке (и ее подпапках) файлы Excel и детализация по каждому из них:
Жмем Изменить (Edit) и опять попадаем в знакомое окно редактора запросов.
Теперь нужно добавить к нашей таблице еще один столбец с нашей созданной функцией, которая «вытянет» данные из каждого файла. Для этого идем на вкладку Добавить столбец — Пользовательский столбец (Add Column — Add Custom Column) и в появившемся окне вводим нашу функцию getData, указав для ее в качестве аргумента полный путь к каждому файлу:
После нажатия на ОК созданный столбец должен добавиться к нашей таблице справа.
Теперь удалим все ненужные столбцы (как в Excel, с помощью правой кнопки мыши — Удалить), оставив только добавленный столбец и столбец с именем файла, т.к. это имя (а точнее — город) будет полезно иметь в итоговых данных для каждой строки.
А теперь «вау-момент» — щелкнем мышью по значку со своенным стрелками в правом верхнем углу добавленного столбца с нашей функцией:
… снимаем флажок Использовать исходное имя столбца как префикс (Use original column name as prefix)и жмем ОК. И наша функция подгрузит и обработает данные из каждого файла, следуя записанному алгоритму и собрав все в общую таблицу:
Для полной красоты можно еще убрать расширения .xlsx из первого столбца с именами файлов — стандартной заменой на «ничего» (правой кнопкой мыши по заголовку столбца — Заменить) и переименовать этот столбец в Город. А также подправить формат данных в столбце с датой.
Все! Жмем на Главной — Закрыть и загрузить (Home — Close & Load). Все собранные запросом данные по всем городам будут выгружены на текущий лист Excel в формате «умной таблицы»:
Созданное подключение и нашу функцию сборки не нужно никак отдельно сохранять — они сохраняются вместе с текущим файлом обычным образом.
В будущем, при любых изменениях в папке (добавлении-удалении городов) или в файлах (изменение количества строк) достаточно будет щелкнуть правой кнопкой мыши прямо по таблице или по запросу в правой панели и выбрать команду Обновить (Refresh) — Power Query «пересоберет» все данные заново за несколько секунд.
P.S.
Поправка. После январских обновлений 2017 года Power Query научился собирать Excel’евские книги сам, т.е. не нужно больше делать отдельную функцию — это происходит автоматически. Таким образом второй шаг из этой статьи уже не нужен и весь процесс становится заметно проще:
- Выбрать Создать запрос — Из файла — Из папки — Выбрать папку — ОК
- После появления списка файлов нажать Изменить
- В окне редактора запросов развернуть двойной стрелкой столбец Binary и выбрать имя листа, который нужно взять из каждого файла
И все! Песня!
Ссылки по теме
- Редизайн кросс-таблицы в плоскую, подходящую для построения сводных таблиц
- Построение анимированной пузырьковой диаграммы в Power View
- Макрос для сборки листов из разных файлов Excel в один
Хитрости »
1 Май 2011 765457 просмотров
Как собрать данные с нескольких листов или книг?
Очень часто бывает необходимо собрать данные с нескольких листов одной книги или даже с листов нескольких книг. Например, каждую неделю мы получаем некие отчеты от отделов, которые необходимо собрать в одну общую таблицу для построения сводной таблицы. Или это могут быть некие книги прайсов по товарам от разных поставщиком, который опять же надо сначала объединить, а потом уже анализировать. Вручную делать это довольно муторно. И то, муторно это только для первых 20-ти листов/файлов, потом становится просто тошно. Поэтому решил поделиться решением, которое поможет собрать данные со всех листов книги, со всех листов всех указанных книг или только с указанных листов:
'--------------------------------------------------------------------------------------- ' Author : Щербаков Дмитрий(The_Prist) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' https://www.excel-vba.ru ' info@excel-vba.ru ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' Purpose: http://www.excel-vba.ru/chto-umeet-excel/kak-sobrat-dannye-s-neskolkix-listov-ili-knig/ ' Процедура сбора данных с нескольки листов/книг '--------------------------------------------------------------------------------------- Option Explicit Sub Consolidated_Range_of_Books_and_Sheets() Dim iBeginRange As Range, rCopy As Range, lCalc As Long, lCol As Long Dim oAwb As String, sCopyAddress As String, sSheetName As String Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer Dim wsSh As Worksheet, wsDataSheet As Worksheet, bPolyBooks As Boolean, avFiles Dim wbAct As Workbook Dim bPasteValues As Boolean, IsPasteSheetName As Boolean On Error Resume Next 'Выбираем диапазон выборки с книг Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _ "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _ vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8) 'для указания диапазона без диалогового окна: 'Set iBeginRange = Range("A1:A10") 'диапазон указывается нужный 'Если диапазон не выбран - завершаем процедуру If iBeginRange Is Nothing Then Exit Sub End If 'Указываем имя листа 'Допустимо указывать в имени листа символы подставки ? и *. 'Если указать только * то данные будут собираться со всех листов sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр") 'Если имя листа не указано - данные будут собраны со вех листов If sSheetName = "" Then sSheetName = "*" End If 'добавлять ли имя листа в начало таблицы IsPasteSheetName = (MsgBox("Вставлять имя листа первым столбцом?", vbQuestion + vbYesNo, "www.wxcel-vba.ru") = vbYes) On Error GoTo 0 'Запрос - вставлять на результирующий лист все данные 'или только значения ячеек (без формул и форматов) bPasteValues = (MsgBox("Вставлять только значения?", vbQuestion + vbYesNo, "www.wxcel-vba.ru") = vbYes) 'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги) If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "www.wxcel-vba.ru") = vbYes Then avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True) If VarType(avFiles) = vbBoolean Then Exit Sub bPolyBooks = True lCol = 1 Else avFiles = Array(ThisWorkbook.FullName) End If If IsPasteSheetName Then lCol = lCol + 1 End If 'отключаем обновление экрана, автопересчет формул и отслеживание событий 'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды With Application lCalc = .Calculation .ScreenUpdating = False .EnableEvents = False .Calculation = xlManual End With 'создаем новый лист в книге для сбора Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) 'если нужно сделать сбор данных на новый лист книги с кодом 'Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 'цикл по книгам For li = LBound(avFiles) To UBound(avFiles) If bPolyBooks Then Set wbAct = Workbooks.Open(Filename:=avFiles(li)) Else Set wbAct = ThisWorkbook End If oAwb = wbAct.Name 'цикл по листам For Each wsSh In wbAct.Sheets If wsSh.Name Like sSheetName Then 'Если имя листа совпадает с именем листа, в который собираем данные 'и сбор идет только с активной книги - то переходим к следующему листу If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_ With wsSh Select Case iBeginRange.Count Case 1 'собираем данные начиная с указанной ячейки и до конца данных lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row iLastColumn = .Cells.SpecialCells(xlLastCell).Column sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address Case Else 'собираем данные с фиксированного диапазона sCopyAddress = iBeginRange.Address End Select lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1 'определяем для копирования диапазон только заполненных данных на листе Set rCopy = Intersect(.Range(sCopyAddress).Parent.UsedRange, .Range(sCopyAddress)) 'вставляем имя книги, с которой собраны данные If lCol > 0 Then If bPolyBooks Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(rCopy.Rows.Count).Value = oAwb End If If IsPasteSheetName Then wsDataSheet.Cells(lLastRowMyBook, lCol).Resize(rCopy.Rows.Count).Value = .Name End If End If 'если вставляем только значения If bPasteValues Then rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteFormats Else 'если вставляем все данные ячеек(формулы, форматы и т.д.) rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol) End If End With End If NEXT_: Next wsSh If bPolyBooks Then wbAct.Close False End If Next li With Application .ScreenUpdating = True .EnableEvents = True .Calculation = lCalc End With End Sub
Приведенный выше код необходимо вставить в стандартный модуль(Что такое модуль? Какие бывают модули?). Выполнить его можно будет из этой книги нажатием клавиш Alt+F8. В появившемся окне выбрать Consolidated_Range_of_Books_and_Sheets и нажать Выполнить. Так же можно создать на листе кнопку и назначить ей данный макрос. Так же, если впервые работаете с макросами настоятельно рекомендую прочитать статью: Что такое макрос и где его искать?, а так же Почему не работает макрос?
После вызова макроса поочередно будут появляется запросы, в которых надо будет указать исходные параметры:
- Диапазон сбора данных — Если в окне выбора диапазона выбрать только одну ячейку, то данные будут собраны со всех листов книги/книг, начиная с этой ячейки и до последней ячейки листа.
Если выбрать несколько ячеек, данные будут собраны только с указанного диапазона всех листов книги/книг. Допускается указать несвязанный(рваный) диапазон(например, только три столбца: A:A,D:D,F:F). Сделать это можно, выделив нужный диапазон с зажатой клавишей Ctrl. Здесь необходимо учитывать, что Excel позволяет одним махом скопировать не любые рваные диапазоны, а только диапазоны одного размера и только если они начинаются с одной строки. Например, если выделить диапазоны A1:B20, F1:H20 — они будут скопированы без проблем. Но если попробовать указать диапазоны со сдвигом: A1:B20, F2:H21 — Excel выдаст ошибку. - Имя листа — Необязателен для указания. Если не указан — данные будут собраны со всех листов. Указать можно как точное соответствие имени листа, так и с частичным соответствием. Например, если в книгах для сбора данных необходимо собрать данные только с листа «Январь», то следует так и указать — «Январь». Если требуется собрать данные только с листов, начинающихся с «Продажи»(«Продажи ЮГ», «Продажи НН», «Продажи Запад» и т.д.), то следует применить символ подстановки звездочку — «Продажи*». Если надо собрать с листов, содержащих в имени «продажи»(«Итоговые продажи ЮГ», «Продажи НН», «Сезонные продажи» и т.д.), то указываем «*продажи*». Если надо собрать только с листа «Сезонные продажи», но известно, что вместо пробела может быть нижнее подчеркивание или тире(«Сезонные продажи», «Сезонные_продажи», «Сезонные-продажи») или иной символ, то можно также применить звездочку — «Сезонные*продажи». Но если среди листов могут встречаться и такие как «Сезонные разовые продажи», «Сезонные корпоративные продажи» и т.п., но информацию с них собирать не надо, то можно применить вопросительный знак — «Сезонные?продажи». Вопросительный знак заменяет любой один символ, звездочка — любое количество любых символов.
- Вставлять имя листа первым столбцом? — если выбрать Да, перед данными в итоговой таблице будут записаны имена листов, с которых были собраны данные. Если будет указано собирать данные с нескольких книг — то имя листа будет во втором столбце, если с листов одной книги — то имя листа будет первым столбцом.
- Вставлять только значения? — если выбрать Да, то в результирующий лист с листов будут вставлены исключительно значения ячеек (без формул), но при этом сохранятся их форматы(формат чисел, цвет заливки, цвет шрифта, границы и т.п.). Может пригодится, если на листах для сбора записаны формулы, ссылающиеся на другие листы, книги, диапазоны. При обычном копировании может случиться так, что формула выдаст ошибку, т.к. в книге для вставки нет таких листов и диапазонов или данные расположены иначе. Если выбрать Нет, то все ячейки с листов на результирующий будут копироваться в точности как в исходных листах.
- И последний запрос: Собрать данные с нескольких книг? — если выбрать Да, то появится диалоговое окно выбора файлов. Надо указать все файлы, данные с которых необходимо собрать. Если выбрать Нет, то данные будут собираться с листов только активной книги. При этом, если выбран вариант сбора с нескольких книг, то первым столбцом в итоговой таблице будут записаны имена файлов, с которых были собраны данные
Данные будут собраны на новый лист книги с макросом. Если данные собирались с нескольких книг, то в первый столбец будут занесены имена книг, с которых собраны данные.
Если после сбора данных обнаружили, что после каждого файла/листа много пустых строк, то следует найти в коде строку:
lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
и заменить её на строку примерно следующего содержания:
lLastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
где 1 — это номер столбца на листах данных, в котором искать последнюю заполненную ячейку.
Актуально это для файлов с одинаковой структурой. Например, если сбор идет с листов по продажам, то вполне может быть такое, что в столбце 1 может не быть данных. Поэтому следует определить номер столбца, в котором наполнение данных максимально. Например, это может быть столбец с наименованиями товара или с суммами. Если это столбец D, то следует строку записать так:
lLastrow = .Cells(.Rows.Count, 4).End(xlUp).Row 'ищем последнюю строку в 4-м столбце
Подробнее про определение последней строки можно прочитать в статье: Как определить последнюю ячейку на листе через VBA?
Важное замечание: Если вы используете Excel 2007 и выше и файлы для сбора данных тоже в этом формате, то следует скачанный файл сначала сохранить в формат «Книга Excel с поддержкой макросов(.xlsm)», закрыть и открыть заново. Иначе есть шанс получить ошибку при сборе данных, т.к. Excel будет в режиме совместимости и не сможет поместить на результирующий лист более 65536 строк.
Скачать пример:
Сбор данных с листов и книг.xls (73,0 KiB, 37 087 скачиваний)
Также см.:
Сбор данных с нескольких листов/книг
Как объединить несколько текстовых файлов в один?
Просмотреть все файлы в папке
План-фактный анализ в Excel при помощи Power Query
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Некоторым пользователям приложения Microsoft Excel приходится решать задачу сбора данных из разных рабочих книг. Кому-то для формирования месячных, квартальных или годовых отчетов, а кому-то для составления реестров или баланса. При этом многократно повторяются такие операции как открытие файла, выделение определенного диапазона, копирование значений выделенного диапазона, закрытие файла, вставка скопированных значений на отдельный итоговый лист. Такие действия пользователей можно и нужно автоматизировать, ускоряя консолидацию данных и делая свою работу более эффективной.
Сбор данных из различных книг Excel на один лист в два этапа
В более ранних публикациях рассматривались инструменты, предназначенные для решения других задач, но при помощи которых можно собрать данные из разных файлов Excel на итоговый лист в два этапа.
1) объединить листы различных рабочих книг в одной книге;
2) собрать данные со всех листов рабочей книги на отдельный лист.
Далее речь пойдет о том, как проделать все тоже самое, но в одно действие.
Сбор данных из нескольких рабочих книг Excel на отдельный лист
Для быстрого объединения данных, расположенных в разных рабочих книгах можно использовать надстройку для Excel.
Надстройка позволяет копировать заданные пользователем диапазоны данных на всех заданных листах всех выбранных рабочих книг и вставлять скопированные данные на новый лист активной рабочей книги. При работе с этой надстройкой пользователь имеет возможность:
1) Выбирать нужные рабочие книги для последующей обработки;
2) Осуществлять выбор листов по именам, по номерам, по заданному значению в ячейках выделенного диапазона;
3) Задавать диапазоны ячеек для копирования;
а) Используемые диапазоны — это диапазоны, начинающиеся с первой используемой ячейки и заканчивающиеся последней используемой ячейкой;
б) Предварительно выделенные диапазоны на каждом листе — диапазоны, выделенные пользователем самостоятельно, исходя из его потребностей по консолидации данных;
в) Одноименные диапазоны — диапазоны с одинаковым адресом на каждом листе, указанным на активном рабочем листе;
г) Выборочные диапазоны — диапазоны ячеек, начинающиеся с выбранной ячейки и заканчивающиеся:
— концом листа (последней используемой ячейкой);
— последней заполненной ячейкой в заданном столбце;
— последней заполненной ячейкой в заданной строке;
д) Именованные диапазоны.
4) При вставке данных на итоговый лист заменять формулы результатами их вычислений (при отсутствии объединенных ячеек);
5) При сборе данных на итоговый лист вставлять связи, при этом изменения значений в исходных диапазонах ячеек будут отображаться на итоговом листе;
6) Подставлять имена листов перед вставляемыми на итоговый лист диапазонами;
7) Подставлять имена рабочих книг перед вставляемыми на итоговый лист диапазонами;
Выбирать вертикальное либо горизонтальное размещение данных на листе с итогами;
9) Сохранять все настройки диалогового окна для последующих сеансов работы.
*В зависимости от выбранной опции диапазоны будут располагаться один ниже другого (вертикальное расположение), либо один правее другого (горизонтальное расположение).
надстройка для сбора данных из разных рабочих книг на отдельный лист
После установки надстройки останется лишь запустить программу нажатием одной кнопки из главного меню Excel или с ленты, в зависимости от версии Excel и в диалоговом окне выбрать необходимые параметры для сбора информации.
В случае, если итоговый лист содержит ненужные пустые строки, можно провести их автоматическое удаление при помощи надстройки для выборочного удаления строк.
Другие материалы по теме:
0 / 0 / 0 Регистрация: 17.12.2015 Сообщений: 3 |
|
1 |
|
Собрать данные из разных книг в одну17.12.2015, 11:33. Показов 22897. Ответов 18
Добрый день. Результирующая таблица имеет такой же вид , как и рабоче книги. Для примера прикрепляю 2 книги, в которых находятся таблицы.
0 |
0 / 0 / 0 Регистрация: 17.12.2015 Сообщений: 3 |
|
17.12.2015, 12:33 [ТС] |
2 |
В том-то и дело, что хотелось бы просить , чтобы мне показали наиболее подходящий вариант. я уже штук 5 перепробовал, ничего не получается.
0 |
5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
|
17.12.2015, 16:46 |
3 |
Подходящий вариант.
1 |
5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
|
17.12.2015, 16:55 |
4 |
Лучше проверку данных не копировать.
0 |
0 / 0 / 0 Регистрация: 17.12.2015 Сообщений: 3 |
|
17.12.2015, 18:14 [ТС] |
5 |
Благодарю, будем пробовать). Добавлено через 48 минут
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
18.12.2015, 09:30 |
6 |
|||
Здесь можно добавлять имена листов сбора сразу в массив ImenaListovSbora через «,»
0 |
0 / 0 / 1 Регистрация: 16.03.2019 Сообщений: 50 |
|
23.03.2019, 21:52 |
7 |
Здравствуйте! Наткнулась на Ваш код — очень поможет в работе, спасибо! Добавлено через 6 минут
0 |
Schumacher57 12 / 11 / 3 Регистрация: 07.09.2015 Сообщений: 256 |
||||||||
24.03.2019, 13:03 |
8 |
|||||||
Сообщение было отмечено Остап Бонд как решение Решениеrinolga,
Ответ на 3ий вопрос:
Рекомендую в конце кода вернуть значения в положения true. Могут возникнуть неприятности, наподобие: закроете книгу отредактированную, она не сохранится и не задаст вопрос о сохранении по причине решения третьего вопроса.
1 |
rinolga 0 / 0 / 1 Регистрация: 16.03.2019 Сообщений: 50 |
||||
24.03.2019, 15:06 |
9 |
|||
Сообщение было отмечено Остап Бонд как решение РешениеSchumacher57, спасибо, помогло!
0 |
12 / 11 / 3 Регистрация: 07.09.2015 Сообщений: 256 |
|
24.03.2019, 16:06 |
10 |
Сообщение было отмечено Остап Бонд как решение Решениеrinolga, Не за что
0 |
0 / 0 / 1 Регистрация: 16.03.2019 Сообщений: 50 |
|
24.03.2019, 22:08 |
11 |
время просмотра директории будут отображаться только текстовые файлы или файлы Word. текстовые мне в данном случае не нужны нужны только экселевские. Насколько я смогла понять из кода, макрос обрабатывает файлы с маской *.xls*, как раз то что надо
0 |
0 / 0 / 0 Регистрация: 02.02.2020 Сообщений: 1 |
|
05.02.2020, 21:45 |
12 |
Добрый день, воспользовалась данным макросом, правда у меня столбцов и строк в таблицах намного больше, данные переносит. И вроде бы все ничего, но он переносит заливку ячеек темно серую и между данными книг оставляет по тысячи пустых строк, почему это может быть?
0 |
12 / 11 / 3 Регистрация: 07.09.2015 Сообщений: 256 |
|
20.08.2020, 11:52 |
13 |
Лена122,
правда у меня столбцов и строк в таблицах намного больше Тут надо всё индивидуально смотреть (изменения в один символ в програмном коде, влечёт (хоть и работающий код) за собой с сотню всяких изменений.
0 |
Заблокирован |
|
20.08.2020, 16:09 |
14 |
Мдя За полгода Лена решила уже свою проблему наверно?
0 |
12 / 11 / 3 Регистрация: 07.09.2015 Сообщений: 256 |
|
20.08.2020, 16:25 |
15 |
passedbyz сам не знаю, что на меня нашло)
1 |
0 / 0 / 0 Регистрация: 21.10.2020 Сообщений: 3 |
|
21.10.2020, 11:41 |
16 |
Доброго времени суток! Помогите, пожалуйста, с такой задачей. Необходимо собрать данные из разных книг (база с данными олимпиад), с одними и теми же столбцами, но разным количеством строк. Есть еще затруднение в том, что в книге несколько листов (много предметов). Возможен ли такой сбор информации? Буду рада, если сможете помочь! Для наглядности прикрепляю исходную таблицу
0 |
2628 / 1634 / 744 Регистрация: 23.03.2015 Сообщений: 5,135 |
|
21.10.2020, 12:45 |
17 |
AnastasiyaAR,
0 |
0 / 0 / 0 Регистрация: 21.10.2020 Сообщений: 3 |
|
21.10.2020, 15:22 |
18 |
Здравствуйте! Вот для примера 2 школы, три предмета. Объединить надо по предметам в один лист. Например, Химия и там обе школы. Благодарю!
0 |
0 / 0 / 0 Регистрация: 21.10.2020 Сообщений: 3 |
|
21.10.2020, 15:27 |
19 |
Здравствуйте! Вот для примера прикрепляю архив — 2 школы, три предмета. Объединить надо по предметам в один лист. Например, Химия и там обе школы. Благодарю!
0 |
В ячейку, куда мы хотим вставить связь, ставим знак равенства (так же как и для обычной формулы), переходим в исходную книгу, выбираем ячейку, которую хотим связать, щелкаем Enter. Вы можете использовать инструменты копирования и автозаполнения для формул связи так же, как и для обычных формул.
- Откройте документ.
- На вкладке View (Вид) выберите New Window (Новое окно). .
- На вкладке View (Вид) нажмите кнопку Arrange All (Упорядочить все).
- Выберите нужный параметр отображения. .
- Нажмите ОК.
Мнение эксперта
Витальева Анжела, консультант по работе с офисными программами
Со всеми вопросами обращайтесь ко мне!
Задать вопрос эксперту
В открытом окне файла Excel, который вы хотите переместить или скопировать в другой файл, выберите все вкладки листа в нижней части окна, удерживая клавишу Shift и нажимая на каждую вкладку листа. Если же вам нужны дополнительные объяснения, обращайтесь ко мне!
Выделите ячейку, которая будет связанна с исходной. Перейдите к вкладке «Главная» и в группе «Буфер обмена» раскройте меню кнопки «Вставить». В списке команд выберите пункт «Вставить связь» (рис. 4.4).
Как объединить данные в нескольких файлах Excel — Mexn
- Щелкните ячейку, в которую нужно ввести формулу.
- В строка формул введите = (знак равенства) и формулу, которую нужно использовать.
- Щелкните ярлычок листа, на который нужно сослаться.
- Выделите ячейку или диапазон ячеек, на которые нужно сослаться.
Если вы решите создать ссылки на исходные данные, ваш новый рабочий лист будет действовать как зеркальная версия ваших отдельных листов и файлов. В противном случае ваши данные будут скопированы на этот лист для непосредственного редактирования.
Как объединить листы Excel
Excel позволяет легко объединить несколько листов в новую рабочую книгу.
- Откройте листы, которые вы хотите объединить.
- Нажмите Главная >Формат >Переместить или скопировать лист.
- Используйте выпадающее меню, чтобы выбрать (новая книга).
- Нажмите Хорошо.
Как собрать данные с разных листов Excel? Лучшие ответы на вопросы
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Мнение эксперта
Витальева Анжела, консультант по работе с офисными программами
Со всеми вопросами обращайтесь ко мне!
Задать вопрос эксперту
Open Filename путь к файлу здесь нужно указать не путь к файлу, а только название файла, путь к папке мы указали в чуть выше в коде. Если же вам нужны дополнительные объяснения, обращайтесь ко мне!
Щелкните ячейку листа, в которую вы хотите вставить объект. На вкладке Вставка в группе Текст нажмите кнопку Объект . Откройте вкладку Из файла . Нажмите кнопку Обзор и выберите файл, который вы хотите вставить.
Как объединить файлы Excel и листы
Чтобы не дублировать данные, отфильтруйте столбец Name: Заканчивается на – печати. Нажмите кнопку Развернуть в верхней части столбца Content. Оставьте выбранными все столбцы, снимите флажок Использовать исходное имя столбца как префикс. Обратите внимание на отличия от предыдущего случая. Показаны все строки в выбранных столбцах диапазона печати:
Как прикрепить файл к ячейке в Excel?
- Щелкните ячейку листа, в которую вы хотите вставить объект.
- На вкладке Вставка в группе Текст нажмите кнопку Объект.
- Откройте вкладку Из файла.
- Нажмите кнопку Обзор, а затем выберите файл, на который вы хотите создать ссылку.
- Установите флажок Связь с файлом, а затем нажмите кнопку ОК.
Щелкните ячейку листа, в которую вы хотите вставить объект. На вкладке Вставка в группе Текст нажмите кнопку Объект . Откройте вкладку Из файла . Нажмите кнопку Обзор и выберите файл, который вы хотите вставить.
Как с помощью VBA скопировать данные из одной книги в другую | SirExcel
В крайнем случае, можно скопировать и вставить различные необходимые ячейки, поместив их все на одном листе. Однако в зависимости от объема данных, с которыми вы работаете, это может занять много времени и усилий.
Мнение эксперта
Витальева Анжела, консультант по работе с офисными программами
Со всеми вопросами обращайтесь ко мне!
Задать вопрос эксперту
Есть еще один способ создания новой рабочей книги Excel находясь в Excel, нажмите комбинацию клавиш Ctrl N и новая рабочая книга будет создана. Если же вам нужны дополнительные объяснения, обращайтесь ко мне!
Типичный файл Microsoft Excel разбит на разные листы (или листы), которые перечислены в виде вкладок в нижней части окна Excel. Они действуют как страницы, позволяя распределять данные по нескольким листам в одном файле.
Сбор Данных С Разных Книг Excel
- Выберите листы на панели вкладок «Лист», щелкните правой кнопкой мыши и выберите Переместить или скопировать из контекстного меню. …
- В диалоговом окне «Перемещение или копирование» выберите (новая книга) из Бронировать раскрывающийся список, проверьте Создать копию и нажмите OK кнопка.
Независимо от того, решите ли вы объединить данные в Excel в один лист или файл, или если вы предпочитаете распределить свою работу по нескольким файлам, эти советы помогут вам сохранить организованность. Когда вы будете готовы, вы можете начать делиться своим файлом Excel с другими, чтобы совместно работать и эффективно анализировать ваши данные в команде.
Russian (Pусский) translation by Andrey Rybin (you can also view the original English article)
По мере того как вы используете и создаете больше рабочих документов Excel, у вас может возникнуть необходимость связать их между собой. Может быть вы захотите написать формулу, которая использует данные с разных Листов. Или может даже вы напишете формулу, которая будет использовать данные из разных Книг (стандартное название рабочего документа Excel — workbook (анг.))
Я понял, что если я хочу, чтобы мои файлы были понятными и аккуратными, лучше разделять большие Листы с данными от формул, которые их обрабатывают. Я часто использую одну Книгу или Лист, который обрабатывает все что мне нужно.
В этом уроке, вы узнаете как добавлять ссылки на данные в Excel. Сначала, мы научимся связывать данные из разных Листов в пределах одной Книги. Затем, мы перейдем к связыванию нескольких Книг Excel, чтобы импортировать и синхронизировать данные между файлами.
Как Можно Быстро Организовать Ссылку Между Данными в Книгах Excel (Смотри и Учись)
Я покажу вам два примера, как можно связать данные из ваших электронных таблиц. Вы узнаете как извлекать данные из другой таблицы в Excel и как организовать связь между двумя Книгами. Мы также рассмотрим основные примеры написания формул, использующих данные из различных Листов в пределах одного рабочего документа.
Давайте посмотрим иллюстрированное руководство по связыванию Листов и Книг в Excel.
Основы: Как Добавить Ссылку между Листами в Excel
Давайте начнем с того, что научимся создавать формулы, которые используют данные с других Листов. Вы возможно уже знаете, что рабочий документ (Книга) Excel, может содержать несколько рабочих страниц (Листов). Каждый лист имеет свою вкладку, и вы можете переключаться между ними щелкая по вкладкам в нижней части документа Excel.
Сложные документы могут содержать большое количество листов. И в какое-то время, вам придется написать формулу которая будет использовать данные из разных листов.
Может вы будете использовать один лист в документе для всех ваших формул, которые обрабатывают данные, а данные будете распределять по отдельным листам.
Давайте разберемся как написать многостраничную формулу, которая работает с данными из разных Листов в пределах одного рабочего документа.
1. Создайте в Excel новую Формулу
Многие формулы в Excel начинаются со знака равно (=). Дважды щелкните или начните печатать в ячейке, и вы начнете создавать формулу, в которую вы хотите вставить ссылку. Например, я собираюсь написать формулу, которая будет суммировать значения из разных ячеек.
Я открываю запись знаком =, и затем щелкаю по первой ячейке на текущем листе, чтобы создать первую часть формулы. Затем, я напечатаю знак +, чтобы добавить значение из второй ячейки в этой формуле.
Пока не завершайте ввод формулы и не жмите Enter! Вам нужно оставить формулу открытой перед тем как вы переключитесь на другой Лист.
2. Переключитесь между Листами в Excel
Пока ваша формула не закончена, щелкните на вкладке другого листа в нижней части программы. Очень важно, чтобы вы не закрывали формулу, перед тем как вы щелкните по другой ячейке, которую вы хотите вставить в формулу.
После того, как вы переключитесь на другой лист, щелкните по ячейке которую вы хотите добавить в формулу. Как вы можете видеть на картинке ниже, Excel автоматически запишет часть формулы, которая будет обращаться к ячейке на другом Листе.
Заметьте на картинке ниже, что для ссылки на ячейку на другом Листе, Excel добавил надпись «Sheet2!B3», которая ссылается на ячейку В3 на листе с названием Sheet2. Вы можете написать это вручную, но когда в щелкаете по ячейке, Excel делает эту надпись автоматически за вас.
3. Закройте Excel формулу
Теперь, вы можете нажать enter, чтобы завершить создание мульти-страничной формулы. Когда вы это делаете, Excel вернется туда, где вы начали создавать формулу и покажет вам результат.
Вы можете продолжать набирать формулу, включая в нее ячейки с других листов и другие ячейки на этом же листе. Продолжайте комбинировать ссылки со всего рабочего документа, на все данные, которые вам нужны.
Повышаем Уровень Сложности: Как Создать Связь Между Несколькими Книгами Excel
Давайте узнаем, как извлечь данные из другого рабочего документа. С помощью этого навыка, вы сможете писать формул, которые связывают данные из разных рабочих документов Excel.
Для этого раздела урока, вам понадобится два рабочих документа, которые вы можете скачать в виде бесплатного приложения к этому уроку. Откройте их оба в Excel, и следуйте дальнейшим указаниям.
1. Откройте Две Рабочие Книги
Давайте начнем создавать формулу, которая будет использовать данные из двух различных документов.
Самый простой способ сделать это, это открыть два документа Excel, одновременно и расположить их рядом друг с другом. Я использую для этого функцию Windows Snap, чтобы каждое окно занимало пол экрана. Вам нужно иметь две книги перед собой, чтобы писать формулу, которая будет взаимодействовать с двумя Книгами.
На рисунке ниже, я открыл два рабочих документа один рядом с другим, для которых я буду создавать формулы. В моем примере, я веду бизнес, и покупаю различные продукты, и продаю их в разные страны. Итак, я использую разные рабочие документы, чтобы отслеживать покупки/продажи и данные по стоимости.
2. Начните Создавать Формулу в Excel
Цена за которую я покупаю товары, может измениться, а так же может измениться соотношение курсов к валюте в которой я получаю выплаты. Поэтому мне нужно иметь список в котором отслеживаются курсы валют и умножать их на стоимость моих закупок. Это подходящая возможность, чтобы использовать информацию из двух файлов и записать формулу, которая будет использовать данные обоих файлов.
Давайте рассмотрим число баррелей нефти которую я покупаю каждый месяц и цену за баррель. Сначала в ячейке из колонки Cost (ячейка C3), я начинаю создавать формулу, щелкнув в ней и нажав знак равно (=), а затем щелкаю по ячейке В3, чтобы взять значение для количества. Теперь, я жму знак *, чтобы уможножить количество на курс.
Итак, ваша формула, пока должна выглядеть так:
=B3*
Не закрывайте пока вашу формулу. Убедитесь, что она осталась открытой перед тем как перейти к следующему шагу; нам нужно указать Excel данные по цене, на которую будет умножаться количество.
3. Переключитесь на Другой Рабочий Документ Excel
Пришло время переключиться на другой рабочий документ, вот почему так важно иметь данные из двух документов между собой, когда вы работаете с двумя Книгами.
Пока ваша формула открыта, щелкните по вкладке другой книги. Затем, щелкните по ячейке в вашей второй Книге, чтоб связать данные из двух файлов Excel.
Excel автоматически добавит ссылку на другой рабочий документа, как часть формулы:
=B3*[Prices.xlsx]Sheet1!$B$2
После того как вы нажмете Enter, Excel автоматически рассчитает окончательную стоимость умножив количество в первой книге на цену из второй книги.
Потренируйте свои навыки работы в Excel, умножая количество товара или объем на соответствующую ему цену из документа «Prices«.
Главное, расположить книги одну рядом с другой, и создавать формулу переключаясь между ними.
При этом, ничего не мешает вам использовать больше, чем два рабочих документа. Вы можете открыть много рабочих документов, на которые вы хотите ссылаться, и создавать формулы, связывающие данные между множеством листов.
Как Обновлять Данные При Работе с Несколькими Книгами
Когда вы используете формулы, которые ссылаются на разные книги Excel, вам нужно позаботится о том, как будут обновляться данные.
Итак, что же произойдет, если данные в Книге, на которую вы ссылаетесь, поменяются? Будут ли выполнены автоматические изменения в вашей Книге, или вам нужно обновлять ваши файлы, чтобы извлечь последние изменения и импортировать их?
Ответ такой, «зависит», и в основном зависит от того, открыты ли два документа одновременно.
Пример 1: Открыты Обе Книги Excel
Давайте проверим пример используя те же книги, что мы использовали раньше. Обе книги открыты. Давайте посмотрим, что произойдет, если мы изменим цену нефти за баррель с 45$ на 75$:
На сриншоте ниже, вы можете видеть, что когда мы изменили цену на нефть, результаты в другом документе автоматически поменялись.
Важно помнить: если оба рабочих документа открыты одновременно, изменения будут внесены автоматически в реальном времени. Когда вы меняете переменную, то информация в другом документе будет автоматически изменена или пересчитана, на основании новых данных.
Пример 2: Если Один Рабочий Документ Закрыт
А что если вы открыли только один рабочий документ? Например,
каждое утро мы обновляем цены на наши товары и валюты, а вечером мы
рассматриваем влияние изменений на наши покупки и продажи.
В следующий раз, когда вы откроете документ, который ссылается на другие таблицы, вы должны увидить сообщение подобное тому, что приведено ниже. Вы можете щелкнуть по кнопке Обновить (Update), чтобы извлечь полседние данные из документа, на который ссылается формула.
Вы так же можете видеть меню, где можно нажать на копку Включить содержимое (Enable Content), чтобы автоматически обновлять данные между файлами Excel.
Подводим итоги и продолжаем обучаться работе в Excell
Написание формул которые берут данные из разных Листов и Книг, важный навык, при работе в Excel. Тем более, что это совсем не сложно, если вы знаете как это делать.
Посмотрите эти дополнительные уроки, чтобы узнать больше о том как работать с программой Excel и как обрабатывать в ней данные. Эти уроки, хорошо подойдут для того, чтобы продолжить обучение.
Дайте мне знать в комментариях, если у вас остались какие-то вопросы, по поводу того как организовать связь между различными рабочими документами Excel.
Как собрать данные с нескольких листов или книг на один лист?
Одной из классических операций в Excel является копирование данных с одного листа на другой. Скопировал — вставил, никаких вопросов. Проблемы начинаются когда требуется собрать данные из разных источников, например с нескольких листов Excel на одном листе.
Существуют различные способы сбора данных в одном месте, в одной книге или на одном листе. Многократное копирование данных с последующей вставкой в нужном месте не рассматривается по понятным причинам, объединение данных при помощи сводных таблиц — это тоже отдельная тема. Остановимся на способе, который является наиболее эффективным в ситуации, когда требуется собрать большое количество данных с различных листов или книг на одном листе.
Сбор данных с нескольких листов Excel на итоговый лист
Для того чтобы слить данные с разных листов рабочей книги на один лист, потребуется надстройка для Excel по сбору данных. После ее установки Вам останется лишь запустить программу нажатием одной кнопки из ленты Excel и в диалоговом окне выбрать необходимые параметры для сбора информации.
Надстройка позволяет копировать заданные пользователем диапазоны данных на выбранных листах рабочей книги и вставлять скопированные данные на результирующий лист. При выборе диапазонов доступны четыре опции:
1) Используемые диапазоны — это диапазоны, начинающиеся с первой используемой ячейки и заканчивающиеся последней используемой ячейкой;
2) Предварительно выделенные диапазоны на каждом листе — диапазоны, выделенные пользователем самостоятельно, исходя из его потребностей по консолидации данных;
3) Одноименные диапазоны — диапазоны с одинаковым адресом на каждом листе, указанным на активном рабочем листе;
4) Выборочные диапазоны — диапазоны ячеек, начинающиеся с выбранной ячейки и заканчивающиеся концом листа (последней используемой ячейкой).
В диалоговом окне надстройки можно гибко настроить листы, с которых необходимо собрать данные. На выбор пользователя программа может обработать как все листы, так и только видимые, скрытые, непустые, с заданными именами, по маске имен, в интервале номеров, с заданным значением в определенном диапазоне.
Кроме того, в диалоговом окне надстройки можно указать способ расположения данных на итоговом листе, в зависимости от выбранной опции диапазоны будут располагаться один ниже другого (вертикальное расположение), либо один правее другого (горизонтальное расположение).
Для наглядности, чтобы на итоговом листе можно было видеть где заканчивается один диапазон и начинается другой, предусмотрена возможность отделять диапазоны друг от друга двойной сплошной линией, а также добавлять имена листов перед диапазонами.
Зачастую копируемые диапазоны содержат формулы, которые ссылаются на ячейки, адреса которых выходят за пределы копируемой области, либо наличие которых на итоговом листе нежелательно, для этих случаев добавлена опция «Заменять формулы результатами вычислений». Возможность заменять формулы результатами вычислений отсутствует, если копируемые диапазоны содержат объединенные ячейки.
Когда возникает необходимость собрать с разных листов строки, отвечающие определенным условиям, например, содержащие заданный текст, то предварительно, при помощи надстройки для выборочного выделения строк, можно выделить нужные строки на всех листах, после чего используя опцию «Предварительно выделенные диапазоны на каждом листе» собрать выделенные строки на итоговый лист.
В случае, если итоговый лист содержит ненужные пустые строки, можно провести их автоматическое удаление при помощи надстройки для выборочного удаления строк.
Как правило, после переноса данных на итоговый лист, сами исходные листы становятся ненужными, в этом случае их можно удалить полностью либо выборочно при помощи надстройки для удаления листов.
Видео по сбору данных со всех листов на итоговый лист
Сбор данных с нескольких книг Excel на один лист
Аналогичный сбор данных можно организовать и из разных рабочих книг. Сделать это можно в два этапа при помощи последовательного использования двух надстроек для Excel.
1) При помощи надстройки для объединения рабочих книг в один файл, собрать все листы в одной рабочей книге;
2) При помощи надстройки для сбора данных на итоговый лист, объединить данные с разных листов.
Как собрать данные с нескольких листов excel на один лист
Многие пользователи совершают одну и ту же ошибку: разносят исходную информацию на несколько листов. Таким образом файл становится неудобным для итогового анализа. Представим что такой файл достался Вам, например от уволенного сотрудника, место которого Вы заняли 🙂 В файле 12 листов итогов работы сотрудников по месяцам, содержащие абсолютно одинаковые таблицы, отличающиеся только значениями результативности, и один общий лист, на который необходимо собрать всю информацию за год, для того что бы определить кто из сотрудников работал наиболее результативно.
ПРОБЛЕМА: Как быстро собрать информацию на один лист из нескольких?
И заполнить такую форму:
КАК ЭТО РАБОТАЕТ:
Функция ДВССЫЛ() возвращает ссылку, заданную текстовой строкой. По простому говоря:=ДВССЫЛ( B1 &» !B2 «) — даёт нам ссылку аналогичную = Янв !B2 , потому как в ячейке В1 находится текст Янв , который конкатенируется (сцепляется) посредством оператора конкатенации амперсанда & с указанием конкретной ячейки листа Янв В2 .
КОММЕНТАРИИ: Так же можно использовать подобные конструкции и для извлечения данных из других книг.
МИНУСЫ: Функция ДВССЫЛ() не работает с закрытыми книгами.
ОБЛАСТЬ ПРИМЕНЕНИЯ: Любая версия Excel
Консолидация данных с нескольких листов
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Для подведения итогов и результатов из отдельных листов, можно объединить данные из каждого листа в главном листе. Листы может быть в той же книге как главном листе или в других книгах. При объединении данных, чтобы упростить можно обновить и статистической обработки при необходимости собирать данные.
Например, если в каждом из региональных офисов есть свой лист расходов, с помощью консолидации можно свести эти данные на главном листе корпоративных расходов. Главный лист также может содержать итоговые и средние значения продаж, данные о складских запасах и информацию о самых популярных товарах в рамках всей компании.
Совет: Если вы часто консолидировать данные, он помогут создать новые листы на основе шаблона с единообразным макетом. Дополнительные сведения о шаблонах читайте в статье: Создать шаблон. Это также идеально время Настройка шаблона с помощью таблиц Excel.
Консолидация данных по положению или категории двумя способами.
Консолидация данных по расположению: данные в исходных областях том же порядке и использует одинаковых наклеек. Этот метод используется для консолидации данных из нескольких листов, например отделов бюджета листов, которые были созданы из одного шаблона.
Консолидация по категории: данные в исходных областях не расположены в одном и том же порядке, но имеют одинаковые метки. Используйте этот способ, чтобы консолидировать данные из нескольких листов с разными макетами, но одинаковыми метками данных.
Консолидация данных по категории похоже на создание сводной таблицы. Со сводной таблицей тем не менее, вы можете легко переупорядочение категории. Если вам нужна более гибкие Консолидация по категории, можно создать сводную таблицу .
Примечание: В этой статье были созданы с Excel 2016. Хотя представления могут отличаться при использовании другой версии Excel, шаги одинаковы.
Выполните указанные ниже действия, чтобы консолидация нескольких рабочих листов в главном листе.
Если вы еще не сделано, настройте данные на каждом листе составные, сделав следующее:
Убедитесь, что все диапазоны данных представлены в формате списка. Каждый столбец необходимо иметь метку (верхний колонтитул) в первой строке и содержать похожие данные. Должен быть отсутствуют пустые строки или столбцы в любом месте в списке.
Разместите каждый диапазон на отдельном листе, но не было введено никаких данных в основном листе где план для консолидации данных. Excel будет сделать это для вас.
Убедитесь, что всех диапазонов совпадают.
На основном листе щелкните левый верхний угол области, в которой требуется разместить консолидированные данные.
Примечание: Чтобы избежать перезаписи существующие данные в основном листе, убедитесь, оставьте достаточно ячеек справа и верхний угол консолидированные данные.
Нажмите кнопку данные>Консолидация (в группе Работа с данными ).
Выберите в раскрывающемся списке Функция функцию, которую вы хотите использовать для консолидации данных. По умолчанию используется значение СУММ.
Вот пример, в котором выбраны три диапазоны листа:
Далее в поле ссылка нажмите кнопку Свернуть, чтобы уменьшить масштаб панели и выбрать данные на листе.
Щелкните лист, содержащий данные, которые требуется консолидировать данные и нажмите кнопку Развернуть диалоговое окно справа, чтобы вернуться в диалоговое окно Консолидация .
Если лист, содержащий данные, которые необходимо объединить в другой книге, нажмите кнопку Обзор, чтобы найти необходимую книгу. После поиска и нажмите кнопку ОК, Excel в поле ссылка введите путь к файлу и добавление восклицательный знак, путь к. Чтобы выбрать другие данные можно нажмите Продолжить.
Вот пример, в котором выбраны три диапазоны листа выбранного:
Во всплывающем окне Консолидация нажмите кнопку Добавить. Повторите этот сценарий, чтобы добавить все нужные диапазоны консолидации.
Обновления автоматически и вручную: Если требуется автоматическое обновление консолидации таблицы при изменении исходных данных, просто установите флажок создавать связи с исходными данными. Если это поле остается неограниченный, возможность обновления консолидации вручную.
Связи невозможно создать, если исходная и конечная области находятся на одном листе.
Если необходимо изменить степень диапазона — или замените диапазон — выберите диапазон, во всплывающем окне Консолидация и обновлять его, выполнив указанные выше действия. Создаст новый в ссылке на диапазон, поэтому вам нужно будет сначала удалить предыдущий перед Консолидация еще раз. Просто выберите старой ссылки и нажмите клавишу Delete.
Нажмите кнопку ОК, а Excel создаст консолидации для вас. Кроме того можно применить форматирование. Бывает только необходимо отформатировать один раз, если не перезапустить консолидации.
Все названия, не совпадающие с названиями в других исходных областях, приведут к появлению дополнительных строк или столбцов в консолидированных данных.
Убедитесь, что все категории, которые не нужно консолидировать, должны иметь уникальные подписи, которые появляются в диапазоне только один источник.
Если данные для консолидации находятся в разных ячейках разных листов:
Введите формулу со ссылками на ячейки других листов (по одной на каждый лист). Например, чтобы консолидировать данные из листов «Продажи» (в ячейке B4), «Кадры» (в ячейке F5) и «Маркетинг» (в ячейке B9) в ячейке A2 основного листа, введите следующее:
Совет: Чтобы указать ссылку на ячейку — например, продажи! B4 — в формуле, не вводя, введите формулу до того места, куда требуется вставить ссылку, а затем щелкните лист, используйте клавишу tab и затем щелкните ячейку. Excel будет завершена адрес имя и ячейку листа для вас. Примечание: формулы в таких случаях может быть ошибкам, поскольку очень просто случайно выбираемых неправильной ячейки. Также может быть сложно ошибку сразу после ввода сложные формулы.
Если данные для консолидации находятся в одинаковых ячейках разных листов:
Ввод формулы с трехмерной ссылки, которая использует ссылку на диапазон имен листов. Например для консолидации данных в ячейках с A2 по продажам через маркетинга включительно, в ячейке E5 главном листе вы бы введите следующие данные:
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.
Как собрать данные с нескольких листов или книг?
Очень часто бывает необходимо собрать данные с нескольких листов одной книги или даже с листов нескольких книг. Например, каждую неделю мы получаем некие отчеты от отделов, которые необходимо собрать в одну общую таблицу для построения сводной таблицы. Или это могут быть некие книги прайсов по товарам от разных поставщиком, который опять же надо сначала объединить, а потом уже анализировать. Вручную делать это довольно муторно. И то, муторно это только для первых 20-ти листов/файлов, потом становится просто тошно. Поэтому решил поделиться решением, которое поможет собрать данные со всех листов книги, со всех листов всех указанных книг или только с указанных листов:
‘————————————————————————————— ‘ Module : mConsolidated ‘ DateTime : 02.02.2010 17:06 ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Purpose : http://www.excel-vba.ru/chto-umeet-excel/kak-sobrat-dannye-s-neskolkix-listov-ili-knig/ ‘ Процедура сбора данных с нескольки листов/книг ‘————————————————————————————— Option Explicit Sub Consolidated_Range_of_Books_and_Sheets() Dim iBeginRange As Range, rCopy As Range, lCalc As Long, lCol As Long Dim oAwb As String, sCopyAddress As String, sSheetName As String Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer Dim wsSh As Worksheet, wsDataSheet As Worksheet, bPolyBooks As Boolean, avFiles Dim wbAct As Workbook Dim bPasteValues As Boolean On Error Resume Next ‘Выбираем диапазон выборки с книг Set iBeginRange = Application.InputBox(«Выберите диапазон сбора данных.» & vbCrLf & _ «1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. » & _ vbCrLf & «2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.», Type:=8) ‘для указания диапазона без диалогового окна: ‘Set iBeginRange = Range(«A1:A10») ‘диапазон указывается нужный ‘Если диапазон не выбран — завершаем процедуру If iBeginRange Is Nothing Then Exit Sub ‘Указываем имя листа ‘Допустимо указывать в имени листа символы подставки ? и *. ‘Если указать только * то данные будут собираться со всех листов sSheetName = InputBox(«Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)», «Параметр») ‘Если имя листа не указано — данные будут собраны со вех листов If sSheetName = «» Then sSheetName = «*» On Error GoTo 0 ‘Запрос — вставлять на результирующий лист все данные ‘или только значения ячеек (без формул и форматов) bPasteValues = (MsgBox(«Вставлять только значения?», vbQuestion + vbYesNo, «Excel-VBA») = vbYes) ‘Запрос сбора данных с книг(если Нет — то сбор идет с активной книги) If MsgBox(«Собрать данные с нескольких книг?», vbInformation + vbYesNo, «Excel-VBA») = vbYes Then avFiles = Application.GetOpenFilename(«Excel files(*.xls*),*.xls*», , «Выбор файлов», , True) If VarType(avFiles) = vbBoolean Then Exit Sub bPolyBooks = True lCol = 1 Else avFiles = Array(ThisWorkbook.FullName) End If ‘отключаем обновление экрана, автопересчет формул и отслеживание событий ‘для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды With Application lCalc = .Calculation .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual End With ‘создаем новый лист в книге для сбора Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) ‘если нужно сделать сбор данных на новый лист книги с кодом ‘Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) ‘цикл по книгам For li = LBound(avFiles) To UBound(avFiles) If bPolyBooks Then Set wbAct = Workbooks.Open(Filename:=avFiles(li)) Else Set wbAct = ThisWorkbook End If oAwb = wbAct.Name ‘цикл по листам For Each wsSh In wbAct.Worksheets If wsSh.Name Like sSheetName Then ‘Если имя листа совпадает с именем листа, в который собираем данные ‘и сбор идет только с активной книги — то переходим к следующему листу If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_ With wsSh Select Case iBeginRange.Count Case 1 ‘собираем данные начиная с указанной ячейки и до конца данных lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row iLastColumn = .Cells.SpecialCells(xlLastCell).Column sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address Case Else ‘собираем данные с фиксированного диапазона sCopyAddress = iBeginRange.Address End Select lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1 ‘определяем для копирования диапазон только заполненных данных на листе Set rCopy = Intersect(.Range(sCopyAddress).Parent.UsedRange, .Range(sCopyAddress)) ‘вставляем имя книги, с которой собраны данные If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(rCopy.Rows.Count).Value = oAwb ‘если вставляем только значения и форматы ячеек If bPasteValues Then rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteFormats Else ‘если вставляем все данные ячеек(значения, формулы, форматы и т.д.) rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol) End If End With End If NEXT_: Next wsSh If bPolyBooks Then wbAct.Close False Next li With Application .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc End With End Sub
Приведенный выше код необходимо вставить в стандартный модуль(Что такое модуль? Какие бывают модули?). Выполнить его можно будет из этой книги нажатием клавиш Alt+F8. В появившемся окне выбрать Consolidated_Range_of_Books_and_Sheets и нажать Выполнить. Так же можно создать на листе кнопку и назначить ей данный макрос. Так же, если впервые работаете с макросами настоятельно рекомендую прочитать статью: Что такое макрос и где его искать?, а так же Почему не работает макрос?
После вызова макроса поочередно будут появляется запросы, в которых надо будет указать исходные параметры:
- Диапазон сбора данных — Если в окне выбора диапазона выбрать только одну ячейку, то данные будут собраны со всех листов книги/книг, начиная с этой ячейки и до последней ячейки листа.
Если выбрать несколько ячеек, данные будут собраны только с указанного диапазона всех листов книги/книг. Допускается указать несвязанный(рваный) диапазон(например, только три столбца: A:A , D:D , F:F ). Сделать это можно, выделив нужный диапазон с зажатой клавишей Ctrl - Имя листа — Необязателен для указания. Если не указан — данные будут собраны со всех листов. Указать можно как точное соответствие имени листа, так и с частичным соответствием. Например, если в книгах для сбора данных необходимо собрать данные только с листа «Январь», то следует так и указать — «Январь». Если требуется собрать данные только с листов, начинающихся с «Продажи»(«Продажи ЮГ», «Продажи НН», «Продажи Запад» и т.д.), то следует применить символ подстановки звездочку — «Продажи*». Если надо собрать с листов, содержащих в имени «продажи»(«Итоговые продажи ЮГ», «Продажи НН», «Сезонные продажи» и т.д.), то указываем «*продажи*». Если надо собрать только с листа «Сезонные продажи», но известно, что вместо пробела может быть нижнее подчеркивание или тире(«Сезонные продажи», «Сезонные_продажи», «Сезонные-продажи») или иной символ, то можно также применить звездочку — «Сезонные*продажи». Но если среди листов могут встречаться и такие как «Сезонные разовые продажи», «Сезонные корпоративные продажи» и т.п., но информацию с них собирать не надо, то можно применить вопросительный знак — «Сезонные?продажи». Вопросительный знак заменяет любой один символ, звездочка — любое количество любых символов.
- Далее появится запрос: Вставлять только значения? — если выбрать Да, то в результирующий лист с листов будут вставлены исключительно значения ячеек (без формул), но при этом сохранятся их форматы(формат чисел, цвет заливки, цвет шрифта, границы и т.п.). Может пригодится, если на листах для сбора записаны формулы, ссылающиеся на другие листы, книги, диапазоны. При обычном копировании может случиться так, что формула выдаст ошибку, т.к. в книге для вставки нет таких листов и диапазонов или данные расположены иначе. Если выбрать Нет, то все ячейки с листов на результирующий будут копироваться в точности как в исходных листах.
- И последний запрос: Собрать данные с нескольких книг? — если выбрать Да, то появится диалоговое окно выбора файлов. Надо указать все файлы, данные с которых необходимо собрать. Если выбрать Нет, то данные будут собираться с листов только активной книги.
Данные будут собраны на новый лист книги с макросом. Если данные собирались с нескольких книг, то в первый столбец будут занесены имена книг, с которых собраны данные.
Если после сбора данных обнаружили, что после каждого файла/листа много пустых строк, то следует найти в коде строку:
lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
Excel At Excel вып.3: Собираем данные с разных листов
Дано: 22 таблицы унифицированного формата с перечнем помещений от 22 дочерних предприятий.
Задача: сделать сводную таблицу с данными всех 22 таблиц
Итак, решение. Есть три варианта решения данной задачи. Первый — использовать встроенную (начиная с excel 2013) надстройку PowerPivot (об этом методе мы поговорим позднее). Второй — посредством сводной таблицы через несколько диапазонов консолидации. Не люблю этот метод, т.к. такая сводная таблица имеет существенно более ограниченный функционал по сравнению с простой сводной таблицей. Наконец, третий вариант — это создать общую таблицу с использованием функции INDIRECT (ДВССЫЛ). Этому методу и посвятим сегодня наш пост.
Что мы имеем? 22 одинаковых по формату таблицы на отдельных листах и с разным количеством строк в каждой. Соответственно, для построения общей таблицы нам надо решить следующие «проблемы»:
1) как заставить общую таблицу «переключаться» с одного листа данных на другой?;
2) как заставить ее делать это в нужный момент (когда закончились строки на одном листе)?
Начнем со второго вопроса, т.к. ответ на него мы уже знаем. Это циклы, о которых мы подробно говорили в выпуске 2 «Циклы в Excel без VBA». Для решения проблемы достаточно в наш файл добавить лист с перечнем всех обществ, соответствующими названиями листов и количеством подсчетом количества строк на каждом таком листе.
Обратите внимание на формулу в столбце Кол-во записей. Мы могли бы использовать просто COUNTA (СЧЁТА) со ссылкой на каждый лист. Но это потребует времени для «линковки» каждого листа. Плюс мы с вами готовим универсальные решения, которые будут работать в независимости от количества листов.
Именно для этого в функцию COUNTA (СЧЁТА) и внедряется эта чуднАя функция INDIRECT (ДВССЫЛ). Остановимся на ней подробнее.
Функция имеет, по сути, единственный параметр — ref_text (ссылка_на_текст). Что делает эта функция? Всего-навсего преобразует текст в ссылку на ячейку. То есть она преобразует текст, например, «А1» в ссылку и возвращает значение ячейки А1.
Соответственно, зная несложные правила работы с текстом в Excel, мы можем легко сделать текст внутри изменяемым, а значит можем сделать и изменяемыми ссылки, которые будет возвращать функция INDIRECT (ДВССЫЛ).
Разберем пример выше. Функция INDIRECT (ДВССЫЛ) имеет следующий вид:
Чтобы понять, что означает текст внутри нее, давайте вспомним, как выглядит в Excel ссылка на ячейку на другом листе. Вот так:
Соответственно, в нашем случае у нас неизменен столбец B:B, а вот название листа меняется. Для «автоматизации» формулы заменяем Название листа на ссылку на название листа с данными по соответствующему обществу (столбец Название листа). Получаем следующее:
где все, что подчеркнуто — текст, а выделено жирным — ссылки.
ВАЖНО! Обратите внимание на кавычки и конкатенацию («склеивание») при помощи амперсента. Не забудьте, что текст вносится в кавычках и соединяется со ссылками при помощи символа &.
Получается, что INDIRECT (ДВССЫЛ) получает название листа из ячеек в столбце А:А (Название листа), а диапазон у нас прописан фиксированно текстом (В:В). COUNTA (СЧЁТА) же просто считает количество строк в столбце В:В на соответствующем листа за вычетом заголовка.
Перейдем к формированию общей таблицы. Как вы уже наверное прикинули, у нас будет два вложенных цикла: один — количество обществ, второй — количество записей на листе данных по соответствующему обществу. Соответственно, нам потребуются два вспомогательных столбца (определим их в столбцы А и В). Ровно так же, как мы делали на примере в выпуске 2 «Циклы в Excel без VBA», пишем формулу первого цикла:
=IF(A2=»»;»»;IF(COUNTIF($A$2:A2;A2)=OFFSET(‘Список обществ’!$E$2;A2-1;0);IF(A2+1>COUNTA(‘Список обществ’!A:A)-1;»»;A2+1);A2))
Затем пишем формулу второго цикла:
Далее при помощи уже знакомой нам функции OFFSET (СМЕЩ) заполняем столбцы из таблицы на листе Список обществ.
Осталось подтянуть данные с 22 листов по обществам. Тут нам опять поможет OFFSET (СМЕЩ), но уже в паре с INDIRECT (ДВССЫЛ).
OFFSET (СМЕЩ) передает в формулу название листа, а конструкция B2+1 — номер строки в столбце Е на том листе.
ВАЖНО! Обратите внимание, что OFFSET (СМЕЩ) вкладывается внутрь INDIRECT (ДВССЫЛ), а не наоборот.
Выборка из нескольких книг в одну |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
- Remove From My Forums
-
Вопрос
-
Подскажите, пожалуйста, как можно собрать данные из нескольких книг в одну общую?
Задача такая: есть 10 книг, в каждой постоянно увеличивающееся число строк, при открытии общей книги нужно, чтобы в одну таблицу последовательно попадали данные из 10 книг.
Пример: содержание книг
Книга1:
Фамилия должность
Иванов повар
Петров повар
Книга2:
Фамилия должность
Сидоров электрик
Цветков электрик
Общая книга:
Фамилия должность
Иванов повар
Петров повар
Сидоров электрик
Цветков электрик
Ответы
-
Тогда проще в файле получателе создать макрос, который (или автоматически при открытии или по требованию пользоватля) просматривал все файлы источники и загружал из них данные. К сожалению нет врмени, чтобы сделать вам примерчик. Сорри
-
Помечено в качестве ответа
23 апреля 2009 г. 9:20
-
Помечено в качестве ответа
Этот макрос предназначен для сбора (загрузки) информации из файлов Excel, расположенных в одной папке.
Для работы этого макроса, помимо него самого, вам понадобится добавить в свой файл:
- функцию FilenamesCollection для получения списка файлов в папке
- функцию GetFolder для вывода диалогового окна выбора папки с запоминанием выбранной папки
- прогресс-бар для отображения процесса обработки файлов (модуль класса и форму)
Если при тестировании макроса у вас возникает ошибка, что не найдена та или иная функция,
— проверьте, все ли необходимые компоненты (которые перечислены выше) вы добавили в свой файл.
Этот макрос я публикую прежде всего для себя (поскольку использую этот код чуть ли ни в каждой третьей своей программе),
поэтому я не буду помогать вам в настройке этого макроса, если у вас он вдруг не заработает.
Макрос при запуске выдает диалоговое окно для выбора папки, в которой расположены обрабатываемые файлы,
после чего открывает каждый из файлов, считывает из него данные, помещает их в текущую книгу (из которой запущен макрос),
и закрывает обработанный файл без сохранения изменений.
После того, как очередной файл обработан, он перемещается во вторую папку («архив»).
Код макроса:
Sub ИмпортДанныхИзЗаявок() On Error Resume Next: Err.Clear ' запрашиваем пути к папкам с файлами InvoiceFolder$ = GetFolder(1, , "Выберите папку с файлами заявок (из Outlook)") If InvoiceFolder$ = "" Then MsgBox "Не задана папка с заявками", vbCritical, "Обработка заявок невозможна": Exit Sub ArchieveFolder$ = GetFolder(2, , "Выберите папку, куда будут помещаться обработанные файлы заявок") If ArchieveFolder$ = "" Then MsgBox "Не задана папка для архива заявок", vbCritical, "Обработка заявок невозможна": Exit Sub Dim coll As Collection ' загружаем список файлов по маске имени файла Set coll = FilenamesCollection(InvoiceFolder$, "Заявка №*от*.xls*", 1) If coll.Count = 0 Then MsgBox "Не найдено ни одной заявки для обработки в папке" & vbNewLine & InvoiceFolder$, _ vbExclamation, "Нет необработанных заявок" Exit Sub End If Dim pi As New ProgressIndicator: pi.Show "Обработка заявок", , 2 pi.StartNewAction , , , , , coll.Count ' отображаем прогресс-бар Dim WB As Workbook, sh As Worksheet, ra As Range Application.ScreenUpdating = False ' отключаем обновление экрана (чтобы процесс открытия файлов не был виден) ' перебираем все найденные в папке файлы For Each Filename In coll ' обновляем информацию на прогресс-баре pi.SubAction "Обрабатывается заявка $index из $count", "Файл заявки: " & Dir(Filename), "$time" pi.Log "Файл: " & Dir(Filename) ' открываем очередной файл в режиме «только чтение» Set WB = Nothing: Set WB = Workbooks.Open(Filename, False, True) If WB Is Nothing Then ' не удалось открыть файл pi.Log vbTab & "ОШИБКА при загрузке файла. Файл не обработан." Else ' файл успешно открыт Set sh = WB.Worksheets(1) ' будем брать данные с первого листа ' берем диапазон ячеек с ячейки B1 до последней заполненной в столбце B Set ra = sh.Range(sh.Range("b1"), sh.Range("b" & sh.Rows.Count).End(xlUp)) ' ==== переносим данные в наш файл (shb - кодовое имя листа, куда помещаем данные) shb.Range("a" & shb.Rows.Count).End(xlUp).Offset(1).Resize(, ra.Rows.Count).Value = _ Application.WorksheetFunction.Transpose(ra.Value) ' ==== конец обработки данных из очередного файла WB.Close False: DoEvents ' закрываем обработанный файл без сохранения изменений pi.Log vbTab & "Файл успешно обработан." ' перемещаем обработанный файл из папки InvoiceFolder$ в папку ArchieveFolder$ Name Filename As ArchieveFolder$ & Dir(Filename, vbNormal) End If Next ' закрываем прогресс-бар, включаем обновление экрана pi.Hide: DoEvents: Application.ScreenUpdating = True MsgBox "Обработка заявок завершена", vbInformation End Sub
Во вложении — файл со всеми необходимыми макросами для сбора данных из других файлов Excel