Vba excel копирование ячейки на другой лист

Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.

Метод Range.Cut

Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена.

Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.

Метод Range.Copy

Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.

Синтаксис

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена.

Метод Worksheet.Paste

Worksheet.Paste – это метод, который вставляет содержимое буфера обмена на рабочий лист.

Синтаксис

Worksheet.Paste (Destination, Link)

Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.

Параметры

Параметры Описание
Destination Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект.
Link Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию).

В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.

Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).

Примеры

Вырезание и вставка диапазона одной строкой (перемещение):

Range(«A1:C3»).Cut Range(«E1»)

Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Range(«A1:C3»).Cut

ActiveSheet.Paste Range(«E1»)

Копирование и вставка диапазона одной строкой:

Range(«A18:C20»).Copy Range(«E18»)

Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:

Range(«A18:C20»).Copy

ActiveSheet.Paste Range(«E18»)

Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:

Range(«A1»).Copy Range(«B1:D10»)


Home / VBA / VBA Copy Range to Another Sheet + Workbook

To copy a cell or a range of cells to another worksheet you need to use the VBA’s “Copy” method. In this method, you need to define the range or the cell using the range object that you wish to copy and then define another worksheet along with the range where you want to paste it.

Copy a Cell or Range to Another Worksheet

Range("A1").Copy Worksheets("Sheet2").Range("A1")
  1. First, define the range or the cell that you want to copy.
    1-define-the-range-or-cell
  2. Next, type a dot (.) and select the copy method from the list of properties and methods.
    2-type-a-dot-and-select-the-copy-method
  3. Here you’ll get an intellisense to define the destination of the cell copied.
    3-define-the-destination-of-the-copied-cell
  4. From here, you need to define the worksheet and then the destination range.
    4-define-the-worksheet-and-than-destination-range

Now when you run this code, it will copy cell A1 from the active sheet to the “Sheet2”. There’s one thing that you need to take care that when you copy a cell and paste it to a destination it also pastes the formatting there.

But if you simply want to copy the value from a cell and paste it into the different worksheets, consider the following code.

Worksheets("Sheet2").Range("A1") = Range("A1").Value

This method doesn’t use the copy method but simply adds value to the destination worksheet using an equal sign and using the value property with the source cell.

Copy Cell from a Different Worksheet

Now let’s say you want to copy a cell from a worksheet that is not active at the time. In this case, you need to define the worksheet with the source cell. Just like the following code.

Worksheets("sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")

Copy a Range of Cells

Range("A1:A10").Copy Worksheets("Sheet2").Range("A1:A10")
Range("A1:A10").Copy Worksheets("Sheet2").Range("A1")

Copy a Cell to a Worksheet in Another Workbook

When workbooks are open but not saved yet.

Workbooks("Book1").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2").Worksheets("Sheet1").Range("A1")

When workbooks are open and saved.

Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")

Copy a Cell to a Worksheet in Another Workbook which is Closed

'to open the workbook that is saved in a folder on your system _
change the path according to the location you have in your _
system
Workbooks.Open "C:UsersDellDesktopmyFile.xlsx"

'copies cell from the book1 workbook and copy and paste _
it to the workbook myFile
Workbooks("Book1").Worksheets("Sheet1").Range("A1").Copy _
Workbooks("myFile").Worksheets("Sheet1").Range("A1")

'close the workbook and after saving
Workbooks("myFile").Close SaveChanges:=True

Related: How to Open a Workbook using VBA in Excel

