Як продублювати аркуш в Excel за допомогою VBA

  • Поділитися Цим
Michael Brown

У посібнику наведено колекцію макросів для дублювання аркушів в Excel: копіювання та перейменування на основі значення комірки, копіювання декількох аркушів, копіювання активного аркуша в інший файл, не відкриваючи його, та багато іншого.

Ручне копіювання аркушів в Excel досить швидке і просте... якщо виконувати його один-два рази. Дублювання декількох аркушів кілька разів нудне і забирає багато часу. На цій сторінці ви знайдете кілька корисних макросів для автоматизації цього завдання.

    Excel VBA для копіювання аркуша в нову книгу

    Цей найпростіший однорядковий макрос робить саме те, що випливає з його назви - копіює активний аркуш у нову книгу.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Копіювання декількох аркушів в Excel за допомогою VBA

    Якщо ви хочете скопіювати кілька аркушів з активної книги в нову, виділіть всі аркуші, які вас цікавлять, і запустіть цей макрос:

    Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End Sub

    Excel VBA для копіювання аркуша в іншу книгу

    Залежно від того, куди потрібно вставити скопійований аркуш, використовуйте один з наступних макросів.

    Копіювати аркуш на початок іншого робочого зошита

    Цей макрос копіює активний аркуш перед усіма іншими аркушами у файлі призначення, Книга 1 Для копіювання в інший файл замініть "Книга1.xlsx" на повне ім'я цільової робочої книги.

    Public Sub КопіюватиАркушНаПочатокІншоїКниги() активнийАркуш.КопіюватиПеред:=Книги("Книга1.xlsx" ).Аркуші(1) End Sub

    Копіювати аркуш в кінець іншого робочого зошита

    Цей фрагмент коду дублює активний аркуш і поміщає копію в кінець Книга 1 Знову ж таки, будь ласка, не забудьте замінити "Book1.xlsx" на назву вашої робочої книги призначення.

    Public Sub Копіювати аркуш в кінець іншої книги() активнийАркуш.КопіюватиПісля:=Робочікниги("Книга1.xlsx").Аркуші(Робочікниги("Книга1.xlsx").Аркуші.Лічильник) End Sub

    Примітка: Для роботи макросів цільова книга повинна бути збережена на жорсткому диску або в мережі.

    Копіювати аркуш у вибрану книгу

    Для того, щоб мати можливість копіювати поточний аркуш в будь-яку відкриту книгу, можна створити UserForm (з іменем UserForm1 ) з ListBox управління ( з іменем ListBox1 ) та дві кнопки:

    Далі двічі клацніть на формі та вставте наведений нижче код у вікні "Код":

    Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex> -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide EndSub

    Після того, як форма користувача створена, ви можете використовувати один з наступних макросів для копіювання активного аркуша в робочу книгу за вашим вибором.

    Копію аркуша направити на адресу початок обраної робочої книги :

    Public Sub CopySheetToBeginningAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End Sub

    Копію аркуша направити на адресу кінець обраної книги :

    Public Sub CopySheetToEndAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Unload UserForm1 End Sub

    При запуску в Excel макрос покаже список всіх відкритих на даний момент робочих книг. Вибираєте потрібну і натискаєте ОК:

    Макрос Excel для копіювання та перейменування аркуша

    При копіюванні аркуша в Excel копії присвоюється ім'я у форматі за замовчуванням на зразок Аркуш1 (2) Наступні макроси позбавлять вас від необхідності змінювати назву за замовчуванням вручну.

    Цей код дублює активний аркуш, називає копію "Тестовий аркуш" (ви можете замінити його будь-якою іншою назвою) і поміщає скопійований аркуш в кінець поточної книги.

    Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Test Sheet" End Sub

    Надати можливість користувачеві вкажіть назву для скопійованого аркуша використовуйте цей код:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Введіть ім'я для копійованого аркуша" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Після запуску макрос виводить на екран наступне вікно введення, в якому вводиться бажана назва та натискається ОК:

    Макрос Excel для копіювання аркуша та перейменування на основі значення комірки

    У деяких ситуаціях може бути зручніше назвати копію з конкретним значенням комірки, наприклад, заголовком стовпця. Для цього достатньо взяти наведений вище код і підставити значення полів поточна виділена комірка Як і в попередньому прикладі, копія буде розміщена в кінці активної книги.

    Найскладніша частина полягає в тому, щоб ваші користувачі завжди вибирали правильну комірку перед запуском макросу :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox("Введіть ім'я для копійованого аркуша" , "Копіювати аркуш" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Крім того, ви можете жорстко закодувати адресу комірки комірку А1 у наведеному нижче коді. Щоб назвати скопійований аркуш на основі іншої комірки, замініть А1 на відповідне посилання на комірку.

    Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range("A1" ).Value "" Then On Error Resume Next activeSheet.Name = wks.Range("A1" ).Value End If wks.Activate End Sub

    Макрос для копіювання аркуша в закриту книгу

    Даний макрос копіює активний аркуш в кінець закритої робочої книги. Ім'я іншої робочої книги в коді не вказується - макрос відкриє стандартне вікно Провідника Windows і дозволить вибрати будь-який файл призначення:

    Після того, як ви виберете файл і натиснете Відкрито макрос скопіює активний аркуш і автоматично закриє цільову книгу.

    Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Файли Excel (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Workbooks.Open (fileName) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)closedBook. Close ( True ) Application.ScreenUpdating = True End If End Sub

    Excel VBA для копіювання аркуша з іншої книги без відкриття

    Цей макрос дозволяє скопіювати аркуш з іншого файлу Excel, не відкриваючи його. Скопійований аркуш буде вставлений в кінець поточної книги.

    Просто не забудьте зробити пару замін в коді:

    • C:\Users\XXX\Documents\Target_Book.xlsx слід змінити на фактичний шлях та назву робочої книги, з якої потрібно скопіювати аркуш.
    • Лист1 слід замінити на назву листа, який потрібно скопіювати.
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Set sourceBook = Workbooks.Open ( "C:\Users\XXX\Documents\Target_Book.xlsx" ) sourceBook.Sheets( "Sheet1" ).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) sourceBook. Close Application.ScreenUpdating = True End Sub

    Excel VBA для багаторазового дублювання аркуша

    Іноді може виникнути потреба продублювати один і той самий аркуш декілька разів, наприклад, для перевірки різних формул на одному і тому ж наборі даних. Це можна легко зробити за допомогою наступного макросу.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Скільки копій активного аркуша ви хочете зробити?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Відкрийте вихідний аркуш, запустіть макрос, вкажіть, скільки копій активного аркуша потрібно зробити, і натисніть кнопку ГАРАЗД. :

    Як дублювати аркуші в Excel за допомогою VBA

    Щоб скопіювати аркуш в Excel за допомогою одного з наведених вище макросів, ви можете або вставити код VBA у власну книгу, або запустити макрос з нашого прикладу робочої книги.

    Як додати макрос в книгу

    Щоб вставити код у свою робочу книгу, виконайте такі дії:

    1. Відкрийте аркуш, який потрібно скопіювати.
    2. Натисніть Alt + F11, щоб відкрити редактор Visual Basic.
    3. На лівій панелі натисніть правою кнопкою миші ThisWorkbook , а потім натисніть Вставка > Модуль .
    4. Вставте код у вікні Код.
    5. Натисніть F5, щоб запустити макрос.

    Детальну покрокову інструкцію див. у статті Як вставити код VBA в Excel.

    Як запустити макрос з нашого прикладу книги

    Крім того, ви можете завантажити наш зразок робочої книги в Дублювати таблиці Excel і запустити код звідти.

    Зразок робочої книги містить наступні макроси:

    Копіювати аркуш у нову книгу - копіює поточний аркуш в нову книгу.

    Копіювати виділені аркуші - копіює кілька вибраних аркушів у нову книгу.

    Копіювати аркуш на початок іншої книги - копіює активний аркуш на початок іншої книги.

    Копіювати аркуш в кінець іншої книги - копіює активний аркуш в кінець іншого файлу Excel.

    CopySheetAndRename - дублює поточний аркуш, перейменовує його так, як вказано користувачем, і поміщає копію після всіх інших аркушів у поточній книзі.

    CopySheetAndRenamePredefined - дублює активний аркуш, присвоює копії жорстко кодоване ім'я та розміщує її в кінці поточної робочої книги.

    Копіювати аркуш і перейменувати по коміркам - робить копію активного аркуша і перейменовує її на основі значення виділеної комірки.

    Копіювати аркуш і перейменувати по комірці2 - копіює активний аркуш і перейменовує його на основі жорстко заданої адреси комірки.

    Копіювати аркуш у закриту книгу - дозволяє копіювати аркуш в закриту книгу.

    Копіювати аркуш із закритої книги - дозволяє скопіювати аркуш з іншого файлу Excel, не відкриваючи його.

    DuplicateSheetMultipleTimes - дозволяє дублювати аркуш в Excel кілька разів.

    Щоб запустити макрос в Excel, виконайте наступні дії:

    1. Відкрийте завантажену робочу книгу та увімкніть вміст, якщо з'явиться відповідний запит.
    2. Відкрийте власну книгу та перейдіть на аркуш, який ви хочете скопіювати.
    3. На робочому аркуші натисніть Alt + F8, виберіть макрос, який вас цікавить, і клацніть Біжи .

    Ось так можна продублювати аркуш в Excel за допомогою VBA. Дякую за прочитання і сподіваюся побачити вас на нашому блозі наступного тижня!

    Майкл Браун — відданий ентузіаст технологій із пристрастю до спрощення складних процесів за допомогою програмних засобів. Маючи понад десятирічний досвід роботи в технологічній індустрії, він відточив свої навички роботи з Microsoft Excel і Outlook, а також із Google Таблицями та Документами. Блог Майкла присвячений тому, щоб поділитися своїми знаннями та досвідом з іншими, надаючи прості поради та навчальні посібники для підвищення продуктивності та ефективності. Незалежно від того, чи є ви досвідченим професіоналом чи початківцем, блог Майкла пропонує цінну інформацію та практичні поради щодо отримання максимальної користі від цих основних програмних інструментів.