Оглавление
В учебнике представлена коллекция макросов для дублирования листов в Excel: копирование и переименование на основе значения ячеек, копирование нескольких листов, копирование активного рабочего листа в другой файл без его открытия и многое другое.
Копировать листы в Excel вручную довольно быстро и просто... если сделать это всего один или два раза. Дублировать несколько листов несколько раз - скучно и долго. На этой странице вы найдете несколько полезных макросов для автоматизации этой задачи.
Excel VBA для копирования листа в новую рабочую книгу
Этот простейший однострочный макрос делает именно то, что следует из его названия - копирует активный лист в новую рабочую книгу.
Public Sub CopySheetToNewWorkbook() activeSheet.Copy End SubКопирование нескольких листов в Excel с помощью VBA
Если вы хотите скопировать несколько листов из активной рабочей книги в новую, выделите все интересующие вас листы и запустите этот макрос:
Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End SubExcel 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 SubExcel VBA для копирования листа из другой рабочей книги без открытия
Этот макрос позволяет скопировать рабочий лист из другого файла Excel, не открывая его. Скопированный лист будет вставлен в конец текущей рабочей книги.
Только не забудьте сделать пару замен в коде:
- C:\Users\XXX\Documents\Target_Book.xlsx должен быть изменен на фактический путь и имя рабочей книги, из которой вы хотите скопировать лист.
- Sheet1 должно быть заменено именем листа, который вы хотите скопировать.
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 в свою книгу, либо запустить макрос из нашего образца рабочей книги.
Как добавить макрос в рабочую книгу
Чтобы вставить код в рабочую книгу, выполните следующие действия:
- Откройте рабочий лист, который нужно скопировать.
- Нажмите Alt + F11, чтобы открыть редактор Visual Basic.
- На левой панели щелкните правой кнопкой мыши ThisWorkbook , а затем нажмите Вставка > Модуль .
- Вставьте код в окно Код.
- Нажмите F5, чтобы запустить макрос.
Подробные пошаговые инструкции см. в статье Как вставить код VBA в Excel.
Как запустить макрос из нашего образца рабочей книги
Кроме того, вы можете загрузить наш образец рабочей книги Дублировать листы Excel и запустить код оттуда.
Образец рабочей книги содержит следующие макросы:
CopySheetToNewWorkbook - копирует текущий рабочий лист в новую рабочую книгу.
КопироватьВыбранныеЛисты - копирует несколько выбранных листов в новую рабочую книгу.
CopySheetToBeginningAnotherWorkbook - копирует активный лист в начало другой рабочей книги.
CopySheetToEndAnotherWorkbook - копирует активный лист в конец другого файла Excel.
CopySheetAndRename - дублирует текущий лист, переименовывает его, как указано пользователем, и помещает копию после всех остальных листов в текущей рабочей книге.
CopySheetAndRenamePredefined - дублирует активный лист, дает жестко заданное имя копии и помещает ее в конец текущей рабочей книги.
CopySheetAndRenameByCell - создает копию активного листа и переименовывает ее на основе значения выделенной ячейки.
CopySheetAndRenameByCell2 - копирует активный лист и переименовывает его на основе жестко заданного адреса ячейки.
CopySheetToClosedWorkbook - позволяет скопировать лист в закрытую рабочую книгу.
CopySheetFromClosedWorkbook - позволяет скопировать лист из другого файла Excel, не открывая его.
DuplicateSheetMultipleTimes - позволяет дублировать лист в Excel несколько раз.
Чтобы запустить макрос в Excel, просто сделайте следующее:
- Откройте загруженную рабочую книгу и включите содержимое, если появится соответствующий запрос.
- Откройте свою рабочую книгу и перейдите к листу, который нужно скопировать.
- В рабочем листе нажмите Alt + F8, выберите интересующий вас макрос и нажмите кнопку Запускайте .
Вот как можно дублировать лист в Excel с помощью VBA. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!