На чтение 7 мин. Просмотров 2.9k.
Итог: узнайте несколько способов, как показать несколько листов одновременно с помощью макроса VBA или надстройки.
Уровень мастерства: Средний
Содержание
- Не удается отобразить несколько листов в Excel?
- # 1 — Используйте окно VBA Immediate, чтобы отобразить все
- # 2 — Использование макроса для отображения нескольких листов
- Показать листы, которые содержат определенное имя
- # 3 — Используйте Tab Hound или Tab Control
- Публикация отчетов? Управление вкладками сэкономит ваше время
- Заключение
Не удается отобразить несколько листов в Excel?
Как вы, вероятно, знаете, вы не можете отобразить два или
более листов одновременно в Excel. Меню «Показать» позволяет выбрать только
один лист за раз.
Это может сделать процесс показа нескольких листов очень
трудоемким, особенно если вы хотите отобразить все листы в рабочей книге.
Поэтому в этой статье мы рассмотрим несколько разных способов быстрого
отображения листов.
Самый быстрый способ сделать все листы видимыми в Excel — это использовать макрос (VBA). В следующей строке кода VBA цикл For Next Loop используется для циклического просмотра каждого листа в активной книге и отображения каждого листа.
For Each ws In Sheets:ws.Visible=True:Next
Вы можете
запустить этот код в непосредственном окне редактора VB в три простых шага:
- Alt + F11 (открывает окно редактора VB)
- Ctrl + G (открывает немедленное окно)
- Вставьте следующую строку кода в Immediate Window и нажмите Enter
For Each ws In Sheets:ws.Visible=True:Next
Скриншот ниже показывает, как реализовать эти шаги.
Эта строка кода проходит по всем рабочим листам в рабочей книге и устанавливает для каждого видимого свойства листа значение «True». Это делает каждый лист видимым, что аналогично отображению каждого листа.
Символ двоеточия «:», используемый в коде, позволяет объединить несколько строк кода в одну строку. Это позволяет запускать в «Немедленном окне», потому что «Немедленное окно» оценивает только одну строку кода за раз.
Ознакомьтесь с моей статьей о 5 способах использования окна VBA Immediate, чтобы узнать больше. И большое спасибо Jan Karel Pieterse из www.jkp-ads.com за то, что поделились этим трюком в разделе комментариев.
# 2 — Использование макроса для отображения нескольких листов
Если вы ломаете голову над этой строкой кода в # 1, этот раздел должен помочь объяснить это лучше.
Макрос ниже — это та же самая строка кода, но она разбита на несколько строк. Это значительно облегчает чтение и понимание.
Sub Unhide_Multiple_Sheets() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Visible = xlSheetVisible Next ws End Sub
Строки в приведенном выше коде, начинающиеся с «For» и «Next», представляют оператор цикла For-Next. Первая строка «For Each ws In ActiveWorkbook.Worksheets» указывает макросу циклически проходить по каждому листу в коллекции рабочих листов.
Эта строка также ссылается на переменную «ws» и устанавливает ее для представления объекта рабочего листа. Это означает, что «ws» временно представляет текущий рабочий лист в цикле.
Когда вводится строка кода «Next ws», макрос переходит обратно к первой строке кода в цикле и снова оценивает ее. Он продолжает циклически перебирать все листы в коллекции рабочих листов (Activeworkbook.Worksheets).
Затем мы можем использовать «ws» внутри цикла, чтобы изменить свойства текущего рабочего листа. В этом случае мы устанавливаем свойство «Видимый» листа, чтобы оно было видимым (xlSheetVisible). Свойство visible имеет три различных свойства на выбор:
xlSheetHidden
xlSheetVeryHidden
xlSheetVisible
Вы также можете установить для свойства значение «True», которое работает так же, как xlSheetVisible.
Вот документация по VBA Visible property от Microsoft. И ознакомьтесь с моей статьей the For Next Loop для подробного объяснения того, как это работает.
Показать листы, которые содержат определенное имя
Что, если мы хотим только показать листы, которые содержат слово «pivot» в названии листа?
Мы можем добавить простую инструкцию IF в макрос только для отображения листов, которые содержат определенное имя или текст.
Sub Unhide_Sheets_Containing() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets If InStr(ws.Name, "pivot") > 0 Then ws.Visible = xlSheetVisible End If Next ws End Sub
Функция InStr ищет текст в
строке и возвращает позицию первого вхождения текста. Это сокращение от
InString, и функция аналогична функциям ПОИСК или НАЙТИ в Excel.
Таким образом, в этом
случае мы ищем любой лист, который содержит слово «pivot» в названии листа.
Ссылка «ws.name» возвращает имя листа, который в данный момент оценивается в
цикле For-Next.
Таким образом, эта строка
«Если InStr (ws.Name,« pivot »)> 0 Тогда» в основном говорит, что если в
имени листа найдено слово «pivot», то функция Instr вернет число больше нуля.
Оператор IF будет иметь значение True, и будет выполнена следующая строка кода,
чтобы отобразить лист.
Если слово «pivot» НЕ найдено в имени листа, тогда оператор IF будет иметь значение «False», а код пропустит все строки, пока не достигнет строки «End If». Поэтому лист, который в данный момент оценивается в цикле, сохранит свое текущее свойство visible (видимое или скрытое).
Этот макрос отлично работает, если вы скрываете и скрываете листы каждый день / неделю / месяц для сохраняемого вами отчета. Запустите макрос, чтобы отобразить определенные листы при открытии книги. После того, как вы закончите, запустите тот же код, но измените свойство visible на xlSheetHidden, чтобы заново скрыть листы (для этого вы можете создать новый макрос).
# 3 — Используйте Tab Hound или Tab Control
Если весь этот код заставляет вас вращаться, надстройка Tab Hound позволяет отображать несколько листов одним нажатием кнопки просмотра.
Скриншот ниже показывает, насколько это просто.
В окне Tab Hound
содержится список всех листов рабочей книги. Вы можете выбрать несколько листов
в списке, а затем нажать кнопку «Показать», чтобы отобразить все выбранные
листы.
Это делает процесс показа
нескольких листов действительно быстрым!
Вкладка Hound также содержит дополнительные способы фильтрации списка листов. Вы можете ввести поиск в поле поиска, отфильтровать все видимые или скрытые вкладки и даже отфильтровать по цвету вкладок. Это позволяет легко находить листы, которые вы ищете, а затем выполнять над ними такие действия, как скрытие / скрытие.
В этом видео также показано, как быстро скрыть и показать несколько листов с помощью Tab Hound
Нажмите здесь, чтобы узнать больше о Tab Hound
Публикация отчетов? Управление вкладками сэкономит ваше время
Если вы создаете
еженедельные или ежемесячные отчеты и хотите убедиться, что все нужные листы
спрятаны перед отправкой, надстройка Tab Control может сэкономить вам много
времени.
Вот сценарий, с которым мы обычно сталкиваемся …
Нам необходимо обновить рабочую книгу новыми данными на этой неделе и внести некоторые изменения, прежде чем отправлять ее по электронной почте. Эти обновления требуют от нас показать несколько листов, внести изменения, а затем снова скрыть листы. Это может занять много времени, если вам нужно скрыть / показать много листов.
Вкладка «Управление» установит контрольный лист в вашей рабочей книге со списком всех имен рабочих листов. Вы можете установить видимое свойство для каждого листа в списке, а затем нажать кнопку, чтобы скрыть или показать все листы на основе списка.
Это означает, что вы можете настроить контрольный лист для определенного вида, чтобы были видны только определенные рабочие листы. Нажмите кнопку «Запустить обновление», и все листы будут скрыты / скрыты на основе вашего контрольного листа. Это гарантирует, что ваш отчет будет показывать правильные листы каждый раз, когда вы отправляете его, и вы будете выглядеть действительно организованно.
Надстройка Tab Control
входит в состав Tab Hound.
Нажмите здесь, чтобы узнать больше о Tab Hound
Заключение
Для одновременного
отображения нескольких листов в Excel потребуется код или макрос. Есть еще один
способ использования пользовательских представлений, но он имеет ограничения,
если вы используете таблицы Excel (а я люблю таблицы).
Надеюсь, вы узнали некоторый код VBA, который вы можете реализовать. Вы также можете добавить макросы в личную книгу макросов, чтобы запускать их в любое время.
Если кодирование не ваша вещь, оцените надстройку Tab Hound. Это сэкономит ваше время и сделает вашу жизнь намного проще. (беспроигрышный вариант!)
Разделение таблицы по листам
В Microsoft Excel есть много инструментов для сборки данных из нескольких таблиц (с разных листов или из разных файлов): прямые ссылки, функция ДВССЫЛ (INDIRECT), надстройки Power Query и Power Pivot и т.д. С этой стороны баррикад всё выглядит неплохо.
Но если вы нарвётесь на обратную задачу — разнесения данных из одной таблицы на разные листы — то всё будет гораздо печальнее. На сегодняшний момент цивилизованных встроенных инструментов для такого разделения данных в арсенале Excel, к сожалению, нет. Так что придется задействовать макрос на Visual Basic, либо воспольоваться связкой макрорекордер+Power Query с небольшой «доработкой напильником» после.
Давайте подробно рассмотрим, как это можно реализовать.
Постановка задачи
Имеем в качестве исходных данных вот такую таблицу размером больше 5000 строк по продажам:
Задача: разнести данные из этой таблицы по городам на отдельные листы этой книги. Т.е. на выходе нужно получить на каждом листе только те строки из таблицы, где продажа была в соответствующем городе:
Подготовка
Чтобы не усложнять код макроса и сделать его максимально простым для понимания, выполним пару подготовительных действий.
Во-первых, создадим отдельную таблицу-справочник, где в единственном столбце будут перечислены все города, для которых нужно создать отдельные листы. Само-собой, в этом справочнике могут быть не все города, присутствующие в исходных данных, а только те, по которым нам нужны отчеты. Проще всего создать такую таблицу, используя команду Данные — Удалить дубликаты (Data — Remove duplicates) для копии столбца Город или функцию УНИК (UNIQUE) — если у вас последняя версия Excel 365.
Поскольку новые листы в Excel по умолчанию создаются перед (левее) текущего (предыдущего), то имеет смысл также отсортировать города в этом справочнике по убыванию (от Я до А) — тогда после создания листы-города расположатся по алфавиту.
Во-вторых, преобразуем обе таблицы в динамические («умные»), чтобы с ними было проще работать. Используем команду Главная — Форматировать как таблицу (Home — Format as Table) или сочетание клавиш Ctrl+T. На появившейся вкладке Конструктор (Design) назовём их таблПродажи и таблГорода, соответственно:
Способ 1. Макрос для деления по листам
На вкладке Разработчик (Developer) нажмите на кнопку Visual Basic или используйте сочетание клавиш Alt+F11. В открывшемся окне редактора макросов вставьте новый пустой модуль через меню Insert — Module и скопируйте туда следующий код:
Sub Splitter() For Each cell In Range("таблГорода") Range("таблПродажи").AutoFilter Field:=3, Criteria1:=cell.Value Range("таблПродажи[#All]").SpecialCells(xlCellTypeVisible).Copy Sheets.Add ActiveSheet.Paste ActiveSheet.Name = cell.Value ActiveSheet.UsedRange.Columns.AutoFit Next cell Worksheets("Данные").ShowAllData End Sub
Здесь с помощью цикла For Each … Next реализован проход по ячейкам справочника таблГорода, где для каждого города происходит его фильтрация (метод AutoFilter) в исходной таблице продаж и затем копирование результатов на новый созданный лист. Попутно созданный лист переименовывается в то же имя города и на нем включается автоподбор ширины столбцов для красоты.
Запустить созданный макрос в Excel можно на вкладке Разработчик кнопкой Макросы (Developer — Macros) или сочетанием клавиш Alt+F8.
Способ 2. Создаем множественные запросы в Power Query
У предыдущего способа, при всей его компактности и простоте, есть существенный недостаток — созданные макросом листы не обновляются при изменениях в исходной таблице продаж. Если обновление «на лету» необходимо, то придется использовать связку VBA+Power Query, а точнее — создавать с помощью макроса не просто листы со статическими данными, а обновляемые запросы Power Query.
Макрос в этом случае частично похож на предыдущий (в нём тоже есть цикл For Each … Next для перебора городов в справочнике), но внутри цикла будет уже не фильтрация и копирование, а создание запроса Power Query и выгрузка его результатов на новый лист:
Sub Splitter2() For Each cell In Range("таблГорода") ActiveWorkbook.Queries.Add Name:=cell.Value, Formula:= _ "let" & Chr(13) & "" & Chr(10) & " Источник = Excel.CurrentWorkbook(){[Name=""таблПродажи""]}[Content]," & Chr(13) & "" & Chr(10) & " #""Измененный тип"" = Table.TransformColumnTypes(Источник,{{""Категория"", type text}, {""Наименование"", type text}, {""Город"", type text}, {""Менеджер"", type text}, {""Дата сделки"", type datetime}, {""Стоимость"", type number}})," & Chr(13) & "" & Chr(10) & " #""Строки с примененным фильтром"" = Table.Se" & _ "lectRows(#""Измененный тип"", each ([Город] = """ & cell.Value & """))" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Строки с примененным фильтром""" ActiveWorkbook.Worksheets.Add With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _ "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & cell.Value & ";Extended Properties=""""" _ , Destination:=Range("$A$1")).QueryTable .CommandType = xlCmdSql .CommandText = Array("SELECT * FROM [" & cell.Value & "]") .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = cell.Value .Refresh BackgroundQuery:=False End With ActiveSheet.Name = cell.Value Next cell End Sub
После его запуска мы увидим те же листы по городам, но формировать их будут уже созданные запросы Power Query:
При любых изменениях в исходных данных достаточно будет обновить соответствующую таблицу правой кнопкой мыши — команда Обновить (Refresh) или обновить сразу все города оптом, используя кнопку Обновить всё на вкладке Данные (Data — Refresh All).
Ссылки по теме
- Что такое макросы, как их создавать и использовать
- Сохранение листов книги как отдельных файлов
- Сборка данных со всех листов книги в одну таблицу
Сохранение нескольких листов в Excel
Добрый день, уважаемые читатели и подписчики блога. Сегодня мы поговорим о сохранении листов большой книги Excel. Материал о расчётах между листами и книгами в Excel.
Как обычно, способов несколько.
Способ №1 (стандартный)
Щёлкаем правой кнопкой мышки на имя листа.
Выбираем команду «Переместить или скопировать».
В поле «Переместить выбранные листы в книгу:» выбираем «Новая книга».
После нажатия «ОК» произойдёт создание новой книги и выгрузка туда выделенного листа. Останется только сохранить документ.
Если нужно сохранить два и более листов их нужно выделить. Зажав клавишу Ctrl щёлкнуть на имя листа, затем повторить все вышеописанные действия.
Способ № 2 (макрос)
Представим ситуацию когда нужно одну большую книгу разделить на отдельные файлы. Сохранить требуется только выделенные листы.
Добавим новый модуль в нашу книгу:
- На вкладке «Разработчик» нажимаем Visual Basic;
- далее Insert — > Module;
- записываем макрос.
Sub SohrList()
Dim CurrentWin As Window
Dim VremWin As Window
Set CurrentWin = ActiveWindow
Set VremWin = ActiveWorkbook.NewWindow
CurrentWin.SelectedSheets.Copy
VremWin.Close
End Sub
В итоге выделенные листы перейдут в новую книгу. Останется только её сохранить.
Если же необходимо разделить одну книгу на отдельные файлы и назвать их по именам листов, воспользуемся вот этим макросом.
Sub razbkn()
Dim q As Worksheet
Dim rabkn As Workbook
Set rabkn = ActiveWorkbook
For Each q In rabkniga.Worksheets
q.Copy
ActiveWorkbook.SaveAs rabkn.Path & «» & q.Name & «.xlsx»
End Sub
Немного пояснений. Этот макрос лучше использовать в том случае, когда книга уже находится в отдельной папке. Все извлечённые из неё литы будут сохранены в той же папке, что и документ родитель. Не стоит использовать макрос для вновь созданной, но ещё не сохранённой книги — программа будет просто вылетать.
Если знаете ещё способы — делитесь ими в комментариях, буду рад научиться чему-нибудь новому! Всем удачи!
Создание, копирование, перемещение и удаление рабочих листов Excel с помощью кода VBA. Методы Sheets.Add, Worksheet.Copy, Worksheet.Move и Worksheet.Delete.
Создание новых листов
Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.
Синтаксис метода Sheets.Add
expression.Add [Before, After, Count, Type]
где expression — переменная, представляющая собой объект Sheet.
Компоненты метода Sheets.Add
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
- Count — необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию — 1).
- Type — необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию — xlWorksheet.
*Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.
**Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.
Примеры создания листов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
‘Создание рабочего листа: Sheets.Add Worksheets.Add ThisWorkbook.Sheets.Add After:=ActiveSheet, Count:=2 Workbooks(«Книга1.xlsm»).Sheets.Add After:=Лист1 Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(1) Workbooks(«Книга1.xlsm»).Sheets.Add After:=Worksheets(«Лист1») ‘Создание нового листа с заданным именем: Workbooks(«Книга1.xlsm»).Sheets.Add.Name = «Мой новый лист» ‘Создание диаграммы: Sheets.Add Type:=xlChart ‘Добавление нового листа перед ‘последним листом рабочей книги Sheets.Add Before:=Sheets(Sheets.Count) ‘Добавление нового листа в конец Sheets.Add After:=Sheets(Sheets.Count) |
- Лист1 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
- Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.
Создаваемый лист можно присвоить объектной переменной:
Dim myList As Object ‘В активной книге Set myList = Worksheets.Add ‘В книге «Книга1.xlsm» Set myList = Workbooks(«Книга1.xlsm»).Worksheets.Add ‘Работаем с переменной myList.Name = «Listok1» myList.Cells(1, 1) = myList.Name ‘Очищаем переменную Set myList = Nothing |
Если создаваемый лист присваивается объектной переменной, он будет помещен перед активным листом. Указать дополнительные параметры невозможно.
Копирование листов
Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.
Синтаксис метода Worksheet.Copy
expression.Copy [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Copy
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.
*Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.
Примеры копирования листов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
‘В пределах активной книги ‘(уникальные имена листов) Лист1.Copy After:=Лист2 ‘В пределах активной книги ‘(имена листов на ярлычках) Worksheets(«Лист1»).Copy Before:=Worksheets(«Лист2») ‘Вставить копию в конец Лист1.Copy After:=Sheets(Sheets.Count) ‘Из одной книги в другую Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Copy _ After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1») ‘Один лист активной книги в новую книгу Лист1.Copy ‘Несколько листов активной книги в новую книгу* Sheets(Array(«Лист1», «Лист2», «Лист3»)).Copy ‘Все листы книги с кодом в новую книгу ThisWorkbook.Worksheets.Copy |
* Если при копировании в новую книгу нескольких листов хотя бы один лист содержит умную таблицу — копирование невозможно. Один лист, содержащий умную таблицу, копируется в новую книгу без проблем.
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листов
Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.
Синтаксис метода Worksheet.Move
expression.Move [Before, After]
где expression — переменная, представляющая собой объект Worksheet.
Компоненты метода Worksheet.Move
- Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
- After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.
*Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.
Примеры перемещения листов
Простые примеры перемещения листов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
‘В пределах активной книги ‘(уникальные имена листов) Лист1.Move After:=Лист2 ‘В пределах активной книги ‘(имена листов на ярлычках) Worksheets(«Лист1»).Move Before:=Worksheets(«Лист2») ‘Размещение после последнего листа: Лист1.Move After:=Sheets(Sheets.Count) ‘Из одной книги в другую Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Move _ After:=Workbooks(«Книга2.xlsm»).Worksheets(«Лист1») ‘В новую книгу Лист1.Move |
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:
Sub Peremeshcheniye() Dim x x = InputBox(«Введите имя или номер листа», «Перемещение листа «Лист4»») If IsNumeric(x) Then x = CLng(x) Sheets(«Лист4»).Move Before:=Sheets(x) End Sub |
Удаление листов
Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete
Синтаксис метода Worksheet.Delete
expression.Delete
где expression — переменная, представляющая собой объект Worksheet.
Примеры удаления листов
‘По уникальному имени Лист1.Delete ‘По имени на ярлычке Worksheets(«Лист1»).Delete ‘По индексу листа Worksheets(1).Delete ‘В другой книге Workbooks(«Книга1.xlsm»).Worksheets(«Лист1»).Delete |
Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.
Как обратиться к рабочему листу, переименовать, скрыть или отобразить его с помощью кода VBA Excel, смотрите в этой статье.
Skip to content
В статье рассматриваются различные способы объединения листов в Excel в зависимости от того, какой результат вы хотите получить:
- объединить все данные с выбранных листов,
- объединить несколько листов с различным порядком столбцов,
- объединить определённые столбцы с нескольких листов,
- объединить две таблицы Excel в одну по ключевым столбцам.
Сегодня мы займемся проблемой, с которой ежедневно сталкиваются многие пользователи Excel, — как объединить листы Excel в один без использования операций копирования и вставки. Рассмотрим два наиболее распространенных сценария: объединение числовых данных (сумма, количество, среднее и т. д.) и объединение листов ( то есть копирование данных из нескольких листов в один).
Вот что мы рассмотрим в этой статье:
- Объединение при помощи стандартного инструмента консолидации.
- Как копировать несколько листов Excel в один.
- Как объединить листы с различным порядком столбцов.
- Объединение только определённых столбцов из нескольких листов
- Слияние листов в Excel с использованием VBA
- Как объединить два листа в один по ключевым столбцам
Консолидация данных из нескольких листов на одном.
Самый быстрый способ консолидировать данные в Excel (в одной или нескольких книгах) — использовать встроенную функцию Excel Консолидация.
Рассмотрим следующий пример. Предположим, у вас есть несколько отчетов из региональных офисов вашей компании, и вы хотите объединить эти цифры в основной рабочий лист, чтобы у вас был один сводный отчет с итогами продаж по всем товарам.
Как вы видите на скриншоте ниже, четыре объединяемых листа имеют схожую структуру данных, но разное количество строк и столбцов:
Чтобы объединить всю эту информацию на одном листе, выполните следующие действия:
- Правильно расположите исходные данные. Чтобы функция консолидации Excel работала правильно, убедитесь, что:
- Каждый диапазон (набор данных), который вы хотите объединить, находится на отдельном листе. Не помещайте данные на лист, куда вы планируете выводить консолидированные данные.
- Каждый лист имеет одинаковый макет, и каждый столбец имеет заголовок и содержит похожие данные.
- Ни в одном списке нет пустых строк или столбцов.
- Запустите инструмент «Консолидация». На новом листе, где вы планируете поместить результаты, щелкните верхнюю левую ячейку, начиная с которой должны отображаться консолидированные данные, затем на ленте перейдите на вкладку «Данные» и нажмите кнопку «Консолидация».
Совет. Желательно объединить данные в пустой лист. Если на вашем основном листе уже есть данные, убедитесь, что имеется достаточно места (пустые строки и столбцы) для записи результатов.
- Настройте параметры консолидации. Появляется диалоговое окно «Консолидация», и вы делаете следующее:
- В поле «Функция» выберите одну из функций, которую вы хотите использовать для консолидации данных (количество, среднее, максимальное, минимальное и т. д.). В этом примере мы выбираем Сумма.
- В справочном окне, нажав в поле Ссылка на значок , выберите диапазон на первом листе. Затем нажмите кнопку «Добавить», чтобы присоединить его к списку диапазонов. Повторите этот шаг для всех листов, которые вы хотите объединить.
Если один или несколько листов находятся в другой книге, используйте кнопку «Обзор», чтобы найти эту книгу и использовать ее.
- Настройте параметры обновления. В том же диалоговом окне Консолидация выберите любой из следующих параметров:
- Установите флажки «Подписи верхней строки» и / или «Значения левого столбца» в разделе «Использовать в качестве имён», если вы хотите, чтобы заголовки строк и / или столбцов исходных диапазонов были также скопированы.
- Установите флажок «Создать связи с исходными данными», если нужно, чтобы консолидированные данные обновлялись автоматически при изменении исходных таблиц. В этом случае Excel создаст ссылки на ваши исходные листы, а также схему, как на следующем скриншоте:
Если вы развернете какую-либо группу (щелкнув значок плюса), а затем установите курсор на ячейку с определенным значением, в строке формул отобразится ссылка на исходные данные.
Если флажок не устанавливать, то вы получаете просто таблицу с итоговыми цифрами без всяких формул и ссылок:
Как видите, функция консолидации Excel очень полезна для сбора данных. Однако у нее есть несколько ограничений. В частности, он работает только для числовых значений и всегда обрабатывает эти числа тем или иным образом (сумма, количество, среднее и т. д.). Исходные цифры вы здесь не увидите.
Если вы хотите объединить листы в Excel, просто скопировав и объединив их содержимое, вариант консолидации не подходит. Чтобы объединить всего парочку из них, создав как бы единый массив данных, то вам из стандартных возможностей Excel не подойдёт ничего, кроме старого доброго копирования / вставки.
Но если вам предстоит таким образом обработать десятки листов, ошибки при этом будут практически неизбежны. Да и затраты времени весьма значительны.
Поэтому для подобных задач рекомендую использовать один из перечисленных далее нестандартных методов для автоматизации слияния.
Как скопировать несколько листов Excel в один.
Как мы уже убедились, встроенная функция консолидации умеет суммировать данные из разных листов, но не может объединять их путем копирования данных на какой-то итоговый лист. Для этого вы можете использовать один из инструментов слияния и комбинирования, включенных в надстройку Ultimate Suite для Excel.
Для начала давайте будем исходить из следующих условий:
- Структура таблиц и порядок столбцов на всех листах одинаковы.
- Количество строк везде разное.
- Листы могут в будущем добавляться или удаляться.
Итак, у вас есть несколько таблиц, содержащих информацию о различных товарах, и теперь вам нужно объединить эти таблицы в одну итоговую, например так, как на рисунке ниже:
Три простых шага — это все, что нужно, чтобы объединить выбранные листы в один.
1. Запустите мастер копирования листов.
На ленте перейдите на вкладку AblebitsData, нажмите «Копировать листы (Copy Sheets)» и выберите один из следующих вариантов:
- Скопировать листы из каждой книги на один лист и поместить полученные листы в одну книгу.
- Объединить листы с одинаковыми названиями в один.
- Скопировать выбранные в одну книгу.
- Объединить данные из выбранных листов на один лист.
Поскольку мы хотим объединить несколько листов путем копирования их данных, то выбираем последний вариант:
1. Выберите листы и, при необходимости, диапазоны для объединения.
Мастер копирования листов отображает список всех имеющихся листов во всех открытых книгах. Выберите те из них, которые хотите объединить, и нажмите « Далее».
Если вы не хотите копировать все содержимое определенного рабочего листа, используйте специальный значок, чтобы выбрать нужный диапазон, как показано на скриншоте ниже.
В этом примере мы объединяем первые три листа нашей книги:
Совет. Если рабочие листы, которые вы хотите объединить, находятся в другой книге, которая в данный момент закрыта, нажмите кнопку «Добавить файлы …» , чтобы найти и открыть эту книгу.
2. Выберите, каким образом произвести объединение.
На этом этапе вы должны настроить дополнительные параметры, чтобы ваша информация была объединена именно так, как вы хотите.
Как вставить :
- Вставить все – скопировать все данные (значения и формулы). В большинстве случаев это правильный выбор.
- Вставлять только значения – если вы не хотите, чтобы переносились формулы, выберите этот параметр.
- Создать ссылки на исходные данные – это добавит формулы, связывающие итоговые ячейки с исходными. Выберите этот параметр, если вы хотите, чтобы результат объединения обновлялся автоматически при изменении исходных файлов. Это работает аналогично параметру «Создать ссылки на исходные данные» в стандартном инструменте консолидации в Excel.
Как расположить :
- Разместите скопированные диапазоны один под другим – то есть вертикально.
- Расположить скопированные диапазоны рядом – то есть по горизонтали.
Как скопировать :
- Сохранить форматирование – понятно и очень удобно.
- Разделить скопированные диапазоны пустой строкой – выберите этот вариант, если вы хотите добавить пустую строку между сведениями, скопированными из разных листов. Так вы сможете отделить их друг от друга, если это необходимо.
- Скопировать таблицы вместе с их заголовками. Установите этот флажок, если хотите, чтобы заголовки исходных таблиц были включены в итоговый лист.
На скриншоте ниже показаны настройки по умолчанию, которые нам подходят:
Нажмите кнопку «Копировать (Copy)», и у вас будет содержимое трех разных листов, объединенное в один итоговый, как показано в начале этого примера.
Быть может, вы скажете, что подобную операцию можно произвести путем обычного копирования и вставки. Но если у вас будет десяток или более листов и хотя бы несколько сотен строк на каждом из них, то это будет весьма трудоемкой операцией, которая займет довольно много времени. Да и ошибки вполне вероятны. Использование надстройки сэкономит вам много времени и избавит от проблем.
Как объединить листы Excel с различным порядком столбцов.
Когда вы имеете дело с файлами, созданными разными пользователями, порядок столбцов в них часто отличается. Как же их объединить? Будете ли вы копировать вручную или перемещать столбцы, чтобы упорядочить их в каждой книге? Это совсем не выход.
Используем инструмент объединения листов Combine Sheets.
Запускаем надстройку через меню Ablebits Data – Combine Sheets.
Выбираем и отмечаем галочками те листы, данные с которых мы хотим объединить. Затем программа анализирует их и предлагает нам список найденных столбцов с указанием того, сколько раз столбец с подобным названием был обнаружен.
Вы должны указать те столбцы, данные из которых вы хотели бы объединить. Можете выбрать их все, можете – только самые важные.
Затем определяем, как нужно вставить собранные данные: целиком с формулами или только значения, либо сформировать ссылки на источники, чтобы обеспечить постоянное обновление и актуальность информации в случае внесения изменений в исходные таблицы.
Также можно указать, что необходимо сохранить исходное форматирование, если оно уникально в каждой таблице. Так вам, кстати, будет проще определить, откуда появились сведения в общем массиве, какая таблица является их источником.
И данные будут идеально скомпонованы по заголовкам столбцов:
Мы получили своего рода сводную таблицу с необходимой информацией.
Объединение определенных столбцов из нескольких листов.
А вот, как мне кажется, наиболее часто встречающаяся ситуация:
- у вас действительно большие листы с множеством разных столбцов,
- столбцы расположены на каждом из них по-разному, в произвольном порядке,
- необходимо объединить только самые важные из них в итоговую таблицу.
Запустите мастер объединения листов, как мы это делали в предыдущем примере, укажите нужные, а затем выберите соответствующие столбцы. Да, это так просто!
Все дальнейшие шаги мы уже описывали выше. В результате в итоговую таблицу попадают только данные из выбранных вами столбцов:
Эти примеры продемонстрировали только несколько инструментов слияния данных, но это еще не все! Немного поэкспериментировав, вы увидите, насколько полезны и удобны все функции, включенные в пакет.
Полнофункциональная ознакомительная версия Ultimate Suite доступна для загрузки в по этой ссылке.
Слияние листов в Excel с помощью кода VBA
Если вы опытный пользователь Excel и чувствуете себя комфортно с макросами и VBA, вы можете объединить несколько листов Excel в один, используя какой-нибудь сценарий.
Для этого на вкладке Разработчик (Developer) нажмите кнопку Visual Basic или воспользуйтесь сочетанием клавиш Alt+F11. В открывшемся окне добавьте новый модуль через меню Insert — Module и скопируйте туда текст вот такого макроса:
Sub CopyDataWithHeaders()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim shLast As Long
Dim CopyRng As Range
Dim StartRow As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Delete the sheet "RDBMergeSheet" if it exist
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("RDBMergeSheet").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'Add a worksheet with the name "RDBMergeSheet"
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "RDBMergeSheet"
'Fill in the start row
StartRow = 2
'loop through all worksheets and copy the data to the DestSh
For Each sh In ActiveWorkbook.Worksheets
If sh.Name <> DestSh.Name Then
'Copy header row, change the range if you use more columns
If WorksheetFunction.CountA(DestSh.UsedRange) = 0 Then
sh.Range("A1:Z1").Copy DestSh.Range("A1")
End If
'Find the last row with data on the DestSh and sh
Last = LastRow(DestSh)
shLast = LastRow(sh)
'If sh is not empty and if the last row >= StartRow copy the CopyRng
If shLast > 0 And shLast >= StartRow Then
'Set the range that you want to copy
Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))
'Test if there enough rows in the DestSh to copy all the data
If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
MsgBox "There are not enough rows in the Destsh"
GoTo ExitTheSub
End If
'This example copies values/formats, if you only want to copy the
'values or want to copy everything look below example 1 on this page
CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End If
End If
Next
ExitTheSub:
Application.Goto DestSh.Cells(1)
'AutoFit the column width in the DestSh sheet
DestSh.Columns.AutoFit
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
Function LastCol(sh As Worksheet)
On Error Resume Next
LastCol = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
On Error GoTo 0
End Function
Имейте в виду, что для правильной работы кода VBA все исходные листы должны иметь одинаковую структуру, одинаковые заголовки столбцов и одинаковый порядок столбцов.
В этой функции выполняется копирование данных со всех листов начиная со строки 2 и до последней строки с данными. Если шапка в ваших таблицах занимает две или более строки, то измените этот код, поставив вместо 2 цифры 3, 4 и т.д.:
'Fill in the start row
StartRow = 2
При запуске функция добавит в вашу книгу рабочий лист с именем RDBMergeSheet и скопирует на него ячейки из каждого листа в книге. Каждый раз, когда вы запускаете макрос, он
сначала удаляет итоговый рабочий лист с именем RDBMergeSheet, если он существует, а затем добавляет новый в книгу. Это гарантирует, что данные всегда будут актуальными после запуска кода. При этом формат объединяемых ячеек также копируется.
Ещё несколько интересных примеров кода VBA для объединения листов вашей рабочей книги вы можете найти по этой ссылке.
Как объединить два листа Excel в один по ключевому столбцу
Если вы ищете быстрый способ сопоставить и объединить данные из двух листов, вы можете либо использовать функцию Excel ВПР, либо воспользоваться мастером объединения таблиц Merge Two Tables.
Последний представляет собой удобный визуальный инструмент, который позволяет сравнивать две таблицы Excel по общему столбцу (столбцам) и извлекать совпадающие данные из справочной таблицы. На скриншоте ниже показан один из возможных результатов.
Более подробно его работа рассмотрена в этой статье.
Мастер объединения двух таблиц также включен в Ultimate Suite for Excel, как и множество других полезных функций.
Вот как вы можете объединить листы в Excel. Я надеюсь, что вы найдете информацию в этом коротком руководстве полезной. Если у вас есть вопросы, не стесняйтесь оставлять их в комментариях.
anytka 0 / 0 / 0 Регистрация: 10.02.2013 Сообщений: 27 |
||||
1 |
||||
Обьединение нескольких листов данных в один макросом11.02.2013, 18:24. Показов 41042. Ответов 4 Метки нет (Все метки)
Здравствуйте, подскажите пожалуйста. Кликните здесь для просмотра всего текста
0 |
Watcher_1 356 / 162 / 27 Регистрация: 21.06.2011 Сообщений: 350 |
||||
11.02.2013, 21:29 |
2 |
|||
Как смог, понял структуру вашего файла…
1 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
11.02.2013, 23:24 |
3 |
|||
Как раз что-то похожее делал для себя. Кидаю вариант и немного обясню. Предполагается, что у меня должен бы быть лист Общих данных «GenExMan» (в даном случае — обобщенный лист счетов с данными). Этот лист (раньше) был разделен так, что для каждого счета создался отдельный лист с именем счета и данными по этому счету. После создания отчета/обработки/ каждого счета, мне нужно опять опять все собрать на новый лист «MergeRecords» и потом вернуть на Android. Представленный код — это фрагмент общего, который все и собирает.
1 |
0 / 0 / 0 Регистрация: 22.01.2016 Сообщений: 1 |
|
22.01.2016, 20:29 |
4 |
Igor_Tr, вечер добрый, не могли бы вы подсказать как использовать ваш макрос в своей таблице?
0 |
Nyusya 0 / 0 / 0 Регистрация: 13.10.2015 Сообщений: 1 |
||||
08.08.2016, 09:43 |
5 |
|||
Как смог, понял структуру вашего файла…
Доброго дня!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
08.08.2016, 09:43 |
5 |
Как собрать данные с нескольких листов макросом (кнопкой) |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Excel macro that allows you to select multiple workbooks and have all of their worksheets automatically combined into a single workbook.
This macro will add the worksheets to a newly created workbook and not to the currently open/visible workbook. This allows you to do whatever you want with the new workbook without having to worry about the contents of the current workbook.
This macro allows you to select as many files as you want to combine and you do it all through the regular «Select File» dialogue box, which makes it really easy to use.
You do not have to change anything for this macro to work, just run it.
Where to Install the Macro: Module
Sub Combine_Workbooks_Select_Files_1()
Dim Fnum As Long
Dim mybook As Workbook
Dim BaseWb As Workbook
Dim CalcMode As Long
Dim FName As Variant
Dim wSheet As Worksheet
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
'Get the files to combine
FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xl*), *.xl*", MultiSelect:=True)
If IsArray(FName) Then
'Create the workbook to store the combined files
Set BaseWb = Workbooks.Add(xlWBATWorksheet)
'Loop through the files to combine
For Fnum = LBound(FName) To UBound(FName)
Set mybook = Nothing
On Error Resume Next
Set mybook = Workbooks.Open(FName(Fnum))
On Error GoTo 0
If Not mybook Is Nothing Then
On Error Resume Next
'Add the worksheets to the new workbook
For Each wSheet In mybook.Worksheets
wSheet.Move Before:=BaseWb.Sheets(1)
Next wSheet
mybook.Close savechanges:=False
On Error GoTo 0
End If
Next Fnum
'Delete a default worksheet that was added to the new workbook.
BaseWb.Sheets(BaseWb.Sheets.Count).Delete
End If
ExitTheSub:
'Reset the options for display, alerts, and calculations.
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
.DisplayAlerts = True
End With
End Sub
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Similar Content on TeachExcel
Combine Multiple Workbooks into One
Macro: This macro for Microsoft Excel allows you to combine multiple workbooks and worksheets int…
Combine Values from Multiple Cells into One Cell in Excel
Tutorial: There are two easy ways to combine values from multiple cells in Excel.
In order to do thi…
Guide to Combine and Consolidate Data in Excel
Tutorial: Guide to combining and consolidating data in Excel. This includes consolidating data from …
Combine Data from Multiple Worksheets in Excel
Tutorial:
The easiest way to combine and consolidate data in Excel.
Simple method to combine data …
Vlookup Across Multiple Workbooks
Tutorial: How to use the VLOOKUP function across multiple workbooks in Excel. This will create a lin…
Import a Worksheet from One Workbook to Another in Excel
Tutorial: In Excel, you can quickly copy an entire worksheet from one workbook to another workbook.�…
How to Install the Macro
- Select and copy the text from within the grey box above.
- Open the Microsoft Excel file in which you would like the Macro to function.
- Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
Or For other ways to get there, Click Here. - On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
- If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
- Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
- You are now ready to run the macro.