Как дублировать лист в 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 в данном примере. Чтобы скопировать в другой файл, замените "Book1.xlsx" на полное имя целевой рабочей книги.

    Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks("Book1.xlsx" ).Sheets(1) End Sub

    Копирование листа в конец другой рабочей книги

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

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks("Book1.xlsx" ).Sheets(Workbooks("Book1.xlsx" ).Worksheets.Count) End Sub

    Примечание. Чтобы макросы работали, целевая рабочая книга должна быть сохранена на жестком диске или в сети.

    Копирование листа в выбранную рабочую книгу

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

    Затем дважды щелкните по форме и вставьте приведенный ниже код в окно Code:

    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

    После создания UserForm вы можете использовать один из следующих макросов для копирования активного листа в выбранную вами рабочую книгу.

    Копировать лист на начало выбранной рабочей книги :

    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 макрос покажет список всех открытых в данный момент рабочих книг. Вы выбираете нужную и нажимаете OK:

    Макрос Excel для копирования листа и переименования

    Когда вы копируете лист в Excel, копии присваивается имя в формате по умолчанию, например Лист1 (2) Следующие макросы избавят вас от необходимости менять имя по умолчанию вручную.

    Этот код дублирует активный рабочий лист, присваивает копии имя "Test Sheet" (вы можете заменить его на любое другое имя) и помещает скопированный лист в конец текущей рабочей книги.

    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

    После запуска макрос отобразит следующее поле ввода, в котором нужно ввести желаемое имя и нажать OK:

    Макрос 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

    В качестве альтернативы вы можете жесткий код адреса ячейки по которой должна быть названа копия, ячейка A1 в приведенном ниже коде. Чтобы назвать скопированный рабочий лист на основе другой ячейки, замените A1 соответствующей ссылкой на ячейку.

    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 Files (*.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 должен быть изменен на фактический путь и имя рабочей книги, из которой вы хотите скопировать лист.
    • Sheet1 должно быть заменено именем листа, который вы хотите скопировать.
    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

    Откройте исходный лист, запустите макрос, укажите, сколько копий активного листа вы хотите сделать, и нажмите кнопку OK :

    Как дублировать листы в Excel с помощью VBA

    Чтобы скопировать лист в Excel с помощью одного из приведенных выше макросов, вы можете либо вставить код VBA в свою книгу, либо запустить макрос из нашего образца рабочей книги.

    Как добавить макрос в рабочую книгу

    Чтобы вставить код в рабочую книгу, выполните следующие действия:

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

    Подробные пошаговые инструкции см. в статье Как вставить код VBA в Excel.

    Как запустить макрос из нашего образца рабочей книги

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

    Образец рабочей книги содержит следующие макросы:

    CopySheetToNewWorkbook - копирует текущий рабочий лист в новую рабочую книгу.

    КопироватьВыбранныеЛисты - копирует несколько выбранных листов в новую рабочую книгу.

    CopySheetToBeginningAnotherWorkbook - копирует активный лист в начало другой рабочей книги.

    CopySheetToEndAnotherWorkbook - копирует активный лист в конец другого файла Excel.

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

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

    CopySheetAndRenameByCell - создает копию активного листа и переименовывает ее на основе значения выделенной ячейки.

    CopySheetAndRenameByCell2 - копирует активный лист и переименовывает его на основе жестко заданного адреса ячейки.

    CopySheetToClosedWorkbook - позволяет скопировать лист в закрытую рабочую книгу.

    CopySheetFromClosedWorkbook - позволяет скопировать лист из другого файла Excel, не открывая его.

    DuplicateSheetMultipleTimes - позволяет дублировать лист в Excel несколько раз.

    Чтобы запустить макрос в Excel, просто сделайте следующее:

    1. Откройте загруженную рабочую книгу и включите содержимое, если появится соответствующий запрос.
    2. Откройте свою рабочую книгу и перейдите к листу, который нужно скопировать.
    3. В рабочем листе нажмите Alt + F8, выберите интересующий вас макрос и нажмите кнопку Запускайте .

    Вот как можно дублировать лист в Excel с помощью VBA. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.