Skopiuj UsedRange każdego arkusza do jednego arkusza za pomocą VBA w programie Microsoft Excel

Anonim

Jeśli chcesz skopiować używany zakres każdego arkusza roboczego do arkusza wzorcowego, powinieneś przeczytać ten artykuł. Użyjemy kodu VBA do skopiowania danych z każdego arkusza roboczego, a następnie wklejenia go w innym arkuszu bez nadpisywania.

Makro doda do skoroszytu arkusz o nazwie Master i skopiuje komórki z każdego arkusza w skoroszycie w tym arkuszu.

Pierwsze makro wykonuje normalną kopię, a drugie makro kopiuje wartości. Subskrypcje makra korzystają z poniższych funkcji; makro nie będzie działać bez funkcji.

Poniżej znajduje się migawka danych z Arkusza1 i Arkusza2:

Aby uruchomić edytor VB, musimy wykonać poniższe kroki:

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

  • Skopiuj poniższy kod w standardowym module
Sub CopyUsedRange() 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.UsedRange.Copy DestSh.Cells(Last + 1, 1 ) End If End If Next Application.ScreenUpdating = True Koniec Sub Sub CopyUsedRangeValues() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists("Master") = True Then MsgBox "Główny arkusz już istnieje" Exit Sub End 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.UsedRange DestSh.Cells(Last + 1, 1).Resize(.Rows.Count, _ .Columns.Count).Value = .Value Koniec z końcem, jeśli koniec, jeśli następny ap plication.ScreenUpdating = Funkcja True End 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 w przypadku błędu Przejdź do 0 Funkcja zakończenia funkcji Lastcol(sh As Worksheet) W przypadku błędu Wznów Dalej 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 Zakończ funkcję SheetExists(SName As String, _ Opcjonalne ByVal WB As Workbook) As Boolean W przypadku błędu Wznów Dalej Jeśli WB jest Nic, Następnie Ustaw WB = ThisWorkbook SheetExists = CBool(Len(Sheets(SName) . Nazwa)) funkcja zakończenia 

Teraz kod makra jest ustawiony; uruchomimy makro „CopyUsedRange” i wstawimy nowy arkusz „Master” i skopiujemy dane z każdego arkusza.

Wniosek:Kopiowanie danych z wielu arkuszy to zadanie ręczne; Jednakże; z powyższym kodem możemy skonsolidować dane jednym kliknięciem w makro.

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