Kopier CurrentRegion av en celle i hvert ark til ett ark ved hjelp av VBA i Microsoft Excel

Anonim

Hvis du håndterer flere ark samtidig, og du vil kopiere data fra hvert ark til et hovedark, bør du lese denne artikkelen. Vi vil bruke currentregion -egenskapen til VBA -kode for å konsolidere data fra alle regnearkene til et enkelt ark. Denne egenskapen er nyttig for mange operasjoner som automatisk utvider utvalget til å omfatte hele gjeldende region, for eksempel AutoFormat -metoden. Denne egenskapen kan ikke brukes på et beskyttet regneark.

Betingelsen er: hvert ark skal inneholde lignende format, dvs. samme antall kolonner; Ved å bruke samme format kan vi ha nøyaktig sammenslåtte data.

Vær oppmerksom på: denne artikkelen viser hvordan du bruker VBA -kode; Hvis antallet kolonner av en eller annen grunn er forskjellige i ett av arkene, vil ikke de sammenslåtte dataene gi et nøyaktig bilde. Det anbefales på det sterkeste å bruke samme antall kolonner. VBA -koden vil legge til et nytt ark i arbeidsboken og deretter kopiere og lime inn dataene etter hvert ark uten å overskrive.

La oss ta et eksempel på 3 ark, nemlig Jan, Feb & Mar. Følgende er øyeblikksbildet av disse arkene:

For å kombinere data fra alle arkene til ett ark, må vi følge trinnene nedenfor for å starte VB -editor:

  • Klikk på kategorien Utvikler
  • Velg Visual Basic fra kodegruppen

  • Kopier koden nedenfor i standardmodulen
Sub CopyCurrentRegion () Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists ("Master") = True Then MsgBox "Sheet Master exist already" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh .Name = "Master" for hver sh i ThisWorkbook.Worksheets If sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Last = LastRow (DestSh) sh.Range ("A1"). CurrentRegion.Copy DestSh. Celler (Siste + 1, 1) Slutt hvis slutt Hvis neste program.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 eksisterer allerede "Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name =" Master "For hver sh i ThisWorkbook.Worksheets If sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Last = LastRow (DestSh) With sh.Range ("A1"). CurrentRegion DestSh.Cells (Last + 1, 1) .Resize (.Rows.Count, _ .Columns.Count) .Value = .Value End With End If End If Next Application.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) .Rad på feil GoTo 0 Sluttfunksjon Funksjon Lastcol (sh Som regneark ) Ved feil 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 Sluttfunksjon Funksjon SheetExists (SName As String, _ Valgfri ByVal WB som arbeidsbok) Som Boolean On Error Resume Next If WB Is Nothing Then Set WB = ThisWorkbook SheetExists = CBool ​​(Len (Sheets (SName) .Name)) Sluttfunksjon 

CopyCurrentRegion -makroen kaller “SheetExists” -funksjonen og sjekker om det er et regnearknavn som har “Master”; Hvis den blir funnet, vil den ikke gjøre noe, ellers vil den sette inn nytt regneark i den aktive arbeidsboken og gi den nytt navn til "Master", og deretter vil den kopiere data fra alle arkene.

Følgende er øyeblikksbilder av konsoliderte data:

Merk: Eksempel på arbeidsbok inneholder hovedark; det foreslås å slette hovedarket og deretter kjøre makroen for å se VBA -koden fungerer.

Konklusjon:Nå har vi koden vi kan bruke til å overføre data fra hvert regneark til ett ark.

Hvis du likte bloggene våre, del den med vennene dine på Facebook. Og du kan også følge oss på Twitter og Facebook.

Vi vil gjerne høre fra deg, gi oss beskjed om hvordan vi kan forbedre, utfylle eller innovere arbeidet vårt og gjøre det bedre for deg. Skriv til oss på e -post