Копировать лист Excel vba на другой лист

Обновлено: 03.07.2024

В этом руководстве представлен набор макросов для дублирования листов в Excel: копирование и переименование на основе значения ячейки, копирование нескольких листов, копирование активного рабочего листа в другой файл без его открытия и многое другое.< /p>

Вручную копировать листы в Excel довольно быстро и просто. если выполняется только один или два раза. Дублирование нескольких листов несколько раз утомительно и отнимает много времени. На этой странице вы найдете несколько полезных макросов для автоматизации этой задачи.

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

Этот простейший однострочный макрос делает именно то, что следует из его названия — копирует активный лист в новую книгу.

Копировать несколько листов в Excel с помощью VBA

Если вы хотите скопировать несколько листов из активной книги в новую, выберите все интересующие листы и запустите этот макрос:

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

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

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

Этот макрос копирует активный лист перед всеми остальными листами в целевом файле, в данном примере Book1. Чтобы скопировать в другой файл, замените «Book1.xlsx» полным именем целевой книги.

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

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

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

Чтобы иметь возможность копировать текущий лист в любую открытую книгу, вы можете создать пользовательскую форму (с именем UserForm1) с элементом управления ListBox (с именем ListBox1< /em>) и две кнопки:

Создание пользовательской формы для копирования листа в любую открытую книгу

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

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

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

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

Макрос чтобы скопировать активный лист в выбранную книгу

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

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

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

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

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

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

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

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

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

Макрос Excel скопировать лист и переименовать на основе значения ячейки

Сложнее всего было бы сделать так, чтобы ваши пользователи всегда выбирали правильную ячейку перед запуском макроса :)

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

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

Этот макрос копирует активный лист в конец закрытой книги. Имя другой книги в коде не указано - макрос откроет стандартное окно проводника Windows и позволит выбрать любой файл назначения:

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

После того, как вы выберете файл и нажмете Открыть, макрос скопирует активный лист и автоматически закроет целевую книгу.

Excel VBA для копирования листа из другой книги без открытия

Этот макрос позволяет скопировать лист из другого файла Excel, не открывая его. Скопированный лист будет вставлен в конец текущей книги.

Только не забудьте сделать пару замен в коде:

  • C:\Users\XXX\Documents\Target_Book.xlsx следует заменить на фактический путь и имя книги, из которой вы хотите скопировать лист.
  • Лист1 следует заменить именем листа, который вы хотите скопировать.

Excel VBA для многократного дублирования листа

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

Excel VBA для дублирования лист несколько раз

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

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

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

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

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

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

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

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

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

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

CopySheetToNewWorkbook — копирует текущий лист в новую книгу.

CopySelectedSheets: копирование нескольких выбранных листов в новую книгу.

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

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

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

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

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

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

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

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

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

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

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

Копировать лист в Excel с помощью макроса». ширина=

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

Вас также может заинтересовать

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

Я настроил макрос COPY A WORKSHEET AND RENAME, но он копирует новый рабочий лист ПОСЛЕ (справа) от источника. Я хочу, чтобы он копировался раньше. Я попытался изменить команду «После» на «До», но это не сработало. предложения?

Quiero copiar la hoja T3 y reemplazar con ella las hojas T1 y T2 в том же порядке, что и несравненные ошибки Ref! en la hoja Индекс

Привет
Есть ли способ запустить макрос, чтобы скопировать всю цепочку комментариев/заметок из ячеек на новый лист?
Я пытался найти код VB, но он не работал, я использую Office 365.
Спасибо

Здравствуйте.
Я пытаюсь разместить кнопку формы на листах в книге, поэтому, когда данные заполняются за неделю. Мне нравится копировать этот лист, говоря, что имя рабочей книги «работает» и имя листа «еженедельный отчет», когда эта страница подана за неделю. Я хочу скопировать этот лист в закрытую рабочую книгу, скажем, имя «Архив еженедельных отчетов», поместить его в конец всех листов и назвать лист, который я копирую, в «еженедельный отчет неделя 21» после 20-го листа еженедельного отчета. Все рабочие книги и листы доступны для обновлений, и мы хотим, чтобы другим было проще их обновлять. Не могли бы вы помочь. Я новичок в кодировании VBA.

Я получил сообщение "путь не найден '\.vbbad70.tmp' при использовании:
Sheets(SheetCount).Copy After:=Sheets(SheetCount)

Здравствуйте, большое спасибо за эти коды, они действительно экономят много времени. У меня есть вопрос относительно копирования листа в закрытую книгу. Когда я пытался это сделать, у меня возникает ошибка времени выполнения'91. ' "currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)". Я копирую на жесткий диск. Будем рады, если сможете помочь. С уважением, Ян.

Привет,
Это очень полезно.
Можете ли вы помочь мне с кодами для копирования нескольких листов (только значения и формат) из книги в новую книгу.
Спасибо!

Огромное спасибо! Сделал именно то, что мне было нужно (с некоторыми легкими изменениями)

Здравствуйте,
re Power Pivot/Управление в модели данных
Я получаю сообщение "PowerPivot не может загрузить модель данных".
Я пробовал много способов решить эту проблему, но не повезло.
Как вы думаете, будет ли работать, если я экспортирую все модули и листы по отдельности, а затем импортирую их в новую чистую книгу (.xlsm)

Уважаемый господин,
У меня есть рабочая тетрадь, в которой есть лист с некоторыми формулами. Я хочу создать дубликат этого листа и переименовать его со значением ячейки. И мне нужен этот дубликат листа только со значениями ячеек (как специальная вставка). Я сделал это с помощью ваших формул, но это копирование и вставка на исходный лист, а не на дубликат листа. Пожалуйста помогите.
Private Sub CommandButton1_Click()
Затемнить wks как рабочий лист
Установить wks = ActiveSheet
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
If wks.Range( "b9").Value "" Then
При ошибке возобновить следующий
ActiveSheet.Name = wks.Range("b9").Value
End If
CommandButton2_Click
'wks.Activate
End Sub
Private Sub CommandButton2_Click()
Worksheets(Sheets.Count).Activate
Range("a1:s36").Copy
Range ("a1:s36").PasteSpecial xlPasteValues ​​
End Sub

Всем доброе утро,
Приведенные выше макросы чрезвычайно полезны, но есть ли способ скопировать лист как «только значения», аналогичный методу PasteSpecial?

Может ли кто-нибудь помочь мне, как копировать листы с фигурами?
Мой код ссылается на определенную форму, поэтому, когда я копирую лист, имена фигур меняются.
Как я могу предотвратить это?
Есть ли способ написать код, который не должен ссылаться на каждую фигуру?
Спасибо за помощь.

Я пытаюсь несколько раз скопировать лист Excel, переименовать его на основе списка Excel, а затем заполнить столбец рядом с именем листа ссылкой на лист.
Список находится на листе «Обложка», и я хочу скопировать лист «Шаблон» на основе выбора списка. Ярлык ссылки будет находиться на титульном листе в столбце рядом с ячейкой, которая использовалась для создания имени листа. Там будет много вкладок и это сильно облегчит жизнь, если будет ссылка с титульной страницы
Возможно ли это, и если да, то как мне это сделать?

Привет
Можно ли перезаписать лист с таким же именем на листе, где этот лист должен быть скопирован? Мне нужно время от времени копировать один и тот же лист. Пожалуйста, помогите?

Здравствуйте!
Ваши макросы оказались очень полезными.
Я очень ценю вашу работу. Спасибо.
Большое спасибо.

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

Может ли кнопка быть на одном листе, но вместо копирования активного листа она копирует лист под названием «Новый наем»?

Excel VBA для многократного дублирования листа:
Это самое близкое к тому, что я пытаюсь сделать. Но все новые листы называются так же, как и исходные, но с (x). т. е. исходный лист 10001, и мне нужно, чтобы они были пронумерованы 10002, 10003 и т. д. Но они нумеруются 10001, 10001 (1), 10001 (2).
Как сделать так, чтобы вкладки листа нумеровались так, как я хочу? Любая помощь будет принята с благодарностью.
Спасибо!

Спасибо за этот vba "Excel VBA для копирования листа из другой книги без открытия", который отлично работает в его нынешнем виде. Не могли бы вы немного подправить его, чтобы вместо указания конкретного пути открывалось окно и я выбирал файл, из которого нужно вытащить данные. Остальное должно остаться прежним. Заранее спасибо.

Здравствуйте, я использовал ваш код под названием "Excel VBA для многократного дублирования листа"

но как мне переименовать листы? Я хочу, чтобы они были в цифрах.

Например,
Исходный лист является «мастером»
Копировать нужно 5
результат должен быть в названии листа как
Точка 1
Точка 2
Точка 3
Пункт 4
Пункт 5

---[Snip, Snip]---
Public Sub DuplicateSheetMultipleTimes()
Уменьшить n как целое
При ошибке Возобновить следующий
n = InputBox("Сколько копии активного листа вы хотите сделать?")

If n >= 1 Then
For numtimes = 1 To n
activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
ActiveSheet.name = "Point" + CStr (numtimes)
Следующая
Конец, если
Конец подписки
---[Snip, Sni

Это приведет к тому, что различные скопированные листы будут переименованы по мере их копирования

Здравствуйте,
У меня есть книга с большим количеством листов. Мне нужны определенные ячейки, скопированные с листа 1, листа 2 книги Workbook1, и показать их в другой книге. Например, у меня есть идентификатор и имя дилера на листе 1 и рейтинг на листе 5 той же книги 1. Мне нужно получить рейтинг, используя идентификатор, уникальный для другого листа, а затем мне нужно, чтобы поле идентификатора было динамическим. Как мне это сделать? пожалуйста, посоветуйте.

Можно ли выбрать диапазон вкладок? Например, макрос требует, чтобы я указывал названия вкладок по отдельности, т.е. Листы(Массив ("Вкладка1", "Вкладка2", "Вкладка3", "и т. д.")).Копировать)
Что делать, если я хочу выбрать открыть все вкладки между «Tab1» и «Tab8», не перечисляя их все по отдельности? Возможно ли это?

Здравствуйте, ваши макросы очень помогли.
Мне было интересно, можно ли добиться следующего:
1) я выбираю диапазон, скажем, A2-A15, который содержит имена рабочих листов в конкретной книге.
2) Я хочу создать новую рабочую книгу с выбранными именами рабочих листов из активной рабочей книги, используя следующую формулу:

Sub Copy_Worksheets()
Worksheets(Array("ACC_HF ", "ACC_Aflac", "и т.д.")).Копировать
End Sub
"
Есть ли способ преобразовать выбранный диапазон и передать его в аргумент массива?

Как я могу скопировать данные из диапазона ячеек, скажем, B5: I39 из нескольких рабочих листов, и вставить их в один новый рабочий лист, я хочу, чтобы все выбранные рабочие листы с определенным диапазоном данных были скопированы на один рабочий лист в конец рабочей тетради. Все форматирование с выбранных листов также будет скопировано.

Спасибо за совет, есть ли способ скопировать строку в одной книге и вставить эту строку данных в другую книгу в определенной ячейке? Однако есть одна загвоздка: данные нужно будет синхронизировать с другой вкладкой той же книги раз в два месяца.

Отлично,
как я могу скопировать листы, содержащие определенную текстовую строку где-то на листе, в новую книгу?

Мы начали с того, что показали вам самый простой пример копирования листов: копирование листов в новую книгу. В приведенных ниже примерах показано, как скопировать лист в той же книге. При копировании листа в рабочей книге необходимо указать местоположение. Чтобы указать местоположение, вы сообщите VBA, чтобы переместить рабочий лист ДО или ПОСЛЕ другого рабочего листа.

Копировать лист перед другим листом

Здесь мы укажем копирование и вставку Листа перед Листом2

Копировать лист перед первым листом

Вместо указания имени листа вы также можете указать положение листа. Здесь мы копируем и вставляем лист перед первым листом в книге.

копировать лист vba перед первым листом

Вновь созданный лист теперь будет первым листом в книге.

Программирование VBA стало проще

automacro

Прекратите искать код VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области кодирования и множеством функций, позволяющих сэкономить время для всех пользователей!

Копировать лист после последнего листа

Используйте свойство After, чтобы указать VBA вставить лист ПОСЛЕ другого листа. Здесь мы скопируем и вставим лист после последнего листа в книге:

Обратите внимание, что мы использовали Sheets.Count для подсчета количества листов в книге.

копировать vba после последнего листа

Переместить лист

Вы также можете перемещать лист внутри книги, используя аналогичный синтаксис. Этот код переместит Sheet1 в конец книги:

