Консолидиране/Обединяване на няколко работни листа в един главен лист с помощта на VBA

Anonim

Понякога искаме да обединим няколко листа в един лист, за да можем лесно да анализираме данните и да ги превърнем в полезна информация. Тази статия ще ви разкаже как да обедините няколко работни листа в един работен лист с помощта на VBA.
Пример:

Тук съм извлекъл някои данни от сървъра, който връща данни в различни работни листове. Добавих още един лист и го нарекох „Master“. Другите имена на листове нямат значение.
Сега стартирайте този макрос.

Sub Merge_Sheets () Dim startRow, startCol, lastRow, lastCol As Long Dim headers As Range 'Set Master sheet for consolidation Set mtr = Worksheets ("Master") Set wb = ThisWorkbook' Get Headers Set headers = Application.InputBox ("Изберете Заглавки ", Тип: = 8)" Копиране на заглавки в главни заглавки. Копиране на mtr.Range ("A1") startRow = headers.Row + 1 startCol = заглавия. Колона Debug.Print startRow, startCol 'цикъл през всички листове за всеки ws В wb.Worksheets 'с изключение на главния лист от цикъл Ако ws.Name "Master" Тогава ws.Activate lastRow = Cells (Rows.Count, startCol) .End (xlUp) .Row lastCol = Cells (startRow, Columns.Count). Край (xlToLeft). Колоната „получава данни от всеки работен лист и ги копира в обхвата на главния лист (клетки (startRow, startCol), клетки (lastRow, lastCol)). Копирайте _ mtr.Range (" A "& mtr.Cells (редове .Count, 1) .End (xlUp) .Row + 1) End If Next ws Worksheets ("Master"). Активирайте End Sub 

Как да обединим листа с помощта на този VBA макрос?

  1. Поставете нов лист и го наречете „Master“ в работната книга. Преименувайте го по -късно, ако искате.
  2. Вмъкнете модул във VBA редактор и копирайте над VBA кода.
  3. Стартирайте макроса.
  4. Ще бъдете помолени да изберете заглавия. Изберете заглавието и натиснете OK.

И е направено. Всички листове се обединяват в master.

Как работи?
Предполагам, че знаете основите на създаването на обекти и променливи във VBA. в първата част създадохме обект и променливи, които ще ни трябват в нашите операции.

Е, повечето от нещата, които обясних, използвайки коментари във vba код. Нека разгледаме основната част от този vba код.

За всеки ws В wb.Worksheets 'с изключение на главния лист от цикъл Ако ws.Name "Master" След това ws.Activate lastRow = Cells (Rows.Count, startCol) .End (xlUp) .Row lastCol = Cells (startRow, Columns. Count) .End (xlToLeft) .Column 'вземете данни от всеки работен лист и ги копирайте в Range Master List (Cells (startRow, startCol), Cells (lastRow, lastCol)). Copy _ mtr.Range ("A" & mtr. Клетки (редове. Брой, 1). Край (xlUp). Ред + 1) край, ако следващи ws

В по -ранни статии научихме как да преглеждаме листове и как да получим последния ред и колона с помощта на vba.

Тук преминаваме през всеки лист в основната работна книга, използвайки цикъл for.
За всеки ws В wb.Worksheets

След това изключваме „главен“ лист от цикъл, тъй като ще консолидираме данните си в този лист.

След това получаваме последния ред и последния номер на колоната.

Сега следващият ред е много важен. Направихме множество операции в един ред.
Диапазон (клетки (startRow, startCol), клетки (lastRow, lastCol)). Копирай _
mtr.Range ("A" & mtr.Cells (Rows.Count, 1) .End (xlUp) .Row + 1)

Първо формираме диапазон, използвайки startRow, startCol и lastRow и lastCol.

Обхват (клетки (startRow, startCol), клетки (lastRow, lastCol)) Копирахме го с помощта на метода за копиране на range. Диапазон (клетки (startRow, startCol), клетки (lastRow, lastCol)) Копиране Ние го поставихме директно в първата празна клетка след последната непразна клетка в колона А на главния лист (mtr.Cells (Rows.Count, 1). End (xlUp) .Row + 1). Диапазон (клетки (startRow, startCol), клетки (lastRow, lastCol)). Копирайте _ mtr.Range ("A" & mtr.Cells (Rows.Count, 1) .End (xlUp) .Row + 1)

Този цикъл работи за всички листове и копира данните от всеки лист в главен лист.

И накрая, в края на макроса активираме главния лист, за да видим изхода.

Така че да, момчета, ето как можете да обедините всеки лист в работна книга. Кажете ми, ако имате някакви запитвания относно този VBA код или някаква тема в Excel в секцията за коментари по -долу.
Свали файл:

Consolidate_Merge множество работни листове в един главен лист, използвайки VBA

Свързани статии:

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

как да получите последния ред и колона с помощта на vba

Изтриване на листове без подкани за потвърждение с помощта на VBA в Microsoft Excel

Добавяне и запазване на нова работна книга с помощта на VBA в Microsoft Excel 2016

Показване на съобщение в лентата за състоянието на Excel VBA

Изключете предупредителните съобщения с помощта на VBA в Microsoft Excel 2016

Популярни статии:

Функцията VLOOKUP в Excel

COUNTIF в Excel 2016

Как да използвате функцията SUMIF в Excel