Kopiera CurrentRegion för en cell i varje ark till ett ark med VBA i Microsoft Excel

Anonim

Om du hanterar flera ark samtidigt och du vill kopiera data från varje ark till ett huvudarkblad bör du läsa den här artikeln. Vi kommer att använda den nuvarande egenskapen VBA -kod för att konsolidera data från alla kalkylblad till ett enda blad. Den här egenskapen är användbar för många operationer som automatiskt utökar urvalet till att omfatta hela den aktuella regionen, till exempel AutoFormat -metoden. Den här egenskapen kan inte användas på ett skyddat kalkylblad.

Villkoret är: varje ark ska innehålla liknande format, dvs samma antal kolumner; med samma format kan vi ha exakt sammanslagna data.

Observera: denna artikel visar hur du använder VBA -kod; om antalet kolumner av någon anledning skiljer sig åt i ett av arken så kommer inte alla sammanslagna data att ge en korrekt bild. Det rekommenderas starkt att använda samma antal kolumner. VBA -koden lägger till ett nytt ark i arbetsboken och kopierar sedan och klistrar in data efter varje ark utan att skriva över.

Låt oss ta ett exempel på tre ark, nämligen Jan, Feb & Mar. Följande är ögonblicksbilden av dessa blad:

För att kombinera data från alla blad till ett ark måste vi följa stegen nedan för att starta VB -editor:

  • Klicka på fliken Utvecklare
  • Välj Visual Basic i kodgruppen

  • Kopiera koden nedan 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 exist" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh .Name = "Master" för varje 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. Cells (Last + 1, 1) End If End If Next Application.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 existerar redan "Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name =" Master "För varje sh i ThisWorkbook.Worksheets If sh.Name DestSh.Name Sedan Om sh.UsedRange.Count> 1 Då 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) .Row On Error GoTo 0 Avsluta funktion Funktion Lastcol (sh Som kalkylblad) ) Vid fel Återuppta nästa 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, _ Valfri ByVal WB Som arbetsbok) Som Boolean On Error Resume Next If WB is Nothing Then Set WB = ThisWorkbook SheetExists = CBool ​​(Len (Sheets (SName) .Name)) End Function 

CopyCurrentRegion -makrot kommer att kalla "SheetExists" -funktionen & kommer att kontrollera om det finns ett kalkylblad med "Master"; om den hittas gör den ingenting, annars kommer den att infoga nytt kalkylblad i den aktiva arbetsboken och byta namn till "Master" och sedan kommer den att kopiera data från alla blad.

Följande är ögonblicksbilderna av konsoliderade data:

Obs! Exempel på arbetsbok innehåller huvudark; det föreslås att ta bort huvudarket och sedan köra makrot för att se VBA -koden fungerar.

Slutsats:Nu har vi koden som vi kan använda för att överföra data från varje kalkylblad till ett ark.

Om du gillade våra bloggar, dela den med dina vänner på Facebook. Och du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra, komplettera eller förnya vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen