Kopējiet katras lapas šūnas CurrentRegion vienā lapā, izmantojot Microsoft Excel VBA

Anonim

Ja vienlaikus apstrādājat vairākas lapas un vēlaties kopēt datus no katras lapas galvenajā darblapā, jums jāizlasa šis raksts. Mēs izmantosim VBA koda pašreizējā reģiona rekvizītu, lai konsolidētu datus no visām darblapām vienā lapā. Šis rekvizīts ir noderīgs daudzām darbībām, kas automātiski paplašina atlasi, iekļaujot visu pašreizējo reģionu, piemēram, automātiskās formatēšanas metode. Šo rekvizītu nevar izmantot aizsargātā darblapā.

Nosacījums: katrai lapai jābūt līdzīga formāta, t.i., vienādam kolonnu skaitam; izmantojot to pašu formātu, mēs varam iegūt precīzi apvienotus datus.

Lūdzu, ņemiet vērā: šis raksts parādīs, izmantojot VBA kodu; ja kādu iemeslu dēļ kolonnu skaits vienā no lapām atšķiras, tad visi sapludinātie dati nedos precīzu priekšstatu. Ir ļoti ieteicams izmantot vienādu kolonnu skaitu. VBA kods pievienos darblapai jaunu lapu un pēc tam kopēs un ielīmēs datus pēc katras lapas, nepārrakstot.

Ņemsim piemēru no 3 lapām, proti, Jan, Feb & Mar. Tālāk ir sniegts šo lapu momentuzņēmums:

Lai apvienotu visu lapu datus vienā lapā, mums ir jāveic šādas darbības, lai palaistu VB redaktoru:

  • Noklikšķiniet uz cilnes Izstrādātājs
  • Kodu grupā atlasiet Visual Basic

  • Nokopējiet zemāk esošo kodu standarta modulī
Sub CopyCurrentRegion () Dim sh kā darblapa Dim DestSh kā darblapa Dim pēdējā tik ilgi, ja SheetExists ("Master") = True Tad MsgBox "Lapu šablons jau pastāv" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh .Name = "Master" Katram sh šajā ThisWorkbook.Worksheets If sh.Name DestSh.Name Then If sh.UsedRange.Count> 1 Then Last = LastRow (DestSh) sh.Range ("A1"). CurrentRegion.Copy DestSh. Šūnas (pēdējais + 1, 1) beidzas, ja beidzas, ja nākamā lietojumprogramma.ScreenUpdating = True End Sub Sub CopyCurrentRegionValues ​​() Dim sh kā darblapa Dim DestSh kā darblapa Dim pēdējā tik ilgi, ja SheetExists ("Master") = True, tad MsgBox "lapa Meistars jau eksistē "Iziet Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name =" Master "Par katru sh šajā ThisWorkbook.Worksheets If sh.Name DestSh.Name then If sh.UsedRange.Count> 1 Tad Last = LastRow (DestSh) Ar sh.Range ("A1"). CurrentRegion DestSh.Cells (Last + 1, 1) .Resize (.Rows.Count, _ .Columns.Count) .Value =. Vērtība beidzas ar beigas, ja beigas, ja nākamā lietojumprogramma.ScreenUpdating = Patiešām beigu apakšfunkcija LastRow (sh kā darblapa) Par kļūdu Atsākt nākamo LastRow = sh.Cells.Find (What: = "*", _ After: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByRows, _ SearchDirection: = xlPrevious, _ MatchCase: = False). ) Par kļūdu Atsākt nākamo Lastcol = sh.Cells.Find (What: = "*", _ After: = sh.Range ("A1"), _ Lookat: = xlPart, _ LookIn: = xlFormulas, _ SearchOrder: = xlByColumns , _ SearchDirection = SheetExists = CBool ​​(Len (Sheets (SName) .Name)) beigu funkcija 

CopyCurrentRegion makro izsauks funkciju “SheetExists” un pārbaudīs, vai ir darblapas nosaukums ar “Master”; ja tas tiks atrasts, tas neko nedos, pretējā gadījumā tas ievietos jaunu darblapu aktīvajā darbgrāmatā un pārdēvēs to par “Master” un pēc tam kopēs datus no visām lapām.

Tālāk ir sniegti konsolidēto datu momentuzņēmumi:

Piezīme. Darbgrāmatas paraugs satur galveno darblapu; ir ieteicams izdzēst galveno darblapu un pēc tam palaist makro, lai redzētu, kā darbojas VBA kods.

Secinājums:Tagad mums ir kods, ko varam izmantot, lai pārsūtītu datus no katras darblapas uz vienu lapu.

Ja jums patika mūsu emuāri, kopīgojiet to ar saviem draugiem Facebook. Un arī jūs varat sekot mums Twitter un Facebook.

Mēs labprāt uzklausītu jūsu viedokli, dariet mums zināmu, kā mēs varam uzlabot, papildināt vai ieviest jauninājumus mūsu darbā un uzlabot to jūsu labā. Rakstiet mums e -pasta vietnē