Copiați CurrentRegion a unei celule a fiecărei foi într-o singură foaie folosind VBA în Microsoft Excel

Anonim

Dacă gestionați mai multe foi simultan și doriți să copiați date din fiecare coală într-o foaie de lucru principală, atunci ar trebui să citiți acest articol. Vom folosi proprietatea currentregion a codului VBA pentru a consolida datele din toate foile de lucru într-o singură foaie. Această proprietate este utilă pentru multe operații care extind automat selecția pentru a include întreaga regiune curentă, cum ar fi metoda AutoFormat. Această proprietate nu poate fi utilizată pe o foaie de lucru protejată.

Condiția este: fiecare foaie trebuie să conțină un format similar, adică același număr de coloane; folosind același format, putem avea date îmbinate cu precizie.

Vă rugăm să rețineți: acest articol va demonstra utilizarea codului VBA; dacă, din orice motiv, numărul de coloane diferă într-una din foi, atunci toate datele îmbinate nu vor oferi o imagine exactă. Este foarte recomandat să utilizați același număr de coloane. Codul VBA va adăuga o foaie nouă în registrul de lucru și apoi va copia și lipi datele după fiecare foaie fără a suprascrie.

Să luăm un exemplu de 3 foi, și anume ianuarie, februarie și martie. Următoarele sunt instantaneele acestor foi:

Pentru a combina datele din toate foile într-o singură foaie, trebuie să urmăm pașii de mai jos pentru a lansa editorul VB:

  • Faceți clic pe fila Dezvoltator
  • Din grupul de coduri, selectați Visual Basic

  • Copiați codul de mai jos în modulul standard
Sub CopyCurrentRegion () Dim sh Ca foaie de lucru Dim DestSh Ca foaie de lucru Dim Last At 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" Pentru fiecare sh din ThisWorkbook.Worksheets If sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Last = LastRow (DestSh) sh.Range ("A1"). CurrentRegion.Copy DestSh. Celule (Last + 1, 1) End If End If Next Application.ScreenUpdating = True End Sub Sub CopyCurrentRegionValues ​​() Dim sh As Sheet Works Dim DestSh As Worksheet Dim Last At Long If SheetExists ("Master") = True Then MsgBox "The sheet Master deja există „Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name =„ Master ”Pentru fiecare sh din ThisWorkbook.Worksheets If sh.Name DestSh.Name Atunci Dacă sh.UsedRange.Count> 1 Apoi 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 Sheet Works) On Error Reîncepe 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 Function Lastcol (sh As Sheet ) La eroare Reîncepeți Următorul Lastcol = sh.Cells.Find (What: = "*", _ After: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByColumns , _ SearchDirection: = xlPrevious, _ MatchCase: = False). Coloană la eroare GoTo 0 Funcție Funcție Foaie de funcționare Exista (SName Ca șir, _ Opțional ByVal WB ca registru de lucru) Ca Boolean la eroare Reîncepeți în continuare Dacă WB nu este nimic, atunci setați WB = ThisWorkbook SheetExists = CBool ​​(Len (Sheets (SName) .Name)) Funcția de finalizare 

CopyCurrentRegion macro va apela funcția „SheetExists” și va verifica dacă există un nume de foaie de lucru cu „Master”; dacă este găsit, atunci nu va face nimic, altfel va insera o foaie de lucru nouă în cartea de lucru activă și o va redenumi în „Master” și apoi va copia datele din toate foile.

Următoarele sunt instantaneele datelor consolidate:

Notă: exemplul de registru de lucru conține foaia de lucru principală; este sugerat să ștergeți foaia de lucru Master și apoi să rulați macrocomanda pentru a vedea cum funcționează codul VBA.

Concluzie:Acum avem codul pe care îl putem folosi pentru a transfera date din fiecare foaie de lucru într-o singură foaie.

Dacă ți-au plăcut blogurile noastre, împărtășește-le prietenilor tăi de pe Facebook. Și, de asemenea, ne puteți urmări pe Twitter și Facebook.

Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți, completa sau inova munca noastră și să o îmbunătățim. Scrieți-ne pe site-ul de e-mail