Skopiuj CurrentRegion komórki każdego arkusza do jednego arkusza za pomocą VBA w programie Microsoft Excel

Anonim

Jeśli obsługujesz wiele arkuszy jednocześnie i chcesz skopiować dane z każdego arkusza do głównego arkusza roboczego, powinieneś przeczytać ten artykuł. Użyjemy właściwości currentregion kodu VBA, aby skonsolidować dane ze wszystkich arkuszy roboczych w jednym arkuszu. Ta właściwość jest przydatna w przypadku wielu operacji, które automatycznie rozszerzają wybór tak, aby obejmował cały bieżący region, takich jak metoda AutoFormat. Ta właściwość nie może być używana w chronionym arkuszu.

Warunkiem jest: każdy arkusz powinien zawierać podobny format, czyli taką samą liczbę kolumn; przy użyciu tego samego formatu możemy dokładnie scalić dane.

Uwaga: ten artykuł zademonstruje użycie kodu VBA; jeśli z jakiegoś powodu liczba kolumn w jednym z arkuszy różni się, to całe scalone dane nie dadzą dokładnego obrazu. Zdecydowanie zaleca się użycie tej samej liczby kolumn. Kod VBA doda nowy arkusz do skoroszytu, a następnie skopiuje i wklei dane po każdym arkuszu bez nadpisywania.

Weźmy przykład 3 arkuszy, a mianowicie Jan, luty i marzec. Poniżej znajduje się migawka tych arkuszy:

Aby połączyć dane ze wszystkich arkuszy w jeden arkusz, musimy wykonać poniższe kroki, aby uruchomić edytor VB:

  • Kliknij kartę Deweloper
  • Z grupy Kod wybierz Visual Basic

  • Skopiuj poniższy kod w standardowym module
Sub CopyCurrentRegion() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists("Wzorzec") = True Then MsgBox "Wzorzec arkusza już istnieje" Zakończ Sub End If Application.ScreenUpdating = False Ustaw DestSh = Worksheets.Add DestSh .Name = "Master" dla każdego sh In 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 "Arkusz Wzorzec już istnieje" Zakończ Sub Koniec If Application.ScreenUpdating = False Ustaw DestSh = Worksheets.Add DestSh.Name = "Wzorzec" dla każdego sh In 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 Funkcja podrzędna LastRow(sh As Worksheet) W przypadku błędu Wznów Następny LastRow = sh.Cells.Find(What:="*", _ After:=sh.Range („A1”), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False). Wiersz po błędzie Przejdź do 0 Funkcja zakończenia Funkcja Lastcol(sh As Worksheet) ) W przypadku błędu Wznów następny Lastcol = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns , _ SearchDirection:=xlPrevious, _ MatchCase:=False).Kolumna w przypadku błędu Przejdź do 0 Funkcja zakończenia funkcji SheetExists(SName As String, _ Opcjonalne ByVal WB jako skoroszyt) Jako wartość logiczna w przypadku błędu Wznów dalej, jeśli WB jest niczym, a następnie ustaw WB = ThisWorkbook SheetExists = CBool(Len(Arkusze(SName).Name)) Funkcja zakończenia 

Makro CopyCurrentRegion wywoła funkcję „SheetExists” i sprawdzi, czy istnieje nazwa arkusza roboczego zawierająca „Master”; jeśli zostanie znaleziony, nic nie zrobi, w przeciwnym razie wstawi nowy arkusz roboczy do aktywnego skoroszytu i zmieni jego nazwę na „Master”, a następnie skopiuje dane ze wszystkich arkuszy.

Poniżej znajdują się migawki danych skonsolidowanych:

Uwaga: Przykładowy skoroszyt zawiera arkusz wzorcowy; sugeruje się usunięcie arkusza głównego, a następnie uruchomienie makra, aby zobaczyć, jak działa kod VBA.

Wniosek:Teraz mamy kod, którego możemy użyć do przeniesienia danych z każdego arkusza roboczego do jednego arkusza.

Jeśli podobały Ci się nasze blogi, podziel się nimi ze znajomymi na Facebooku. A także możesz śledzić nas na Twitterze i Facebooku.

Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy ulepszyć, uzupełnić lub unowocześnić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail