Два листа в excel макросом

На чтение 7 мин. Просмотров 2.9k.

Итог: узнайте несколько способов, как показать несколько листов одновременно с помощью макроса VBA или надстройки.

Уровень мастерства: Средний

Содержание

  1. Не удается отобразить несколько листов в Excel?
  2. # 1 — Используйте окно VBA Immediate, чтобы отобразить все
  3. # 2 — Использование макроса для отображения нескольких листов
  4. Показать листы, которые содержат определенное имя
  5. # 3 — Используйте Tab Hound или Tab Control
  6. Публикация отчетов? Управление вкладками сэкономит ваше время
  7. Заключение

Не удается отобразить несколько листов в Excel?

Как вы, вероятно, знаете, вы не можете отобразить два или
более листов одновременно в Excel. Меню «Показать» позволяет выбрать только
один лист за раз.

Cannot Unhide Multiple Sheets

Это может сделать процесс показа нескольких листов очень
трудоемким, особенно если вы хотите отобразить все листы в рабочей книге.
Поэтому в этой статье мы рассмотрим несколько разных способов быстрого
отображения листов.

Самый быстрый способ сделать все листы видимыми в Excel — это использовать макрос (VBA). В следующей строке кода VBA цикл For Next Loop используется для циклического просмотра каждого листа в активной книге и отображения каждого листа.

For Each ws In Sheets:ws.Visible=True:Next

Вы можете
запустить этот код в непосредственном окне редактора VB в три простых шага:

  1. Alt + F11 (открывает окно редактора VB)
  2. Ctrl + G (открывает немедленное окно)
  3. Вставьте следующую строку кода в Immediate Window и нажмите Enter

For Each ws In Sheets:ws.Visible=True:Next

Скриншот ниже показывает, как реализовать эти шаги.

Unhide All Excel Worksheets with the VBA Immediate Window

Эта строка кода проходит по всем рабочим листам в рабочей книге и устанавливает для каждого видимого свойства листа значение «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» указывает макросу циклически проходить по каждому листу в коллекции рабочих листов.

The Unhide Mulitple Sheets in Excel VBA Macro Explained

Эта строка также ссылается на переменную «ws» и устанавливает ее для представления объекта рабочего листа. Это означает, что «ws» временно представляет текущий рабочий лист в цикле.

Когда вводится строка кода «Next ws», макрос переходит обратно к первой строке кода в цикле и снова оценивает ее. Он продолжает циклически перебирать все листы в коллекции рабочих листов (Activeworkbook.Worksheets).

Затем мы можем использовать «ws» внутри цикла, чтобы изменить свойства текущего рабочего листа. В этом случае мы устанавливаем свойство «Видимый» листа, чтобы оно было видимым (xlSheetVisible). Свойство visible имеет три различных свойства на выбор:

xlSheetHidden

xlSheetVeryHidden

xlSheetVisible

Excel VBA Worksheet Visible Property Enumerations

Вы также можете установить для свойства значение «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 позволяет отображать несколько листов одним нажатием кнопки просмотра.

Скриншот ниже показывает, насколько это просто.

Unhide Multiple Sheets with the Tab Hound Add-in for Excel

В окне Tab Hound
содержится список всех листов рабочей книги. Вы можете выбрать несколько листов
в списке, а затем нажать кнопку «Показать», чтобы отобразить все выбранные
листы.

Это делает процесс показа
нескольких листов действительно быстрым!

Вкладка Hound также содержит дополнительные способы фильтрации списка листов. Вы можете ввести поиск в поле поиска, отфильтровать все видимые или скрытые вкладки и даже отфильтровать по цвету вкладок. Это позволяет легко находить листы, которые вы ищете, а затем выполнять над ними такие действия, как скрытие / скрытие.

В этом видео также показано, как быстро скрыть и показать несколько листов с помощью Tab Hound

Нажмите здесь, чтобы узнать больше о Tab Hound

Публикация отчетов? Управление вкладками сэкономит ваше время

Если вы создаете
еженедельные или ежемесячные отчеты и хотите убедиться, что все нужные листы
спрятаны перед отправкой, надстройка Tab Control может сэкономить вам много
времени.

Вот сценарий, с которым мы обычно сталкиваемся …

Нам необходимо обновить рабочую книгу новыми данными на этой неделе и внести некоторые изменения, прежде чем отправлять ее по электронной почте. Эти обновления требуют от нас показать несколько листов, внести изменения, а затем снова скрыть листы. Это может занять много времени, если вам нужно скрыть / показать много листов.

Quickly Hide and Unhide Multiple Sheets with Tab Control Add-in

Вкладка «Управление» установит контрольный лист в вашей рабочей книге со списком всех имен рабочих листов. Вы можете установить видимое свойство для каждого листа в списке, а затем нажать кнопку, чтобы скрыть или показать все листы на основе списка.

Это означает, что вы можете настроить контрольный лист для определенного вида, чтобы были видны только определенные рабочие листы. Нажмите кнопку «Запустить обновление», и все листы будут скрыты / скрыты на основе вашего контрольного листа. Это гарантирует, что ваш отчет будет показывать правильные листы каждый раз, когда вы отправляете его, и вы будете выглядеть действительно организованно.

Надстройка 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:

Созданные запросы для каждого города в Power Query

При любых изменениях в исходных данных достаточно будет обновить соответствующую таблицу правой кнопкой мыши — команда Обновить (Refresh) или обновить сразу все города оптом, используя кнопку Обновить всё на вкладке Данные (Data — Refresh All).

Ссылки по теме

  • Что такое макросы, как их создавать и использовать
  • Сохранение листов книги как отдельных файлов
  • Сборка данных со всех листов книги в одну таблицу

Сохранение нескольких листов в Excel

Добрый день, уважаемые читатели и подписчики блога. Сегодня мы поговорим о сохранении листов большой книги Excel. Материал о расчётах между листами и книгами в Excel.

Как обычно, способов несколько.

Способ №1 (стандартный)

Щёлкаем правой кнопкой мышки на имя листа.

Сохранение нескольких листов в Excel

Выбираем команду «Переместить или скопировать».

Сохранение нескольких листов в Excel

В поле «Переместить выбранные листы в книгу:» выбираем «Новая книга».

Сохранение нескольких листов в Excel

После нажатия «ОК» произойдёт создание новой книги и выгрузка туда выделенного листа. Останется только сохранить документ.

Если нужно сохранить два и более листов их нужно выделить. Зажав клавишу Ctrl щёлкнуть на имя листа, затем повторить все вышеописанные действия.

Сохранение нескольких листов в Excel

Способ № 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

Сохранение нескольких листов в Excel

В итоге выделенные листы перейдут в новую книгу. Останется только её сохранить.

Если же необходимо разделить одну книгу на отдельные файлы и назвать их по именам листов, воспользуемся вот этим макросом.

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

Немного пояснений. Этот макрос лучше использовать в том случае, когда книга уже находится в отдельной папке. Все извлечённые из неё литы будут сохранены в той же папке, что и документ родитель. Не стоит использовать макрос для вновь созданной, но ещё не сохранённой книги — программа будет просто вылетать.

Если знаете ещё способы — делитесь ими в комментариях, буду рад научиться чему-нибудь новому! Всем удачи!

Создание, копирование, перемещение и удаление рабочих листов 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

6 примеров — как консолидировать данные и объединить листы Excel в один

В статье рассматриваются различные способы объединения листов в Excel в зависимости от того, какой результат вы хотите получить:

  • объединить все данные с выбранных листов,
  • объединить несколько листов с различным порядком столбцов,
  • объединить определённые столбцы с нескольких листов,
  • объединить две таблицы Excel в одну по ключевым столбцам.

Сегодня мы займемся проблемой, с которой ежедневно сталкиваются многие пользователи Excel, — как объединить листы Excel в один без использования операций копирования и вставки. Рассмотрим два наиболее распространенных сценария: объединение числовых данных (сумма, количество, среднее и т. д.) и объединение листов ( то есть копирование данных из нескольких листов в один).

Вот что мы рассмотрим в этой статье:

  • Объединение при помощи стандартного инструмента консолидации.
  • Как копировать несколько листов Excel в один.
  • Как объединить листы с различным порядком столбцов.
  • Объединение только определённых столбцов из нескольких листов
  • Слияние листов в Excel с использованием VBA
  • Как объединить два листа в один по ключевым столбцам

Консолидация данных из нескольких листов на одном.

Самый быстрый способ консолидировать данные в Excel (в одной или нескольких книгах) — использовать встроенную функцию Excel Консолидация.

Рассмотрим следующий пример. Предположим, у вас есть несколько отчетов из региональных офисов вашей компании, и вы хотите объединить эти цифры в основной рабочий лист, чтобы у вас был один сводный отчет с итогами продаж по всем товарам.

Как вы видите на скриншоте ниже, четыре объединяемых листа имеют схожую структуру данных, но разное количество строк и столбцов:

Чтобы объединить всю эту информацию на одном листе, выполните следующие действия:

  1. Правильно расположите исходные данные. Чтобы функция консолидации Excel работала правильно, убедитесь, что:
    • Каждый диапазон (набор данных), который вы хотите объединить, находится на отдельном листе. Не помещайте данные на лист, куда вы планируете выводить консолидированные данные.
    • Каждый лист имеет одинаковый макет, и каждый столбец имеет заголовок и содержит похожие данные.
    • Ни в одном списке нет пустых строк или столбцов.
  2. Запустите инструмент «Консолидация». На новом листе, где вы планируете поместить результаты, щелкните верхнюю левую ячейку, начиная с которой должны отображаться консолидированные данные, затем на ленте перейдите на вкладку «Данные» и нажмите кнопку «Консолидация».

Совет. Желательно объединить данные в пустой лист. Если на вашем основном листе уже есть данные, убедитесь, что имеется достаточно места (пустые строки и столбцы) для записи результатов.

  1. Настройте параметры консолидации. Появляется диалоговое окно «Консолидация», и вы делаете следующее:
    • В поле «Функция» выберите одну из функций, которую вы хотите использовать для консолидации данных (количество, среднее, максимальное, минимальное и т. д.). В этом примере мы выбираем Сумма.
    • В справочном окне, нажав в поле Ссылка на значок  , выберите диапазон на первом листе. Затем нажмите кнопку «Добавить», чтобы присоединить его к списку диапазонов. Повторите этот шаг для всех листов, которые вы хотите объединить.

Если один или несколько листов находятся в другой книге, используйте кнопку «Обзор», чтобы найти эту книгу и использовать ее.

  1. Настройте параметры обновления. В том же диалоговом окне Консолидация выберите любой из следующих параметров:
    • Установите флажки «Подписи верхней строки» и / или «Значения левого столбца» в разделе «Использовать в качестве имён», если вы хотите, чтобы заголовки строк и / или столбцов исходных диапазонов были также скопированы.
    • Установите флажок «Создать связи с исходными данными», если нужно, чтобы консолидированные данные обновлялись автоматически при изменении исходных таблиц. В этом случае Excel создаст ссылки на ваши исходные листы, а также схему, как на следующем скриншоте:

Если вы развернете какую-либо группу (щелкнув значок плюса), а затем установите курсор на ячейку с определенным значением, в строке формул отобразится ссылка на исходные данные.
Если флажок не устанавливать, то вы получаете просто таблицу с итоговыми цифрами без всяких формул и ссылок:

Как видите, функция консолидации Excel очень полезна для сбора данных. Однако у нее есть несколько ограничений. В частности, он работает только для числовых значений и всегда обрабатывает эти числа тем или иным образом (сумма, количество, среднее и т. д.). Исходные цифры вы здесь не увидите.

Если вы хотите объединить листы в Excel, просто скопировав и объединив их содержимое, вариант консолидации не подходит. Чтобы объединить всего парочку из них, создав как бы единый массив данных, то вам из стандартных возможностей Excel не подойдёт ничего, кроме старого доброго копирования / вставки. 

Но если вам предстоит таким образом обработать десятки листов, ошибки при этом будут практически неизбежны. Да и затраты времени весьма значительны.

Поэтому для подобных задач рекомендую использовать один из перечисленных далее нестандартных методов для автоматизации слияния.

Как скопировать несколько листов Excel в один.

Как мы уже убедились, встроенная функция консолидации умеет суммировать данные из разных листов, но не может объединять их путем копирования данных на какой-то итоговый лист. Для этого вы можете использовать один из инструментов слияния и комбинирования, включенных в надстройку Ultimate Suite для Excel.

Для начала давайте будем исходить из следующих условий:

  • Структура таблиц и порядок столбцов на всех листах одинаковы.
  • Количество строк везде разное.
  • Листы могут в будущем добавляться или удаляться.

Итак, у вас есть несколько таблиц, содержащих информацию о различных товарах, и теперь вам нужно объединить эти таблицы в одну итоговую, например так, как на рисунке ниже:

Три простых шага — это все, что нужно, чтобы объединить выбранные листы в один.

