Обједините/спојите више радних листова у један главни лист користећи ВБА

Anonim

Понекад желимо да спојимо више листова у један лист како бисмо могли лако анализирати податке и претворити их у неке корисне информације. Ови чланци ће вам рећи како спојити више радних листова у један радни лист помоћу ВБА.
Пример:

Овде сам преузео неке податке са сервера који враћају податке у различите радне листове. Додао сам још један лист и назвао га „Мастер“. Други називи листова нису битни.
Сада покрените овај макро.

Суб Мерге_Схеетс () Дим стартРов, стартЦол, ластРов, ластЦол Ас Лонг Дим хеадерс Ас Ранге 'Сет Мастер схеет фор цонсолидатион Сет мтр = Ворксхеетс ("Мастер") Сет вб = ТхисВоркбоок' Гет Хеадерс Сет хеадерс = Апплицатион.ИнпутБок ("Изаберите Хеадерс ", Типе: = 8) 'Цопи Хеадерс инто мастер хеадерс.Цопи мтр.Ранге (" А1 ") стартРов = хеадерс.Ров + 1 стартЦол = хеадерс.Цолумн Дебуг.Принт стартРов, стартЦол' петља кроз све листове За сваки вс У вб.Ворксхеетс 'осим главног листа из петље Ако вс.Наме "Мастер" Затим вс.Ацтивате ластРов = Целлс (Ровс.Цоунт, стартЦол) .Енд (клУп) .Ров ластЦол = Целлс (стартРов, Цолумнс.Цоунт). Енд (клТоЛефт). Цолумн 'гет дата фром еацх ворксхеет анд цопи ит инто Мастер схеет Ранге (Целлс (стартРов, стартЦол), Целлс (ластРов, ластЦол)). Цопи _ мтр.Ранге ("А" & мтр.Целлс (Ровс .Цоунт, 1) .Енд (клУп) .Ров + 1) Енд Иф Нект вс Ворксхеетс ("Мастер"). Ацтивате Енд Суб 

Како спојити листове помоћу овог ВБА макроа?

  1. Уметните нови лист и дајте му назив „Мастер“ у радној свесци. Преименујте га касније ако желите.
  2. Уметните модул у ВБА едитор и копирајте изнад ВБА кода.
  3. Покрените макро.
  4. Од вас ће се тражити да изаберете наслове. Изаберите наслов и притисните ОК.

И то је учињено. Сви листови су спојени у мастер.

Како то ради?
Претпостављам да знате основе стварања објеката и променљивих у ВБА. у првом делу смо креирали објекте и променљиве које ће нам бити потребне у нашим операцијама.

Па већину ствари које сам објаснио користећи коментаре у вба коду. Погледајмо главни део овог вба кода.

За сваки вс У вб.Ворксхеетс 'осим главног листа из петље Ако вс.Наме "Мастер" Затим вс.Ацтивате ластРов = Целлс (Ровс.Цоунт, стартЦол) .Енд (клУп) .Ров ластЦол = Целлс (стартРов, Цолумнс. Цоунт) .Енд (клТоЛефт) .Цолумн 'гет дата фром еацх ворксхеет анд цопи ит инто Мастер схеет Ранге (Целлс (стартРов, стартЦол), Целлс (ластРов, ластЦол)). Цопи _ мтр.Ранге ("А" & мтр. Ћелије (Ровс.Цоунт, 1) .Енд (клУп) .Ров + 1) Енд Иф Нект вс

У ранијим чланцима смо научили како да прелиставате листове и како да дођете до последњег реда и колоне помоћу вба.

Овде пролазимо кроз сваки лист у главној радној свесци користећи фор лооп.
За сваки вс У вб.Ворксхеетс

Затим искључујемо „главни“ лист из петље, јер ћемо консолидовати наше податке у том листу.

Затим добијамо последњи ред и последњи број колоне.

Сада је следећа линија веома важна. Урадили смо више операција у једној линији.
Опсег (ћелије (стартРов, стартЦол), ћелије (ластРов, ластЦол)). Копирај _
мтр.Ранге ("А" & мтр.Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ров + 1)

Прво формирамо опсег користећи стартРов, стартЦол и ластРов и ластЦол.

Опсег (ћелије (стартРов, стартЦол), ћелије (ластРов, ластЦол)) Копирали смо га користећи метод копирања опсега. Опсег (ћелије (стартРов, стартЦол), ћелије (ластРов, ластЦол)). Копирај Залепили смо га директно у прву празну ћелију после последње ћелије која није празна у колони А главног листа (мтр.Целлс (Ровс.Цоунт, 1) .Енд (клУп). Ред + 1). Опсег (ћелије (стартРов, стартЦол), ћелије (ластРов, ластЦол)). Копирај _ мтр.Ранге ("А" & мтр.Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ров + 1)

Ова петља ради за све листове и копира податке сваког листа у главни лист.

Коначно, на крају макроа активирамо главни лист да бисмо видели излаз.

Па да момци, овако можете спојити сваки лист у радној свесци. Јавите ми ако имате било каквих питања у вези овог ВБА кода или било које екцел теме у одељку за коментаре испод.
Скини докуменат:

Обједините_Мерге више радних листова у један главни лист користећи ВБА

Повезани чланци:

Како проћи кроз листове

како доћи до последњег реда и колоне помоћу вба

Брисање листова без упита за потврду помоћу ВБА у програму Мицрософт Екцел

Додајте и сачувајте нову радну свеску помоћу ВБА у програму Мицрософт Екцел 2016

Прикажите поруку на статусној траци програма Екцел ВБА

Искључите поруке упозорења помоћу ВБА у програму Мицрософт Екцел 2016

Популарни чланци:

Функција ВЛООКУП у Екцелу

ЦОУНТИФ у програму Екцел 2016

Како се користи функција СУМИФ у програму Екцел