Zkopírujte rozsah z každého listu na jeden list pomocí VBA v aplikaci Microsoft Excel

Anonim

V tomto článku vytvoříme makro pro kopírování dat ze všech listů v sešitu na nový list.

Nezpracovaná data pro tento příklad obsahují podrobnosti o zaměstnancích z různých oddělení v různých listech. Chceme konsolidovat podrobnosti o zaměstnancích do jednoho listu.

Pro konsolidaci dat jsme vytvořili makro „CopyRangeFromMultipleSheets“. Toto makro lze spustit kliknutím na tlačítko „Konsolidovat data“.

Makro vytvoří nový list a vloží konsolidovaná data ze všech listů.

Vysvětlení kódu

'Smyčkou' přes všechny listy zkontrolujte, zda existuje list "Hlavní".

Pro každý zdroj v ThisWorkbook.Worksheets

Pokud Source.Name = "Master" Pak

MsgBox „Hlavní list již existuje“

Ukončit dílčí

Konec If

další

Výše uvedený kód slouží ke kontrole, zda v sešitu existuje list „Hlavní“. Pokud v sešitu existuje list „Hlavní“, kód se ukončí a zobrazí se chybová zpráva.

Source.Range ("A1"). SpecialCells (xlLastCell) .Row

Výše uvedený kód se používá k získání čísla řádku poslední buňky v listu.

Source.Range ("A1", Range ("A1"). SpecialCells (xlLastCell)). Copy Destination.Range ("A" & DestLastRow)

Výše uvedený kód se používá ke zkopírování zadaného rozsahu do definované buňky.

Pro kód prosím postupujte níže

 Sub CopyRangeFromMultipleSheets () 'Deklarace proměnných Dim Source jako list Dim Dest Destination As Worksheet Dim SourceLastRow, DestLastRow As Long Application.ScreenUpdating = False' Looping through all sheets to check whether "Master" sheet exist For each Source In ThisWorkbook.Worksheets If Source.Name = "Master" Pak MsgBox "Hlavní list již existuje" Ukončit Sub End If Next 'Vložení nového listu za „Hlavní“ list Nastavit cíl = Pracovní listy.Přidat (po: = Listy („Hlavní“)) Destination.Name = " Master "'Smyčka přes všechny listy v sešitu pro každý zdroj v ThisWorkbook.Worksheets' Prevening konsolidation of data from" Main "and" Master "sheet If Source.Name" Main "And Source.Name" Master "Then SourceLastRow = Source .Range ("A1"). SpecialCells (xlLastCell) .Row Source.Activate If Source.UsedRange.Count> 1 Then DestLastRow = Sheets ("Master"). Range ("A1"). SpecialCells (xlLastCell) .Row If DestLastRow = 1 Potom 'kopírování dat ze zdrojového listu do cílového listu Source.Range ("A 1 ", Range (" A1 "). SpecialCells (xlLastCell)). Copy Destination.Range (" A "& DestLastRow) Else Source.Range (" A2 ", Range (" A1 "). SpecialCells (xlCellTypeLastCell)). Copy Destination.Range ("A" & (DestLastRow + 1)) End If End If End If Next Destination.Activate Application.ScreenUpdating = True End Sub 

Pokud se vám tento blog líbil, sdílejte ho se svými přáteli na Facebooku. Také nás můžete sledovat na Twitteru a Facebooku.

Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit naši práci a zlepšit ji pro vás. Napište nám na e -mail