Zkopírujte UsedRange každého listu na jeden list pomocí VBA v Microsoft Excelu

Anonim

V případě, že chcete zkopírovat použitý rozsah každého listu na hlavní list, měli byste si přečíst tento článek. Pomocí kódu VBA zkopírujeme data z každého listu a poté je vložíme do jiného listu bez přepsání.

Makro přidá do sešitu list s názvem Hlavní a zkopíruje buňky z každého listu ve vašem sešitu v tomto listu.

První makro provede normální kopírování a druhé makro zkopíruje hodnoty. Sub ponorky makra používají níže uvedené funkce; makra nebudou fungovat bez funkcí.

Následuje snímek dat z Listu 1 a Listu 2:

Ke spuštění editoru VB musíme postupovat podle následujících kroků:

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

  • Zkopírujte níže uvedený kód do standardního modulu
Sub CopyUsedRange () Dim sh As Asheet Dim 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.UsedRange.Copy DestSh.Cells (Last + 1, 1 ) End If End If Next Application.ScreenUpdating = True End Sub Sub CopyUsedRangeValues ​​() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last Long If If SheetExists ("Master") = True Then MsgBox "The sheet already already" 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 Last = LastRow (DestSh) With sh.UsedRange DestSh.Cells (Last + 1, 1) .Resize (.Rows.Count, _ .Columns.Count) .Value = .Value End With End If End If Next Ap plication.ScreenUpdating = True 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 Funkce 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). Sloupec při chybě GoTo 0 Konec Funkce Funkce SheetExists (SName jako řetězec, _ Volitelné ByVal WB jako sešit) Jako Boolean Při chybě Pokračovat Další Pokud WB není nic, pak nastavte WB = ThisWorkbook SheetExists = CBool ​​(Len (Sheets (SName) .Name)) Koncová funkce 

Nyní je nastaven kód makra; spustíme makro „CopyUsedRange“ a vloží nový list „Master“ a zkopíruje data z každého listu.

Závěr:Kopírování dat z více listů je manuální úkol; nicméně; s výše uvedeným kódem můžeme data konsolidovat jediným kliknutím na makro.

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