1.       Запустите мастер копирования листов.

На ленте перейдите на вкладку AblebitsData, нажмите «Копировать листы (Copy Sheets)» и выберите один из следующих вариантов:

  1. Скопировать листы из каждой книги на один лист и поместить полученные листы в одну книгу.
  2. Объединить листы с одинаковыми названиями в один.
  3. Скопировать выбранные в одну книгу.
  4. Объединить данные из выбранных листов на один лист.

Поскольку мы хотим объединить несколько листов путем копирования их данных, то выбираем последний вариант:

1.       Выберите листы и, при необходимости, диапазоны для объединения.

Мастер копирования листов отображает список всех имеющихся листов во всех открытых книгах. Выберите те из них, которые хотите объединить, и нажмите « Далее».

Если вы не хотите копировать все содержимое определенного рабочего листа, используйте специальный значок, чтобы выбрать нужный диапазон, как показано на скриншоте ниже.

В этом примере мы объединяем первые три листа нашей книги:

Совет. Если рабочие листы, которые вы хотите объединить, находятся в другой книге, которая в данный момент закрыта, нажмите кнопку «Добавить файлы …» , чтобы найти и открыть эту книгу.

2.       Выберите, каким образом произвести объединение.

На этом этапе вы должны настроить дополнительные параметры, чтобы ваша информация была объединена именно так, как вы хотите.

Как вставить :

  1. Вставить все – скопировать все данные (значения и формулы). В большинстве случаев это правильный выбор.
  2. Вставлять только значения – если вы не хотите, чтобы переносились формулы, выберите этот параметр.
  3. Создать ссылки на исходные данные – это добавит формулы, связывающие итоговые ячейки с исходными. Выберите этот параметр, если вы хотите, чтобы результат объединения обновлялся автоматически при изменении исходных файлов. Это работает аналогично параметру «Создать ссылки на исходные данные» в стандартном инструменте консолидации в Excel.

Как расположить :

  1. Разместите скопированные диапазоны один под другим – то есть вертикально.
  2. Расположить скопированные диапазоны рядом – то есть по горизонтали.

Как скопировать :

  • Сохранить форматирование – понятно и очень удобно.
    • Разделить скопированные диапазоны пустой строкой – выберите этот вариант, если вы хотите добавить пустую строку между сведениями, скопированными из разных листов. Так вы сможете отделить их друг от друга, если это необходимо.
    • Скопировать таблицы вместе с их заголовками. Установите этот флажок, если хотите, чтобы заголовки исходных таблиц были включены в итоговый лист.

На скриншоте ниже показаны настройки по умолчанию, которые нам подходят:

