Типичная задача - имеем несколько однотипных таблиц на разных листах рабочей книги. Хотим, чтобы при внесении данных в любую из этих таблиц - данные добавлялись в одну общую таблицу, расположенную на отдельном листе.
Устанавливаем себе надстройку ЁXCEL. Читаем справку.
Приступаем к решению. Переходим во вкладку ЁXCEL главного меню, нажимаем кнопку "Таблицы", в выпавшем списке выбираем команду "Объединить таблицы":
В открывшемся диалоговом окне выделяем листы с таблицами, которые необходимо объединить и нажимаем "ОК":
Программа сформирует запрос - объединит таблицы и выведет информационное сообщение:
Переходим на итоговый лист (тот где хотим вывести общую таблицу), устанавливаем курсор в ячейку "A1". Переходим в главном меню во вкладку "Данные" в разделе "Получение внешних данных" нажимаем кнопку "Существующие подключения":
В открывшемся диалоговом окне выбираем "Подключения в этой книге" - "Запрос из Excel Files" и нажимаем "Открыть":
В открывшемся диалоговом окне устанавливаем переключатели в положения "Таблица" и "Имеющийся лист", нажимаем "ОК":
В активном листе будет создана таблица, которая будет объединять таблицы, расположенные на указанных нами листах:
Теперь все таблицы связаны. Добавьте новые строчки в любую из объединенных таблиц. Перейдите во вкладку "Данные" и нажмите кнопку "Обновить все":
В итоговой таблице появятся строчки, добавленные в выбранный вами лист.
Чтобы обновление итоговой таблицы происходило автоматически вставьте в модуль каждого листа (кроме Итогового) следующий код (Как вставлять макросы?):
Private Sub Worksheet_Change(ByVal Target As Range) ActiveWorkbook.RefreshAll End Sub
Важно:
- Количество столбцов во всех таблицах должно быть одинаково;
- Кроме таблиц на листах не должно быть никакой информации;
- Если вы переместили файл в другую папку или отправили файл коллеге по электронной почте - необходимо заново связать таблицы (в запросе прописывается абсолютный путь к файлу).
Чтобы запрос работал не зависимо от того в какой папке лежит файл вставьте в модуль "ЭтаКнига" следующий код:
Private Sub Workbook_Open() Dim q As String On Error Resume Next q = Application.ThisWorkbook.Path & "\" & Application.ThisWorkbook.Name 'Определяем текущий путь к файлу With ActiveWorkbook.Connections("Запрос из Excel Files").ODBCConnection 'Имя запроса .Connection = "ODBC;DSN=Excel Files;DBQ=" & q & _ ";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;" 'Меняем строку подключения End With End Sub
Данный макрос при открытии книги будет определять текущий путь к файлу и менять путь к файлу в запросе.
Чтобы оценить всю прелесть - выньте файл из архива и при загрузке файла включите макросы.
Возможные ошибки при использовании этого метода:
- В таблицах одинаковое количество столбцов, но при попытке использовать запрос получаем сообщение: "В таблицах или запросах, выбранных в запросе на объединение, не совпадает число столбцов." Причина: в одном или нескольких листах с таблицами есть пустые столбцы (в них раньше были данные) и MS Excel считает их столбцами таблиц. Решение: Выделить и удалить все пустые столбцы на листах с таблицами.
- Все столбцы удалили, но ошибка осталась. Причина: файл сохранен на сетевом диске или открыт из почтовой программы. Решение: сохраните файл у себя на локальном компьютере, выполните запрос, вставьте в него макрос меняющий путь в запросе и выложите обратно в сеть (если нужно).
- В полученном запросе в некоторых ячейках пропадают данные. Причина: в ваших таблицах встречаются столбцы, которые одновременно содержатся и числовые и текстовые значения. MS Excel считает, что эти столбцы должны содержать только числа и не выводит текст. Решение: преобразуйте все числовые значения в этих столбцах во всех таблицах в текстовые. Обновите запрос - текстовые данные появятся.
Комментарии
Благодарю
Подскажите, пожалуйста, как можно свести около 20 таблиц в одну, если при этом в шапках у всех этих таблиц не всегда совпадает количество столбцов? Спасибо.
У меня 54 листа с данными, при объединении выходит ошибка "Слишком сложный запрос". По частям на одном листе не получается "Внутренняя ошибка программировани я объектов".
Если не совсем понятно киньте мне пример на почту. Почта тут: https://e-xcel.ru/index.php/kontakty
Начиная с 16-й колонки у меня расчетные данные, которые не нужно сливать.
Это возможно?
два вопроса.
1. Как выключить фильтр при обновлении?он мешает.
2. Как сделать между вставляемыми таблицами строку с заголовком блока или хотя бы пустую строку?
А какая почта?
имеются две таблицы в разных файлах (или на разных листах) . Необходимо слить в одну обе эти табл. В обеих табл есть уникальный код по которому их можно сцепить. Но проблема, что в одной из таблиц таких одинаковых кодов может быть несколько и надо, чтобы при объединении таблиц например в таблицу с одни кодом подтянулись несколько аналогичных кодов со второй таблицей не суммируя их, а просто путем добавления строк вниз.
На какой адрес могу выслать файл?
В дополнение к предыдущему вопросу хочется присовокупить ещё один-возможно ли объединение таблиц из разных книг (несколько филиалов заполняют одинаковые таблицы с несколькими листами)? Которые впоследствии необходимо объединить в одну таблицу.
и "перетащить" все листы в одну книгу.