Zkopírujte CurrentRegion buňky každého listu na jeden list pomocí VBA v aplikaci Microsoft Excel

Anonim

Pokud zpracováváte více listů najednou a chcete zkopírovat data z každého listu do hlavního listu, měli byste si přečíst tento článek. Vlastnost currentregion kódu VBA použijeme ke konsolidaci dat ze všech listů do jednoho listu. Tato vlastnost je užitečná pro mnoho operací, které automaticky rozbalí výběr tak, aby zahrnoval celou aktuální oblast, jako je například metoda AutoFormat. Tuto vlastnost nelze použít na chráněném listu.

Podmínkou je: každý list by měl obsahovat podobný formát, tj. Stejný počet sloupců; pomocí stejného formátu můžeme mít přesně sloučená data.

Poznámka: tento článek předvede použití kódu VBA; pokud se z jakéhokoli důvodu liší počet sloupců v jednom z listů, pak celá sloučená data neposkytnou přesný obraz. Důrazně doporučujeme použít stejný počet sloupců. Kód VBA přidá nový list do sešitu a poté zkopíruje a vloží data za každý list bez přepsání.

Vezměme si příklad 3 listů, jmenovitě leden, únor a březen. Následuje přehled těchto listů:

Chcete -li zkombinovat data ze všech listů do jednoho listu, musíme ke spuštění VB editoru provést následující kroky:

  • Klikněte na kartu Vývojář
  • Ze skupiny kódů vyberte Visual Basic

  • Zkopírujte níže uvedený kód do standardního modulu
Dílčí CopyCurrentRegion () Dim sh As Asheet Dim DestSh As Worksheet Dim Last As Long If SheetExists ("Master") = True Then MsgBox "The sheet Master already exist" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh .Name = "Master" Pro každý sh In ThisWorkbook.Worksheets If sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Last = LastRow (DestSh) sh.Range ("A1"). CurrentRegion.Copy DestSh. Buňky (poslední + 1, 1) Konec Pokud Konec Pokud Další Application.ScreenUpdating = True End Sub Sub CopyCurrentRegionValues ​​() Dim sh As As worksheet Dim DestSh As worksheet Dim Last As Long If SheetExists ("Master") = True Then MsgBox "the sheet Master již existuje "Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name =" Master "For each sh In ThisWorkbook.Worksheets If sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Then Last = LastRow (DestSh) With sh.Range ("A1"). CurrentRegion DestSh.Cells (Last + 1, 1) .Resize (.Rows.Count, _ .Columns.Count) .Value = .Hodnota Konec Koncem Pokud Konec Pokud Další Application.ScreenUpdating = True End Sub Funkce LastRow (sh As list) Při chybě Pokračovat Další LastRow = sh.Cells.Find (What: = "*", _ After: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByRows, _ SearchDirection: = xlPrevious, _ MatchCase: = False). Řádek při chybě GoTo 0 Konec Funkce Funkce Lastcol (sh As list ) 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 Function SheetExists (SName As String, _ Volitelné ByVal WB As Workbook) As Boolean On Error Resume Next If WB Is Nothing Then Set WB = ThisWorkbook SheetExists = CBool ​​(Len (Sheets (SName) .Name)) Koncová funkce 

Makro CopyCurrentRegion bude volat funkci „SheetExists“ a zkontroluje, zda existuje název listu s „Master“; pokud je nalezen, neudělá nic, jinak vloží nový list do aktivního sešitu a přejmenuje jej na „Hlavní“ a poté zkopíruje data ze všech listů.

Níže jsou uvedeny snímky konsolidovaných dat:

Poznámka: Ukázkový sešit obsahuje hlavní pracovní list; doporučuje se odstranit hlavní list a poté spustit makro, aby kód VBA fungoval.

Závěr:Nyní máme kód, který můžeme použít k přenosu dat z každého listu na jeden list.

Pokud se vám naše blogy líbily, sdílejte je se svými přáteli na Facebooku. A 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, doplnit nebo inovovat naši práci a zlepšit ji pro vás. Napište nám na e -mail