Нажмите кнопку «Копировать (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. Я надеюсь, что вы найдете информацию в этом коротком руководстве полезной. Если у вас есть вопросы, не стесняйтесь оставлять их в комментариях.

Быстрое удаление пустых столбцов в Excel В этом руководстве вы узнаете, как можно легко удалить пустые столбцы в Excel с помощью макроса, формулы и даже простым нажатием кнопки. Как бы банально это ни звучало, удаление пустых…
Как быстро объединить несколько файлов Excel Мы рассмотрим три способа объединения файлов Excel в один: путем копирования листов, запуска макроса VBA и использования инструмента «Копировать рабочие листы» из надстройки Ultimate Suite. Намного проще обрабатывать данные в…
Как работать с мастером формул даты и времени Работа со значениями, связанными со временем, требует глубокого понимания того, как функции ДАТА, РАЗНДАТ и ВРЕМЯ работают в Excel. Эта надстройка позволяет быстро выполнять вычисления даты и времени и без особых…
Как найти и выделить уникальные значения в столбце В статье описаны наиболее эффективные способы поиска, фильтрации и выделения уникальных значений в Excel. Ранее мы рассмотрели различные способы подсчета уникальных значений в Excel. Но иногда вам может понадобиться только просмотреть уникальные…
Как получить список уникальных значений В статье описано, как получить список уникальных значений в столбце с помощью формулы и как настроить эту формулу для различных наборов данных. Вы также узнаете, как быстро получить отдельный список с…
6 способов быстро транспонировать таблицу В этой статье показано, как столбец можно превратить в строку в Excel с помощью функции ТРАНСП, специальной вставки, кода VBA или же специального инструмента. Иначе говоря, мы научимся транспонировать таблицу.…
Как объединить две или несколько таблиц в Excel В этом руководстве вы найдете некоторые приемы объединения таблиц Excel путем сопоставления данных в одном или нескольких столбцах. Как часто при анализе в Excel вся необходимая информация собирается на одном…

anytka

0 / 0 / 0

Регистрация: 10.02.2013

Сообщений: 27

1

Обьединение нескольких листов данных в один макросом

11.02.2013, 18:24. Показов 41042. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте, подскажите пожалуйста.
У меня есть 30 листов с данными
Мне нужно объединить их в один лист. Как мне записать макрос?
Я копирую данные из первого листа выделяю до последней ячейки с данными, вставляю в общий лист, далее перехожу на новый лист, так же копирую данные, выделяю до последней ячейки. Но у меня кол-во ячеек в каждом листе может меняться, как правильно прописать код?

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Rows("2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Position:=xlLast
    Sheets("Общий").Select
    Range("A2").Select
    ActiveSheet.Paste
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("PIL2PIL_2").Select
    Rows("2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Position:=xlLast
    Sheets("Общий").Select



0



Watcher_1

356 / 162 / 27

Регистрация: 21.06.2011

Сообщений: 350

11.02.2013, 21:29

2

Как смог, понял структуру вашего файла…
Кол-во заполненных строк проверяется по столбцу А

Visual Basic
1
2
3
4
5
6
7
8
9
Sub m()
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Общий" Then
           myR_Total = Sheets("Общий").Range("A" & Sheets("Общий").Rows.Count).End(xlUp).Row
           myR_i = Sheets(i).Range("A" & Sheets(i).Rows.Count).End(xlUp).Row
           Sheets(i).Rows("1:" & myR_i).Copy Destination:=Sheets("Общий").Range("A" & myR_Total + 1)
        End If
    Next
End Sub



1



Igor_Tr

4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

11.02.2013, 23:24

3

Как раз что-то похожее делал для себя. Кидаю вариант и немного обясню. Предполагается, что у меня должен бы быть лист Общих данных «GenExMan» (в даном случае — обобщенный лист счетов с данными). Этот лист (раньше) был разделен так, что для каждого счета создался отдельный лист с именем счета и данными по этому счету. После создания отчета/обработки/ каждого счета, мне нужно опять опять все собрать на новый лист «MergeRecords» и потом вернуть на Android. Представленный код — это фрагмент общего, который все и собирает.
И еще — тут использована функция проверки наличия листа в книге. Если нужно будет — докину (хотя я ее где-то здесь уже выставлял). Старые коментарии — украинским, новые (для Вас) — русским. У меня все работает как часы. Пробуйте.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Sub ConsolidateAllSheet()
    Application.ScreenUpdating = False
    ' Проверяем наличие основного листа, с которого будет получено _
          список уникальных названий счетов
    If Not fun_SheetExists("GenExMan") Then ' 
        MsgBox "АРКУШ   " & "GenExMan" & "   ВІДСУТНІЙ."
        Exit Sub
            Else: Sheets("GenExMan").Select
    End If
    ' Проверяем наличие в книге листа, в который будем собирать _
           нужные нам листы.
    If Not fun_SheetExists("MergeRecords") Then
        Sheets.Add ' создаем
            With ActiveSheet
                .Name = "MergeRecords" ' именуем
                .Tab.ColorIndex = 10 ' красим ярлык
            End With ' ActiveSheet
        Sheets("GenExMan").Select
             ' Очищаем "собирательный лист" для новых данных
            Else: Sheets("MergeRecords").Cells.Delete ' _
                                    вивільнюємо аркуш для перезапису.
    End If
    Application.ScreenUpdating = True
    
    Set Dict = CreateObject("Scripting.dictionary") ' создаем словарь
 
    With Sheets("GenExMan")
        Set mRng = Range(.Cells(1, 1), _
                        Cells(1, .UsedRange.Columns.Count))
        counter = 0
        For Each CurrCell In mRng
            counter = counter + 1
            ReDim Preserve arr1(counter)
            arr1(counter) = mRng.Cells(counter) ' _
                                            Назви полів - в масив.
        Next ' CurrCell
        With Sheets("MergeRecords")
            .Cells(1).Resize(1, UBound(arr1)).Value = arr1
        End With
        Erase arr1 ' вивільнення пам'яті.
        With mRng
           ' Определяем в общем листе номер столбца с названиями счетов
            mstr = "Account" ' Знаходимо поле з значенням _
                         "Account" - це будуть ключі Dict.
            Set CurrCell = .Find(What:=mstr, _
                            LookAt:=xlWhole, SearchFormat:=False)
                If mRng Is Nothing Then
                    MsgBox "Не   знайдено !": Exit Sub
                        Else: mCol = CurrCell.Column
                End If
        End With ' mRng
        ' Выбираем уникальные названия счетов
        For i = 2 To .UsedRange.Rows.Count ' отримую _
                                       перелік назв рахунків.
            If Not Dict.exists(Trim(.Cells(i, mCol).Value)) Then
                Dict.Add key:=Trim(.Cells(i, mCol).Value), _
                                        Item:=Trim(.Cells(i, mCol).Value)
            End If
        Next 'i
    End With
    ' Заливаем уникальные названия счетов в массив genKeys. _
           В данном случае ними будут и ключи, и значения словаря. 
    genKeys = Dict.keys ' ключі словника - в масив.
    Set Dict = Nothing ' видаляємо словник.
    ' Ниже - просто проверка при отладке.
''--Results--Verification------------------------
'Stop
'    Application.SendKeys "^g^a {Del}"
'    For i = LBound(genKeys) To UBound(genKeys)
'        Debug.Print genKeys(i)
'    Next 'i
''==End==Verification======================
 
     ' А вот этот коротенький код уже собственно перебирает _
       раздельные листы счетов, заганяет по каждому листу _
       значения в массив  mArr ...
'Stop
    For i = LBound(genKeys) To UBound(genKeys)
        Erase mArr ' очищаємо масив
        With Sheets(genKeys(i))
            mArr = Range(.Cells(2, 1), _
                .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value
        End With
    '... и, наконец, выгружает массив mArr  на сборочный лист "MergeRecords".
'Stop
        With Sheets("MergeRecords")
            r = .UsedRange.Rows.Count + 1
            .Cells(r, 1).Resize(UBound(mArr, 1), _
                    UBound(mArr, 2)).Value = mArr
        End With
    Next 'i
 Stop
        
End Sub



1



0 / 0 / 0

Регистрация: 22.01.2016

Сообщений: 1

22.01.2016, 20:29

4

Igor_Tr, вечер добрый, не могли бы вы подсказать как использовать ваш макрос в своей таблице?
Лист1 — 44 составляющих для отбора по всем листам ( всего листов 160)



0



Nyusya

0 / 0 / 0

Регистрация: 13.10.2015

Сообщений: 1

08.08.2016, 09:43

5

Цитата
Сообщение от Watcher_1
Посмотреть сообщение

Как смог, понял структуру вашего файла…
Кол-во заполненных строк проверяется по столбцу А

Visual Basic
1
2
3
4
5
6
7
8
9
Sub m()
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Общий" Then
           myR_Total = Sheets("Общий").Range("A" & Sheets("Общий").Rows.Count).End(xlUp).Row
           myR_i = Sheets(i).Range("A" & Sheets(i).Rows.Count).End(xlUp).Row
           Sheets(i).Rows("1:" & myR_i).Copy Destination:=Sheets("Общий").Range("A" & myR_Total + 1)
        End If
    Next
End Sub

Доброго дня!
Случайно забрела сюда в поиске макроса по сбору данных и нашла именно то, что нужно.
Только два вопросика, как в данный макрос можно добавить имена листов, откуда копируются данные и каеую команду добавить, чтобы вставлялись значения вместо формул. Заранее благодарю!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

08.08.2016, 09:43

5

Как собрать данные с нескольких листов макросом (кнопкой)

RLGrime

Дата: Вторник, 10.04.2018, 02:27 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Доброго всем времени суток. От меня был уже подобный вопрос, но сейчас задача стоит в следующем. Есть какое-то кол-во листов в книге, например 4. Предположим, что все листы по конструкции идентичны, но сами таблицы могут быть различного объема . И Нужно собрать данные не со всех листов, а с определенных, поместить данные друг под другом. Нужно это сделать именно макросом, лучше по нажатию кнопки. Во вложении пример таблицы и что в итоге должно получиться. Собрать таблицы нужно с листов 2 и 3, а 1 и 4 не трогать. Помогите решить данную задачу пжлст) Спасибо.

 

Ответить

sboy

Дата: Вторник, 10.04.2018, 10:24 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Добрый день.
[vba]

Код

Sub sbor()
    With Sheets(2): arr1 = .Range(.Cells(1), .Cells.SpecialCells(xlCellTypeLastCell)): End With
    With Sheets(3): arr2 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With
    Sheets(5).Cells(1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1
    Sheets(5).Cells(UBound(arr1) + 1, 1).Resize(UBound(arr2), UBound(arr2, 2)).Value = arr2
End Sub

[/vba]


Яндекс: 410016850021169

 

Ответить

RLGrime

Дата: Среда, 11.04.2018, 01:17 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy, Спасибо огромное) Все работает, то что нужно)

 

Ответить

RLGrime

Дата: Среда, 11.04.2018, 02:30 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy, А еще вопрос, если добавить к сборке еще и 4й лист, как это реализовать? Я в этом просто 2по5, сам не могу решить. Попробовал, получается добавляет только 2 позиции. Если не сложно подскажите и я уже отстану) Спасибо.

 

Ответить

sboy

Дата: Среда, 11.04.2018, 09:11 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Добавить еще массив
Если листов много, то имеет смысл переделать на цикл по листам
[vba]

Код

Sub sbor()
    With Sheets(2): arr1 = .Range(.Cells(1), .Cells.SpecialCells(xlCellTypeLastCell)): End With
    With Sheets(3): arr2 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With
    With Sheets(4): arr3 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With
    Sheets(5).Cells(1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1
    Sheets(5).Cells(UBound(arr1) + 1, 1).Resize(UBound(arr2), UBound(arr2, 2)).Value = arr2
    Sheets(5).Cells(UBound(arr1) + UBound(arr2) + 1, 1).Resize(UBound(arr3), UBound(arr3, 2)).Value = arr3
End Sub

[/vba]

К сообщению приложен файл:

2262603.xlsm
(21.8 Kb)


Яндекс: 410016850021169

 

Ответить

krosav4ig

Дата: Среда, 11.04.2018, 10:55 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

Можно использовать форму для выбора листов
[vba]

Код

Private Sub CommandButton1_Click()
    Me.Hide
    On Error Resume Next
    With Application: .EnableEvents = 0: .ScreenUpdating = 0
        With ActiveSheet.UsedRange
            Intersect(.Cells, .Offset(1)).Delete xlUp
        End With
        With ListBox1
            For i = 0 To .ListCount — 1
                If .Selected(i) Then
                    With ThisWorkbook.Sheets(.List(i)).UsedRange
                        Intersect(.Cells, .Offset(1)).Copy _
                            [A1].Offset(Cells(Rows.Count, 1).End(xlUp).Row)
                    End With
                End If
            Next
        End With
    .EnableEvents = 1: .ScreenUpdating = 1: End With
    Unload Me
End Sub
Private Sub UserForm_Initialize()
    Dim SH As Worksheet
    For Each SH In ThisWorkbook.Sheets
        If Not SH Is ActiveSheet Then Me.ListBox1.AddItem SH.Name
    Next
End Sub

[/vba]

К сообщению приложен файл:

7980843.xlsm
(27.5 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

RLGrime

Дата: Пятница, 13.04.2018, 09:56 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 9


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

krosav4ig, Спасибо) очень полезно если много листов)

 

Ответить

Elena_новичок

Дата: Среда, 03.10.2018, 00:33 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

sboy, скажите, как заменить ссылку на номер листа на название листа? Как поменяется команда With Sheets(2): ?

Спасибо!

 

Ответить

Pelena

Дата: Среда, 03.10.2018, 07:29 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

[vba]

Код

With Sheets(«имя_листа»)

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

hripunkov

Дата: Вторник, 12.03.2019, 16:10 |
Сообщение № 10

Группа: Пользователи

Ранг: Новичок

Сообщений: 12


Репутация:

4

±

Замечаний:
40% ±


Excel 2007

krosav4ig, здравствуйте! Помогите, пжлст, можно ли выбирать определенный интервал копируемых ячеек? Мне нужно копировать данные колонок A:G, начиная со второй строки каждого, выбранного листа и вставлять их на определенный лист также со второй строки, чтобы не затрагивать заголовки! Спасибо!

 

Ответить

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

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

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. 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.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  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.
  9. You are now ready to run the macro.

Понравилась статья? Поделить с друзьями:
  • Два или три условия в excel
  • Два изображения в excel
  • Два значения если в одной ячейке excel
  • Два значения в одной ячейке excel через дробь
  • Два значения больше в одной ячейке excel