More Tutorials

    • Count Rows using VBA in Excel
    • Excel VBA Font (Color, Size, Type, and Bold)
    • Excel VBA Hide and Unhide a Column or a Row
    • Excel VBA Range – Working with Range and Cells in VBA
    • Apply Borders on a Cell using VBA in Excel
    • Find Last Row, Column, and Cell using VBA in Excel
    • Insert a Row using VBA in Excel
    • Merge Cells in Excel using a VBA Code
    • Select a Range/Cell using VBA in Excel
    • SELECT ALL the Cells in a Worksheet using a VBA Code
    • ActiveCell in VBA in Excel
    • Special Cells Method in VBA in Excel
    • UsedRange Property in VBA in Excel
    • VBA AutoFit (Rows, Column, or the Entire Worksheet)
    • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
    • VBA Enter Value in a Cell (Set, Get and Change)
    • VBA Insert Column (Single and Multiple)
    • VBA Named Range | (Static + from Selection + Dynamic)
    • VBA Range Offset
    • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
    • VBA Wrap Text (Cell, Range, and Entire Worksheet)
    • VBA Check IF a Cell is Empty + Multiple Cells

    ⇠ Back to What is VBA in Excel

    Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

    На чтение 3 мин. Просмотров 51.7k.

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

    Уровень мастерства: Начинающий

    Копировать и вставить: наиболее распространенное действие Excel

    Копирование и вставка, вероятно, является одним из самых
    распространенных действий в Excel. Это также одна из самых распространенных
    задач, которые мы автоматизируем при написании макросов.

    Есть несколько различных способов выполнить эту задачу, и устройство записи макросов не всегда дает вам наиболее эффективный код VBA.

    В следующих трех видео я объясняю:

    • Самый эффективный метод для простого копирования
      и вставки в VBA.
    • Самый простой способ вставить значения.
    • Как использовать метод PasteSpecial для других
      типов вставок.

    Видео № 1: Простой метод «Копировать-вставить»

    Видео лучше всего просматривать в полноэкранном HD.

    Sub Примеры_копирования_диапазона()
    'Используйте метод Range.Copy для простого копирования / вставки
    
        'Метод Range.Copy - копирование и вставка с 1 строкой
        Range("A1").Copy Range("C1")
        Range("A1:A3").Copy Range("D1:D3")
        Range("A1:A3").Copy Range("D1")
        
        'Range.Copy с одного листа на другой
        Worksheets("Лист1").Range("A1").Copy Worksheets("Лист2").Range("A1")
        
        'Range.Copy с одного файла (на другой
        Workbooks("План.xlsx").Worksheets("Лист1").Range("A1").Copy _
            Workbooks("Факт.xlsx").Worksheets("Лист1").Range("A1")
    
    End Sub
    

    Видео № 2: Простой способ вставить значения

    Sub Копируем_только_значения()
    'Установите значения ячеек равными другим, чтобы вставить значения
    
    'Устанавливает равенство одного диапазона другому
        Range("C1").Value = Range("A1").Value
        Range("D1:D3").Value = Range("A1:A3").Value
         
    'Равенство значений между листами
        Worksheets("Лист1").Range("A1").Value = Worksheets("Лист2").Range("A1").Value
         
    'Равенство значений между книгами
        Workbooks("Факт.xlsx").Worksheets("Лист1").Range("A1").Value = _
            Workbooks("План.xlsx").Worksheets("Лист1").Range("A1").Value
            
    End Sub
    

    Видео № 3: Метод PasteSpecial

    Sub Копируем_с_помощью_специальной_вставки()
    'Используйте метод Range.PasteSpecial для выбора типа вставки
    
     'Копируем и вставляем через СпецВставку
    Range("A1").Copy
    Range("A5").PasteSpecial Paste:=xlPasteFormats
    
    'Используем спецвставку между листами
    Worksheets("Лист1").Range("A2").Copy
    Worksheets("Лист2").Range("A2").PasteSpecial Paste:=xlPasteFormulas
    
    'Используем спецвставку между файлами
    Workbooks("План.xlsx").Worksheets("Лист1").Range("A3").Copy
    Workbooks("Факт.xlsx").Worksheets("Лист1").Range("A1").PasteSpecial Paste:=xlPasteFormats
    
    'Убираем "бегающих муравьёв" после копирования (очищаем буфер обмена)
    Application.CutCopyMode = False    
       
    End Sub
    

    Вставить данные ниже последней заполненной строки

    Один из самых распространенных вопросов, которые я получаю о копировании и вставке с помощью VBA: «Как мне вставить данные в конец таблицы? «

    Сначала нужно найти последнюю заполненную строку данных, а затем скопировать и вставить ниже неё.

    Переходите по ссылке, чтобы научиться 3 способам поиска последней заполненной ячейки

    Bottom line: Learn 3 different ways to copy and paste cells or ranges in Excel with VBA Macros.  This is a 3-part video series and you can also download the file that contains the code.

    Skill level: Beginner

    3 Ways to Copy and Paste in Excel with VBA Macros

    Copy & Paste: The Most Common Excel Action

    Copy and paste is probably one of the most common actions you take in Excel.  It’s also one of the most common tasks we automate when writing macros.

    There are a few different ways to accomplish this task, and the macro recorder doesn’t always give you the most efficient VBA code.

    In the following three videos I explain:

    • The most efficient method for a simple copy and paste in VBA.
    • The easiest way to paste values.
    • How to use the PasteSpecial method for other paste types.

    You can download the file I use in these videos below.  The code is also available at the bottom of the page.

    Video #1: The Simple Copy Paste Method

    You can watch the playlist that includes all 3 videos at the top of this page.

    Video #2: An Easy Way to Paste Values

    Video #3: The PasteSpecial Method Explained

    VBA Code for the Copy & Paste Methods

    Download the workbook that contains the code.

    '3 Methods to Copy & Paste with VBA
    'Source: https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/
    'Author: Jon Acampora
    
    Sub Range_Copy_Examples()
    'Use the Range.Copy method for a simple copy/paste
    
        'The Range.Copy Method - Copy & Paste with 1 line
        Range("A1").Copy Range("C1")
        Range("A1:A3").Copy Range("D1:D3")
        Range("A1:A3").Copy Range("D1")
        
        'Range.Copy to other worksheets
        Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")
        
        'Range.Copy to other workbooks
        Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy _
            Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1")
    
    End Sub
    
    
    Sub Paste_Values_Examples()
    'Set the cells' values equal to another to paste values
    
        'Set a cell's value equal to another cell's value
        Range("C1").Value = Range("A1").Value
        Range("D1:D3").Value = Range("A1:A3").Value
         
        'Set values between worksheets
        Worksheets("Sheet2").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value
         
        'Set values between workbooks
        Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").Value = _
            Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value
            
    End Sub
    
    
    Sub PasteSpecial_Examples()
    'Use the Range.PasteSpecial method for other paste types
    
        'Copy and PasteSpecial a Range
        Range("A1").Copy
        Range("A3").PasteSpecial Paste:=xlPasteFormats
        
        'Copy and PasteSpecial a between worksheets
        Worksheets("Sheet1").Range("A2").Copy 
        Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteFormulas
        
        'Copy and PasteSpecial between workbooks
        Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Copy
        Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteFormats
        
        'Disable marching ants around copied range
        Application.CutCopyMode = False
    
    End Sub

    Paste Data Below the Last Used Row

    One of the most common questions I get about copying and pasting with VBA is, how do I paste to the bottom of a range that is constantly changing?  I first want to find the last row of data, then copy & paste below it.

    To answer this question, I created a free training video on how to paste data below the last used row in a sheet with VBA.  Can I send you the video?  Please click the image below to get the video.

    Paste Data Below Last Used Row VBA Free Training

    Free Training on Macros & VBA

    The 3 videos above are from my VBA Pro Course.  If you want to learn more about macros and VBA then checkout my free 3-part video training series.

    I will also send you info on the VBA Pro Course, that will take you from beginner to expert.  Click the link below to get instant access.

    Free Training on Macros & VBA

    Please leave a comment below with any questions.  Thanks!

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

      В связи с этим я решил прикрепить файл с которым я работаю. По сути дела мне надо преобразовать данные, содержащиеся на Листе 1 согласно примеру на Листе 2. Проблема у меня возникает, когда я пытаюсь перенести информацию из 3ий строки (Period X) на Лист 2 в Столбец J. Я попробовал конструкцию With – End With, предложенную Юрием, но она не сработала.    

      Sub Reformatin_Fcst_with_Jugmt()  
       Dim i As Integer, rgX As Range, rgX2 As Range, DetFields As Range  
       Dim intNumRow As Integer, intNumRow2 As Integer, intNumCol As Integer  

             Worksheets(«Sheet2»).Cells.Clear  
       Worksheets(«Sheet2»).Range(«B1»).Value = «Project + Period»  
       Worksheets(«Sheet2»).Range(«C1»).Value = «WBS Org Level 2»  
       Worksheets(«Sheet2»).Range(«D1»).Value = «Project»  
       Worksheets(«Sheet2»).Range(«E1»).Value = «Project2»  
       Worksheets(«Sheet2»).Range(«F1»).Value = «PRJ Customer2»  
       Worksheets(«Sheet2»).Range(«G1»).Value = «PRJ Resp Person2»  
       Worksheets(«Sheet2»).Range(«H1»).Value = «PRJ Admin2»  
       Worksheets(«Sheet2»).Range(«I1»).Value = «Fiscal Quarter»  
       Worksheets(«Sheet2»).Range(«J1»).Value = «Fiscal year/period»  
       Worksheets(«Sheet2»).Range(«K1»).Value = «Plan Revenue»  
       Worksheets(«Sheet2»).Range(«L1»).Value = «Plan Total Incurred Cost»  
       Worksheets(«Sheet2»).Range(«M1»).Value = «EGM%»  

             Set rgX = Range(«a1»).End(xlDown).Offset(-1)  
       Set rgX2 = Worksheets(«Sheet2»).Range(«a2»)  
       intNumRow = Range(«a1»).End(xlDown).CurrentRegion.Rows.Count  
       Set DetFields = Range(Cells(Range(«a1»).End(xlDown).Row + 1, 1), Cells(intNumRow, 5))  
       For i = 1 To Application.WorksheetFunction.CountIf(Rows(«3:3»), «Period*»)  
           Set rgX = Rows(«3:3″).Find(What:=»Period», After:=rgX)  
           DetFields.Copy Worksheets(«Sheet2»).Cells(rgX2.Row, rgX2.Column + 2)  
           Range(Cells(rgX.Row + 2, rgX.Column), Cells(intNumRow, rgX.Column + 1)).Copy _  
           Worksheets(«Sheet2»).Cells(rgX2.Row, rgX2.Column + 10)  
           intNumRow2 = rgX2.Offset(0, 2).End(xlDown).CurrentRegion.Rows.Count  

                     With Sheets(«Sheet2»)  
               rgX.Copy .Range(Cells(rgX2.Row, rgX2.Column + 9), Cells(intNumRow2, rgX2.Column + 9))  
           End With  

                 Set rgX2 = Worksheets(«Sheet2»).Cells(intNumRow2 + 1, 1)  
       Next i  
    End Sub  

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

    Понравилась статья? Поделить с друзьями:
  • Vba excel копирование формул
  • Vba excel копирование форматов ячеек excel
  • Vba excel копирование формата ячейки
  • Vba excel копирование строки с листа на лист
  • Vba excel копирование строк по условию