Вы можете копировать и перемещать лист в Excel с помощью кода VBA, и в этом руководстве мы узнаем, как это сделать.

Копировать лист в той же книге

Если вы хотите скопировать лист в той же книге, вы можете использовать следующий код, где вы использовали метод копирования.

В этом коде лист1 является первым листом в книге, и когда вы запускаете этот код, он копирует лист с именем "Лист5" перед первым листом в книге.


И если вы хотите скопировать его после первого листа, код будет выглядеть следующим образом.

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

Когда вы запускаете этот код VBA, он копирует «Лист5» до и после «Листа3».


С помощью следующей строки кода вы можете скопировать лист после последнего листа в книге. Он использует sheet.count, чтобы получить количество листов, а затем использует число, чтобы скопировать лист до последнего.


Скопировать лист в той же книге с новым именем

И если вы хотите скопировать лист, а затем мгновенно переименовать его, вам нужно использовать свойство name, как в следующем коде.


Перемещение листа в той же книге

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


Этот код переместит «Лист5» перед «Лист2», как вы можете видеть на снимке выше.

Скопировать лист в новую книгу

При использовании метода копирования без определения листа в текущей книге VBA открывает новую книгу и копирует этот лист в эту книгу.

И переместить лист в новую книгу.

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

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

Приведенный выше код создает массив листов, а затем копирует их все в новую книгу.

Копировать лист в другую книгу

Если вы хотите скопировать лист в другую книгу, которая уже открыта, вы можете указать имя книги после или перед аргументом.

Приведенный выше код копирует Sheet1 из активной книги и добавляет к первому листу Book1.xlsx, который уже открыт.

И если вы хотите его переместить.

Копировать лист в закрытую книгу

Есть способ скопировать лист в закрытую книгу, и вам не нужно ее открывать. Посмотрите на приведенный ниже код.

В этом коде у вас есть переменная myBook, а затем ей назначена рабочая книга. Мы отключили обновление экрана, чтобы код мог выполнять задачу на сервере.

Копировать лист из другой книги, не открывая его

Таким же образом вы можете копировать и перемещать лист из закрытой книги. Посмотрите на приведенный ниже код.

< бр />

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

Копирование VBA с использованием функции копирования диапазона

Простым способом копирования данных между рабочими листами является использование функции копирования диапазона VBA. Мы можем сделать это разными способами

Ниже описаны простые шаги, описанные выше:

  1. Объявите и определите исходный и конечный листы («Src» и «Dst»)
  2. Используйте функцию копирования диапазона, чтобы скопировать определенный диапазон из исходного листа в целевой.

Это вид до примера рабочего листа:

Это после использования функции копирования диапазона VBA:

Копировать VBA только на UseRanged

Что же делать, если вы не хотите заморачиваться с проверкой используемого диапазона исходного листа и просто хотите скопировать его целиком? Вы можете использовать атрибут UsedRange исходного рабочего листа — см. пример ниже.

В чем разница?В приведенном выше фрагменте кода вместо копирования определенного диапазона мы копируем весь используемый диапазон исходного рабочего листа. Используемый диапазон всегда представляет собой любой прямоугольный диапазон ячеек, который был каким-либо образом изменен на рабочем листе, т. е. отредактирован, изменен цвет, граница и т. д. Используемый диапазон всегда имеет начальную и конечную ячейки, то есть ближайшую и самую дальнюю от A1, которые были изменены. В моем случае результат был таким же, но код выше намного удобнее.

VBA Копировать и вставлять только значения

Функция VBA Copy Range скопирует все содержимое ячейки, включая форматирование, границы, условное форматирование и т. д. Однако иногда требуется скопировать различную выбранную информацию или только значения ячейки без форматирования. Для этого нам нужно изменить макрос выше:

Копировать ячейки VBA без форматирования

На этот раз мы изменили последние две строки предыдущих процедур. Сначала мы копируем выбранный диапазон из исходного листа. Затем мы используем функцию VBA Range PasteSpecial, чтобы вставить диапазон из буфера обмена только со значениями на наш рабочий лист назначения. Вот эффект:

Выводы

Копировать данные листа VBA просто и часто используется. Также ознакомьтесь с моей надстройкой SQL, чтобы узнать, как использовать SQL для копирования данных для одного или нескольких рабочих листов.

Читайте также: