Ak pracujete s viacerými listami súčasne a chcete skopírovať údaje z každého listu do hlavného hárka, mali by ste si prečítať tento článok. Na konsolidáciu údajov zo všetkých hárkov do jedného listu použijeme vlastnosť currentregion kódu VBA. Táto vlastnosť je užitočná pre mnoho operácií, ktoré automaticky rozšíria výber tak, aby zahŕňal celú aktuálnu oblasť, napríklad pre metódu AutoFormat. Túto vlastnosť nie je možné použiť v chránenom hárku.
Podmienkou je: každý list by mal mať podobný formát, t.j. rovnaký počet stĺpcov; pomocou rovnakého formátu môžeme mať presne zlúčené údaje.
Poznámka: tento článok bude demonštrovať používanie kódu VBA; ak sa z akéhokoľvek dôvodu počet stĺpcov líši v jednom z hárkov, potom celé zlúčené údaje neposkytnú presný obraz. Dôrazne sa odporúča používať rovnaký počet stĺpcov. Kód VBA pridá nový hárok do zošita a potom skopíruje a prilepí údaje za každý hárok bez prepísania.
Zoberme si príklad 3 hárkov, konkrétne Jan, Feb & Mar. Nasleduje prehľad týchto hárkov:
Ak chcete skombinovať údaje zo všetkých hárkov do jedného hárka, musíme pri spustení editora VB vykonať nasledujúce kroky:
- Kliknite na kartu Vývojár
- Zo skupiny kódov vyberte Visual Basic
- Skopírujte nižšie uvedený kód do štandardného modulu
Vedľajšia kópiaCurrentRegion () Dim sh ako pracovný hárok Dim DestSh ako pracovný hárok Dim Last As Long Dim 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" pre 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. Bunky (posledné + 1, 1) Koniec, ak koniec, Nasledujúca aplikácia.ScreenUpdating = True End Sub Sub CopyCurrentRegionValues () Dim sh As Worksheet Dim DestSh As worksheet Dim Last As Long If SheetExists ("Master") = True Then MsgBox "the sheet Master už existuje "Ukončiť 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 Koniec s koncom, ak s koncom, ak s ďalšou Application.ScreenUpdating = True End Sub Funkcia 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). Riadok pri chybe GoTo 0 Koniec Funkcia Funkcia Lastcol (sh As pracovný list ) On Error Resume Next Lastcol = sh.Cells.Find (What: = "*", _ After: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByColumns , _ SearchDirection: = xlPrevious, _ MatchCase: = False). Stĺpec pri chybe GoTo 0 Koniec Funkcia Funkcia SheetExists (SName ako reťazec, _ voliteľný ByVal WB ako zošit) Ako boolean pri chybe Pokračovať ďalej Ak WB nie je nič, potom nastavte WB = ThisWorkbook SheetExists = CBool (Len (Sheets (SName) .Name)) Koniec funkcie
Makro CopyCurrentRegion bude volať funkciu „SheetExists“ a skontroluje, či existuje názov pracovného hárka s „predlohou“; ak sa nájde, neurobí nič, inak vloží nový pracovný hárok do aktívneho zošita a premenuje ho na „Master“ a potom skopíruje údaje zo všetkých hárkov.
Nasledujú snímky konsolidovaných údajov:
Poznámka: Vzorový zošit obsahuje hlavný pracovný list; Odporúča sa odstrániť hlavný pracovný hárok a potom spustiť makro, aby kód VBA fungoval.
Záver:Teraz máme kód, ktorý môžeme použiť na prenos údajov z každého pracovného hárka do jedného listu.
Ak sa vám páčili naše blogy, zdieľajte ich so svojimi priateľmi na Facebooku. A tiež nás môžete sledovať na Twitteri a Facebooku.
Radi by sme vás počuli, dajte nám vedieť, ako môžeme zlepšiť, doplniť alebo inovovať našu prácu a zlepšiť ju pre vás. Napíšte nám na emailovú stránku