Kopeerige iga lehe lahtri CurrentRegion ühele lehele, kasutades Microsoft Excelis VBA -d

Anonim

Kui käsitlete korraga mitut lehte ja soovite kopeerida andmed igalt lehelt töölehele, peaksite seda artiklit lugema. Kasutame VBA koodi praeguse piirkonna omadust, et koondada kõigi töölehtede andmed ühele lehele. See atribuut on kasulik paljude toimingute puhul, mis laiendavad valikut automaatselt kogu praegusele piirkonnale, näiteks automaatvormingu meetod. Seda atribuuti ei saa kasutada kaitstud töölehel.

Tingimus on järgmine: igal lehel peaks olema sarnane vorming, st sama arv veerge; sama vormingu abil saame andmeid täpselt ühendada.

Pange tähele: see artikkel näitab VBA koodi kasutamist; kui mingil põhjusel on veergude arv ühel lehel erinev, ei anna kogu ühendatud andmed täpset pilti. Soovitatav on kasutada sama arvu veerge. VBA -kood lisab töövihikusse uue lehe ning kopeerib ja kleepib andmed pärast iga lehte ülekirjutamata.

Võtame näiteks kolm lehte, nimelt Jan, Veebruar ja Märts. Järgnevalt on toodud nende lehtede ülevaade:

Kõigi lehtede andmete ühendamiseks üheks leheks peame VB redaktori käivitamiseks järgima järgmisi samme:

  • Klõpsake vahekaarti Arendaja
  • Valige koodigrupist Visual Basic

  • Kopeerige allolev kood standardmoodulisse
Sub CopyCurrentRegion () Dim sh kui tööleht Dim DestSh kui tööleht Dim viimati nii kaua kui SheetExists ("Master") = True Siis MsgBox "Lehe kapten on juba olemas" Exit Sub End if Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh .Name = "Master" Iga sh jaoks selles töövihikus. Töölehed Kui sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Last = LastRow (DestSh) sh.Range ("A1"). CurrentRegion.Copy DestSh. Lahtrid (viimane + 1, 1) Lõpevad, kui lõpevad, kui järgmine rakendus.ScreenUpdating = Tõeline lõpp Alam alamkoopia CopyCurrentRegionValues ​​() Dim sh kui tööleht Dim DestSh kui tööleht Dim nii kaua kui SheetExists ("Master") = True Siis MsgBox "Leht Master on juba olemas "Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name =" Master "Iga sh jaoks käesolevas töövihikus.Worksheets If sh.Name DestSh.Name then If sh.UsedRange.Count> 1 Siis Last = LastRow (DestSh) koos sh.Range ("A1"). CurrentRegion DestSh.Cells (Last + 1, 1) .Resize (.Rows.Count, _ .Columns.Count) .Value = .Väärtus lõpeb lõpuga kui lõpp, kui järgmine rakendus.ScreenUpdating = Tõeline lõpp alamfunktsioon LastRow (sh töölehena) vea korral Jätka järgmist lastRow = sh.Cells.Find (What: = "*", _ After: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByRows, _ SearchDirection: = xlPrevious, _ MatchCase: = False). ) Vea korral Jätka järgmisel Lastcol = sh.Cells.Find (Mis: = "*", _ Pärast: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByColumns , _ SearchDirection: = xlPrevious, _ MatchCase: = False). Veerg vea kohta GoTo 0 End Function FunktsioonilehtExists (SName as String, _ Optional ByVal WB as Workbook) Boolean On Error Resume Next if WB is Nothing then Set WB = ThisWorkbook SheetExists = CBool ​​(Len (Sheets (SName) .Name)) End Function 

CopyCurrentRegioni makro kutsub funktsiooni „SheetExists“ ja kontrollib, kas töölehe nimi on „Master“; kui see leitakse, ei tee see midagi, vastasel juhul lisab see aktiivse töövihiku uue töölehe ja nimetab selle ümber „Master” -iks ning seejärel kopeerib andmed kõikidelt lehtedelt.

Allpool on koondandmete hetktõmmised:

Märkus: Töövihiku näidis sisaldab põhitöölehte; VBA -koodi töötamiseks on soovitatav kustutada põhitööleht ja seejärel käivitada makro.

Järeldus:Nüüd on meil kood, mille abil saame andmeid igalt töölehelt ühele lehele üle kanda.

Kui teile meeldisid meie ajaveebid, jagage seda oma sõpradega Facebookis. Samuti saate meid jälgida Twitteris ja Facebookis.

Tahaksime sinust kuulda, andke meile teada, kuidas saaksime oma tööd täiustada, täiendada või uuendada ning muuta see teie jaoks paremaks. Kirjuta meile meilisaidile